Tại sao mật khẩu ngẫu nhiên này được gắn cờ nói rằng nó quá đơn giản / có hệ thống?


37

Làm thế nào là chuỗi ngẫu nhiên M1uG*xgRCthKWwjIjWc*010iSthY9bucđược phát hiện là quá đơn giản / có hệ thống cho một mật khẩu theo passwdcracklib-check ? Hãy thử nó trên máy của bạn và xem

echo "M1uG*xgRCthKWwjIjWc*010iSthY9buc" | cracklib-check

Lưu ý rằng đây không phải là mật khẩu của tôi, mà là một chuỗi được tạo ngẫu nhiên khác từ cùng một trình tạo mật khẩu ngẫu nhiên tạo ra kết quả tương tự.


3
Nó nóiM1uG*xgRCthKWwjIjWc*010iSthY9buc: OK
rici

Hóa ra chỉ có một số phiên bản phát hiện điều này là đơn giản. Xem câu trả lời của slm để biết thêm thông tin về điều này.
BeowulfNode42

Tại sao bạn không sử dụng /dev/urandomđể tạo mật khẩu?
devnull

@devnull - không chắc bạn đã nghĩ gì nhưng đã thêm 2 phương pháp vào chữ A của tôi về cách tạo mật khẩu.
slm

Câu trả lời:


59

Vì cracklib là mã nguồn mở, câu trả lời có thể được tìm thấy trong mã nguồn .

"Quá đơn giản / có hệ thống" có nghĩa là có quá nhiều ký tự đứng trước một trong những hàng xóm theo bảng chữ cái của họ. Do đó "ab" hoặc "ba" được coi là xấu, nhưng "ac" hoặc "ca" đều ổn vì b bị bỏ qua.

Trước bản vá này từ 2010/03/02 , nó cho phép tối đa bốn nhân vật thể hiện đặc điểm này. Ví dụ: "bar12345" sẽ thất bại, vì các ký tự "a", "2", "3", "4" và "5" là hàng xóm theo thứ tự chữ cái của các ký tự trước.

slm phát hiện ra trong câu trả lời của mình M1uG*xgRCthKWwjIjWc*010iSlà ổn, trong khi M1uG*xgRCthKWwjIjWc*010iStthì không. Hãy phân tích. Dưới đây là các ký tự mà cracklib-check nghĩ là dấu hiệu của mật khẩu có hệ thống:

M1uG*xgRCthKWwjIjWc*010iS
               ^^    ^^

thấp hơn tối đa bốn, nhưng thêm t:

M1uG*xgRCthKWwjIjWc*010iSt
               ^^    ^^  ^

đẩy nó vượt quá giới hạn, vì T đi theo S (có vẻ như bài kiểm tra không phân biệt chữ hoa chữ thường).

Bản vá thay đổi giới hạn tối đa, do đó tùy thuộc vào tổng độ dài mật khẩu, để tránh các lỗi giả như thế này.


1
Không nên 010 được tính là 3? Câu trả lời tuyệt vời mặc dù.
John V.

1
Câu trả lời tuyệt vời và cảm ơn vì đã cung cấp mã nguồn chính xác khác. Nhân tiện, có bất kỳ lý do tại sao tập tin này được gọi là fascist.c?
laurent

@ this.lau_ - Tôi đoán: en.wikipedia.org/wiki/Fascism
slm

Hơi buồn cười khi nói về "nhỏ hơn" và "lớn hơn" đối với các nhân vật, phải không? Chà, mặc dù tôi biết về giá trị ASCII, nó có thể không quá rõ ràng. - Vậy tại sao không giải thích nó một cách đơn giản hơn? Không có nhân vật phải được theo sau bởi người hàng xóm trực tiếp cũng như người tiền nhiệm của nó. Do đó, không cho phép "ab" hay "ba", nhưng "ac" hoặc "ca" sẽ bị bỏ qua vì b bị bỏ qua.
cú pháp

Có một lý do tại sao nó không thể nhỏ hơn hoặc cao hơn nhưng nó có thể giống nhau ( Ww)?
Jeroen Vannevel

31

Trên Fedora 19

Khi tôi chạy nó tôi nhận được OK. Tôi đang ở Fedora 19.

$ echo 'M1uG*xgRCthKWwjIjWc*010iSthY9buc' | cracklib-check
M1uG*xgRCthKWwjIjWc*010iSthY9buc: OK

Đây là thông tin phiên bản:

$ rpm -qfi /usr/sbin/cracklib-check | grep -E "Version|Release"
Version     : 2.8.22
Release     : 3.fc19

LƯU Ý: Tôi sẽ thử nó với các trích dẫn đơn thay vì các câu hỏi đôi vì bạn đang xử lý *chúng có thể được mở rộng theo những cách lạ đối với bạn.

CentOS 5 & 6

Thử ví dụ của bạn trên CentOS 6 là ổn, đã ổn, nhưng nó đã thất bại như bạn mô tả trên CentOS 5.9.

$ echo 'M1uG*xgRCthKWwjIjWc*010iSthY9buc' | cracklib-check
M1uG*xgRCthKWwjIjWc*010iSthY9buc: it is too simplistic/systematic

