2010-07-07 31 views
14

Đây là một câu hỏi hai phần:Trợ giúp với việc tính toán (và tính hữu dụng) của mật khẩu entropy

Phần 1

Thứ nhất, đối phó với tính entropy của một mật khẩu trong PHP. Tôi đã không thể tìm thấy bất kỳ ví dụ mã nào có âm thanh thực nghiệm và thực sự muốn một số trợ giúp trong việc tìm ra cách 'đúng' để tính số cuối cùng. Rất nhiều người trên mạng có thuật toán trọng số tự nướng của riêng họ, nhưng tôi thực sự đang tìm kiếm câu trả lời khoa học cho phương trình.

Tôi sẽ sử dụng entropy mật khẩu như một phần của hệ thống bảo mật lớn hơn và là cách phân tích bảo mật dữ liệu chung dựa trên thông tin có thể truy cập được nếu mật khẩu của người dùng bị xâm nhập và mật khẩu có thể bị hỏng lực lượng.

Phần 2

Phần thứ hai của câu hỏi này là: làm thế nào hữu ích sẽ con số này thực sự là gì? Mục tiêu cuối cùng của tôi là tạo ra một 'điểm số' cho mỗi mật khẩu trong hệ thống mà chúng ta có thể sử dụng để giám sát an ninh hệ thống tổng thể của chúng tôi như một thực thể năng động. Tôi có lẽ sẽ phải làm việc trong một thuật toán hoặc hai cho các cuộc tấn công từ điển, mật khẩu thay thế l33t, vv - nhưng tôi cảm thấy rằng entropy sẽ đóng một vai trò quan trọng trong một đánh giá hệ thống tổng thể. Tôi hoan nghênh các đề xuất cho các cách tiếp cận khác mặc dù.

Những gì tôi biết

Tôi đã thấy một số đề cập đến các phương trình logarit để tính toán nói entropy, nhưng tôi chưa thấy một ví dụ điển hình đó là không thực sự được viết như một phương trình toán học. Tôi thực sự có thể sử dụng một ví dụ mã (ngay cả khi không nghiêm chỉnh trong PHP) để giúp tôi đi.

mở rộng

Khi đưa ra một lời nhận xét tôi nhận ra rằng tôi có thể giải thích rõ hơn về tính hữu dụng của tính toán này. Khi tôi làm việc trên các hệ thống kế thừa mà người dùng có mật khẩu cực kỳ yếu, tôi phải có một số bằng chứng cụ thể về điểm yếu đó trước khi tôi có thể tạo ra một trường hợp buộc tất cả người dùng phải thay đổi mật khẩu của họ thành một mật khẩu mạnh (mới được thi hành). Bằng cách lưu trữ điểm số sức mạnh mật khẩu cho mỗi tài khoản người dùng trong hệ thống, tôi có thể xây dựng một số chỉ số khác nhau để hiển thị điểm yếu của toàn hệ thống và tạo một trường hợp cho mật khẩu mạnh hơn.

TIA

+0

