Độ dài tối đa của mật khẩu trên hệ thống unix / linux là bao nhiêu?


27

Độ dài tối đa cho phép của mật khẩu trên hệ thống unix / linux là bao nhiêu?


20
Nếu câu trả lời không phải là 42, thì nó nên như vậy.
tvanfosson

một câu hỏi tốt hơn có thể là: tôi có thể mong đợi ai đó gõ một cách hợp lý? Nếu giới hạn là 40 và bạn đang vượt quá mức đó, bạn đang làm sai điều gì đó.
msw

Câu trả lời:


39

Nếu hệ thống của bạn sử dụng hàm băm mật mã để lưu trữ mật khẩu, ví dụ MD5, SHA1, v.v. thì không có giới hạn về độ dài mật khẩu vì các băm này có thể được tạo với bất kỳ lượng dữ liệu nào. Băm MD5 hoặc SHA1 có thể được tạo cho toàn bộ ổ cứng và điều này thường được thực hiện cho mục đích pháp y bởi vì nếu chỉ một bit bị thay đổi một chút thì bạn có một hàm băm rất khác và do đó bạn có thể xác minh dữ liệu đã thay đổi. Điều này có nghĩa là bạn có thể sử dụng các thuật toán chính xác này để kiểm tra xem dữ liệu có bị giả mạo hay không. Linux (ít nhất là Linux hiện tại) sử dụng các hàm băm tương tự. Nó sẽ hỏi bạn mật khẩu và sau đó nó sẽ tạo ra một mật mã băm của mật khẩu bạn đã cung cấp và xem liệu hàm băm này có khớp với mật khẩu được lưu trữ hay không.