Thông tin phiên bản:

$ rpm -qfi /usr/sbin/cracklib-check | grep -E "Version|Release"
Version     : 2.8.9                  
Release     : 3.3

Một lỗi?

Những gì bạn đã vấp vào dường như là một lỗi. Nếu bạn lấy chuỗi của mình và chạy càng nhiều chuỗi của bạn vào thì cracklib-checkbạn sẽ nhận thấy rằng khi bạn đến ký tự thứ 26 thì nó bắt đầu thất bại:

# 25    
$ cracklib-check <<<"M1uG*xgRCthKWwjIjWc*010iS"
M1uG*xgRCthKWwjIjWc*010iS: OK

# 26
$ cracklib-check <<<"M1uG*xgRCthKWwjIjWc*010iSt"
M1uG*xgRCthKWwjIjWc*010iSt: it is too simplistic/systematic

Tìm hiểu sâu hơn về điều này nếu tôi thay đổi nhân vật cuối cùng từ a tđể nói rằng vnó tiếp tục hoạt động.

$ cracklib-check <<<"M1uG*xgRCthKWwjIjWc*010iSvhY9b"
M1uG*xgRCthKWwjIjWc*010iSvhY9b: OK

Vì vậy, có vẻ như trong phiên bản cracklib-checkđang bị treo trên chuỗi con Sth.

Chắc chắn có điều gì đó kỳ lạ về các đoạn của chuỗi bạn đã cung cấp. Nếu tôi lấy phần cuối đuôi và bỏ qua phần trước tôi cũng có thể khiến phần này bị hỏng.

$ cracklib-check <<<"jIjc*010Sth"
jIjc*010Sth: it is too simplistic/systematic

Chuỗi tương tự cũng gây ra vấn đề trên Fedora 19 & CentOS 6!

CẬP NHẬT # 1

Dựa trên sự điều tra rất hay của @ waxwing , giờ đây chúng ta biết rằng heuristic được sử dụng đã tăng gấp ba nếu> 4 ký tự quá liền kề nhau. Một bản vá đã được giới thiệu đã thay đổi heuristic này để độ dài tổng thể của mật khẩu được xem xét đã được tính đến để loại bỏ các kết quả dương tính giả này.

Kết luận?

Dựa trên một số thử nghiệm hạn chế của tôi, có vẻ như có một số heuristic lạ đang chơi ở đây. Một số chuỗi có vẻ sẽ ổn là vấp ngã nó.

Nếu bạn đang cố gắng mã hóa điều này, tôi sẽ khuyên bạn nên tạo và đánh giá mật khẩu và sau đó thoát ra khỏi vòng lặp sau khi mật khẩu được tạo ra xuất hiện cracklib-check.

Hoặc ít nhất tôi khuyên bạn nên nâng cấp lên phiên bản mới hơn bao gồm các bản sửa lỗi mà @maxwing đề cập trong câu trả lời của anh ấy.

Mật khẩu thay thế Gen

pwgen

Tôi cũng sẽ thêm rằng tôi thường sử dụng pwgenđể tạo mật khẩu. Điều đó có thể hữu ích cho bạn ở đây là tốt.

$ pwgen -1cny 32
iWu0iPh8aena9raSoh{v6me)eh:eu6Ei
cộng đồng

Bạn cũng có thể sử dụng một chút ma thuật kịch bản với tr, /dev/urandomfoldđể có được một mật khẩu ngẫu nhiên chất lượng rất cao.

$ tr -dc '[:graph:]' </dev/urandom | fold -w 32 | head -n 1
;>$7\`Hl$=zn}R.b3h/uf7mY54xp}zSF

Các foldlệnh có thể kiểm soát độ dài. Để thay thế, bạn cũng có thể làm điều này:

$ echo $(tr -dc '[:graph:]' </dev/urandom | head -c 32)
/_U>s[#_eLKAl(mrE@oo%X~/pcg$6-kr

Tôi đã chạy nó trên CentOS 5.5 với cracklib-2.8.9-3.1.src.rpm. Trong cả hai trường hợp, làm thế nào một chuỗi ngẫu nhiên dài như vậy có thể quá đơn giản?
BeowulfNode42

@ BeowulfNode42 - không phải vậy. Có vẻ như bạn đã tìm thấy một lỗi, hoặc ít nhất là một hạn chế của việc thực hiện.
slm

Lạ thật. Tuy nhiên, một chuỗi như Tm7U:n=@*+4$*gf$6hOngEHJ;mnh$+R6là hoàn toàn OK trên cùng một máy.
BeowulfNode42

1
Báo giá kép không ngăn chặn sự mở rộng toàn cầu. Dấu ngoặc đơn vẫn là một ý tưởng tốt hơn, trong trường hợp chuỗi chứa ký hiệu đô la, backticks, v.v.
Dennis

2
"Một bản vá đã được giới thiệu ..." Cũng cần lưu ý rằng bản vá được đề cập không có nghĩa là bản vá gần đây (không giống như cách phát âm), nhưng đã được gửi lại vào năm 2010 :)
cú pháp
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.