Tôi không thể giúp với entropy, nhưng tôi đã sử dụng [cracklib2] (http://www.fifi.org/doc/cracklib2/) với thành công trước đây. Có một gói Pear gọi là [crack] (http://pecl.php.net/package/crack) để sử dụng với PHP. – Mike

+0

Có gì với downvote? Nếu bạn định đánh dấu nó, hãy cho tôi biết lý do tại sao tôi có thể điều chỉnh câu hỏi hoặc claify. – Shane

+2

+1 để chống lại một downvote chỉ vì nó là một câu hỏi gọn gàng. –

Trả lời

11

Entropy của một chuỗi có một định nghĩa chính thức quy định ở đây: http://en.wikipedia.org/wiki/Entropy_(information_theory)

Làm thế nào hữu ích mà giá trị sẽ là? Nó phụ thuộc. Dưới đây là một phương pháp (trong Java) để tính toán entropy tôi làm cho một bài tập:

public static double entropy() { 
    double h = 0, p; 
    for (int i = 0; i < count.size(); i++){ 
     p = count.get(i)/(totalChars*1.0); 
     h -= p*Math.log(p)/Math.log(2); 
    } 
    return h; 
} 

count là một bản đồ nơi (key, value) tương ứng với (char, countForChar). Điều này rõ ràng có nghĩa là bạn phải xử lý chuỗi trước khi bạn gọi phương thức này.

EDIT 2: Đây là phương pháp tương tự, viết lại trong PHP

function entropy($string) { 
    $h=0; 
    $size = strlen($string); 
    foreach (count_chars($string, 1) as $v) { 
     $p = $v/$size; 
     $h -= $p*log($p)/log(2); 
    } 
    return $h; 
} 

EDIT 3: Có rất nhiều hơn để sức mạnh mật khẩu hơn entropy. Entropy là về sự không chắc chắn; mà không nhất thiết phải dịch để bảo mật hơn.Ví dụ:

Entropy của "[email protected]!0aj" là 2,5, trong khi entropy của "password" là 2,75

+0

Cảm ơn bạn đã trả lời, nhưng tôi biết về định nghĩa của entropy, tôi quan tâm nhiều hơn đến ứng dụng của nó với bảo mật mật khẩu và cách thực hiện điều đó trong PHP. Ví dụ, tôi có lẽ không muốn chạy một thuật toán entropy nhiệt động lực chống lại mật khẩu. LOL – Shane

+1

@Shane - Tôi biết. Xem chỉnh sửa của tôi. – quantumSoup

+0

cảm ơn vì đã cập nhật - điều này sẽ giúp ích rất nhiều cho tôi. Trên lưu ý của bạn về an ninh, bạn hoàn toàn chính xác đó là lý do tại sao tôi đã đề cập bằng cách sử dụng này như là một phần của một hệ thống lớn hơn và cũng làm kiểm tra từ điển và như vậy. Đối với phần này của nó mặc dù tôi tin rằng nó có thể làm việc. – Shane

2

Buộc một mức độ nhất định của entropy là một yêu cầu của CWE-521.

(1) Độ dài tối thiểu và tối đa;
(2) Yêu cầu các bộ ký tự hỗn hợp (alpha, số, đặc biệt, trường hợp hỗn hợp);
(3) Không chứa tên người dùng;
(4) Hết hạn;
(5) Không sử dụng lại mật khẩu.

+0

@Rook - Tôi thực sự hy vọng bạn sẽ xoay vòng - bạn là một người bình luận lớn về một câu hỏi khác mà tôi có về việc lưu trữ mật khẩu văn bản (http://stackoverflow.com/questions/2283937/how-should-i-ethically -approach-user-password-storage-for-later-plaintext-retriev) và tôi đã tìm ra điều này sẽ đúng ở hẻm của bạn. Bạn có thể cung cấp thêm bất kỳ đề xuất nào về số liệu mật khẩu không? Tôi đang cố gắng để cobble với nhau một cách để theo dõi tổng thể bảo mật hệ thống dựa trên mật khẩu được sử dụng trong hệ thống. Tôi đã tìm thấy entropy sẽ là một nơi tốt để bắt đầu nhưng cũng mở cho các số liệu được đề xuất khác. – Shane

+0

@Shane Trước tiên, tất cả các quy tắc này sẽ khiến mọi người thất vọng, nhưng họ sẽ an toàn hơn. Quy tắC# 2 trong CWE-521 được thực thi tốt nhất bằng cách sử dụng regex và điều này sẽ ngăn các mật khẩu được sử dụng phổ biến nhất, cũng như tất cả các từ trong từ điển và ở đó là quy tắc tốt nhất có thể được thực thi. Tôi không thấy cách thực thi kích thước tối đa sẽ giúp, nhưng giá trị tối đa có thể là kích thước vài kb (tại sao không?). Thành thật mà nói câu hỏi của bạn là một chút lạ, entropy là về tiềm năng và bằng cách thực thi một bộ ký tự kết hợp bạn đang tăng tiềm năng đó. – rook

+0

@Shane Trên một lưu ý phụ CWE-257 là cực kỳ quan trọng và tôi không có ý tưởng tại sao bạn đang bỏ qua nó. Nếu ai đó không biết mật khẩu của họ thì không có điểm nào để nói với họ.Nếu bạn cần cập nhật thông báo được sử dụng, bạn có thể làm như vậy trong lần đăng nhập tiếp theo. Có ** hoàn toàn không có gì ** để đạt được từ quan điểm của người dùng và nó làm cho bạn một mục tiêu ngon ngọt từ quan điểm của kẻ tấn công. – rook

0

Để sử dụng entropy, bạn không cần phải lấy Entropy Shannon của một mật khẩu duy nhất, mà còn là một phần tử trong danh sách mật khẩu phổ biến. Nếu mật khẩu giống như các mật khẩu khác thì entropy của nó sẽ thấp so với các mật khẩu khác. Nếu nó rất độc đáo thì nó sẽ cao hơn.

Các vấn đề liên quan