Có một nhược điểm nhỏ khi sử dụng các giá trị băm này là hàm băm có kích thước hữu hạn, ví dụ hàm băm MD5 là 128 bit. Điều này có nghĩa là hàm băm MD5 chỉ có 2^128hoặc 340,282,366,920,938,463,463,374,607,431,768,211,456có thể kết hợp. Bây giờ trong khi đó là một con số lớn, điều này có nghĩa là bạn có thể có cái mà họ gọi là xung đột băm trong đó bạn có hai mục hoặc khóa khác nhau tạo ra cùng một hàm băm. Về lý thuyết, kích thước khóa càng lớn, xác suất va chạm càng thấp và thời gian sử dụng mật khẩu sẽ mất nhiều thời gian hơn nhưng đó là đánh giá nghiêm ngặt về entropy và thời gian CÓ THỂmất nhưng cũng có khả năng mục đầu tiên họ thử có thể là mục phù hợp ngay cả khi đó là một va chạm băm. Nói chung, bạn thực sự an toàn hơn khi sử dụng hàm băm có kích thước khóa lớn hơn bởi vì, giả sử đây là MD5, tỷ lệ của mật khẩu đầu tiên khớp với các 340,282,366,920,938,463,463,374,607,431,768,211,456kết quả khớp có thể là cực kỳ khó xảy ra. Cũng chọn một mật khẩu tốt vì nhiều người bẻ khóa sẽ thử và sử dụng danh sách từ, danh sách tên và đột biến của danh sách này (nghĩa là nếu từ đó là "cá" thì họ sẽ thử fish1234, fish!@#$v.v.) trước khi họ dựa vào vũ phu buộc mật khẩu.

Cách bạn có thể biết liệu hệ thống của bạn có sử dụng băm mật mã để lưu mật khẩu hay không là xem /etc/shadowtệp (giả sử bạn có quyền truy cập root). Mỗi dòng được định dạng như thế nào user:password:last-changed:minimum-age:maximum-age:warning-period:inactivity-period:expiration-date:reserved. Trường mật khẩu có thể bắt đầu bằng $num$(tức là băm md5 trong trường mật khẩu trông giống như $1$01234567$b5lh2mHyD2PdJjFfALlEz1nơi bắt đầu bằng $1$). Nếu nó bắt đầu bằng điều này, thì điều đó có nghĩa là hệ thống của bạn đang sử dụng hàm băm mật mã. Định dạng của trường mật khẩu trên tất cả các hệ thống hiện đại là $id$salt$hash. Id chỉ định loại băm mật mã bạn đang sử dụng. Muối là một chuỗi được tạo ngẫu nhiên được nối với khóa (mật khẩu văn bản thuần túy) để bảo vệ chống lại các bảng băm đã biết trước. Băm là hàm băm mật mã được tạo từ muối và khóa / mật khẩu. Nếu trường mật khẩu của bạn bắt đầu bằng$num$ sau đó bạn đang sử dụng băm mật mã.

Vì vậy, bạn biết, những con số có nghĩa là:

  • $1$ có nghĩa là bạn đang sử dụng MD5
  • $2$hoặc $2a$có nghĩa là bạn đang sử dụng blowfish
  • $5$ có nghĩa là bạn đang sử dụng SHA-256
  • $6$ có nghĩa là bạn đang sử dụng SHA-512

SHA-512 là hàm băm có sẵn tốt nhất để sử dụng mà glibc cung cấp. Tôi không biết cá kiếm mạnh như thế nào nhưng nó không phải là một phần của glibc và do đó chỉ có sẵn trên một số bản phân phối đã thêm nó. SHA-512 tạo ra các khóa 512 bit hoặc 2 ^ 512 kết hợp có thể xảy ra trước khi xảy ra xung đột và với mật khẩu đủ phức tạp, sẽ mất một cụm máy tính rất lâu để tìm mật khẩu thực tế hoặc va chạm trong hàm băm .

Ngoài ra, nếu bạn có hàm băm không bắt đầu $num$thì bạn đang sử dụng DES và giới hạn ở độ dài 8 ký tự. Tôi tin rằng hệ thống cũ hơn sử dụng DES, hoặc ít nhất là một số trong số họ, họ sẽ lấy bất kỳ mật khẩu kích thước nào nhưng chỉ sử dụng 8 ký tự đầu tiên. Điều này có nghĩa là nếu bạn đặt mật khẩu của mình mybigbigapplevà ai đó sử dụng mật khẩu mybigbigcitythì họ sẽ được phép vào vì DES sẽ chỉ sử dụng mybigbigvà mọi thứ sau đó sẽ bị loại bỏ.

Vì vậy, bạn biết, Ubuntu kể từ 8.04, được phát hành vào tháng 4 năm 2008, đã sử dụng băm MD5. Ubuntu từ 8.10, được phát hành vào tháng 10 năm 2008 và tất cả các phiên bản kể từ đó sử dụng băm SHA-512. Tôi không biết bao lâu trước tháng 4 năm 2008 nhưng tôi tin rằng trong vài năm nữa, nếu không nhiều hơn, hầu hết tất cả các bản phân phối đều sử dụng băm.

12.04 và 14.04 LTS hiện tại (các bản phát hành hỗ trợ dài hạn) của Ubuntu dường như sử dụng SHA-512 theo mặc định, như có thể thấy với phần được $6$thêm vào hàm băm trong tệp / etc / Shadow:

catullus:$6$MsHYK60sqcv$BtDqVCMXibpqg[...]

Bây giờ độ dài khóa hoặc mật khẩu được phép cho bất kỳ thuật toán băm nào không phải là điều duy nhất để xác định mật khẩu kích thước bạn được phép có. Mục quan tâm khác là cách chương trình được viết và chính chương trình sẽ hỗ trợ. Tất cả các chương trình passwd hiện đại và có lẽ hầu hết các crypt(3)chức năng trong Linux. tiền điện tử trong một thời gian dài (vì ít nhất MD5 đã được sử dụng và có lẽ trước đó) đã cho phép các con trỏ ký tự cho khóa thực tế. Điều này có nghĩa là giới hạn duy nhất về thời gian sử dụng khóa sẽ dựa trên mức độ RAM mà chương trình có sẵn cho nó nhưng trong mọi trường hợp, điều này có lẽ còn lâu hơn bất kỳ mật khẩu nào mà mọi người có thể nhớ được (hàng triệu ký tự?).

Điều này sẽ trả lời câu hỏi của bạn là mật khẩu có thể là bao lâu. Hy vọng tôi đã giúp.

Tài liệu tham khảo:


7
"Độ dài tối đa của câu trả lời SU là bao nhiêu?" lol câu trả lời tuyệt vời!
James Mertz

1
Cần lưu ý rằng thuật toán mật mã () đã bị phản đối trong hơn một thập kỷ. Bất kể mật khẩu mật mã () dài bao nhiêu, nó sẽ bị cắt ngắn thành 8 ký tự. Kết hợp với không gian khóa rất nhỏ của muối 12 bit, tiền điện tử () đã được hiển thị hoàn toàn không an toàn. Để tham khảo, đây là một bài viết về cách 1 triệu mật khẩu của Gawk bị lộ do sử dụng tiền điện tử () trở lại vào năm 2010: https://www.lightbluetouchapers.org/2010/12/15/the-gawker-hack- làm thế nào một triệu mật khẩu đã bị mất /
cremefraiche

8

Nó phụ thuộc vào mô-đun xác thực được sử dụng. Trong các hệ thống Linux hiện đại, không có giới hạn tối đa về độ dài mật khẩu. Một số hệ thống lỗi thời có thể có giới hạn được áp đặt bởi hệ thống lưu trữ mật khẩu của chúng - mức tối đa phổ biến dường như là 8, 40 và 255.


3

Tùy thuộc vào cách lưu trữ mật khẩu, MD5, SHA1, BlowFish, v.v ... Tôi nghĩ rằng không có giới hạn đối với mật khẩu được đặt bởi chính phương thức lưu trữ.

Các triển khai cũ hơn có thể có giới hạn có thể là 8 hoặc 255 ký tự.

Điều này có vẻ như là một câu hỏi phù hợp hơn cho www.serverfault.com :)


5
Đây là máy tính nói chung liên quan, không nhất thiết phải cụ thể cho các máy chủ mặc dù!
Darth Android

0

Lệnh passwd liên quan đến Lệnh mcrypt để mã hóa. Theo mã nguồn của mcrypt, kích thước tối đa của stdin bị giới hạn ở 512 Ký tự (mật mã) - nhưng đây là hai năm trước .... - (Tôi sẽ cập nhật câu trả lời này vào giờ tới) ... Có ... Trong mã nguồn 2.6.8 của mcrypt trong thư mục src, có tệp getpass.c - ở đầu bạn thấy giá trị 512 được đặt làm giá trị char tĩnh. (Tôi rất thích bơm nó lên tới 1,4 GB ...):

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.