Mật khẩu mạnh nhất


11

Tôi có một ứng dụng được bảo vệ bởi mã PIN gồm bốn chữ số và người dùng có năm lần đăng nhập trước khi tài khoản bị khóa.

Bây giờ, một trong những khách hàng của tôi muốn "tăng cường" bảo mật và ủng hộ cho một giải pháp khác:

  • sáu chữ số-PIN
  • KHÔNG "cùng một chữ số cạnh nhau": vd: 11 3945 hoặc 39 55 94
  • KHÔNG "số chạy ba": ví dụ: 123 654 hoặc 53 789 3

Bây giờ đến câu hỏi: Giải pháp nào là mạnh nhất?

Tôi có thể tính toán bốn chữ số khá dễ dàng, nhưng làm thế nào để tôi tính được một chữ số khác?

Cảm ơn!

Cập nhật

Bạn nhận được những gì bạn yêu cầu - đặc biệt là khi làm việc với toán học :)

Vì vậy, những gì tôi đã yêu cầu là số lượng kết hợp cho cả hai chuỗi số.

Đọc qua các câu trả lời và nhận xét, tôi thấy rõ rằng điều đó thực sự không quan trọng. Nếu bạn có 5 lần đoán thì không vấn đề gì nếu bạn có 10.000 hoặc ~ 800.000 để lựa chọn. Quan trọng hơn là loại trừ 1234 và ngày sinh. Trong tình huống của tôi, tôi thực sự có ngày sinh của người dùng vì vậy tôi có một cái gì đó để kiểm tra.

Cảm ơn cho một cuộc thảo luận tuyệt vời!


4
Nhìn từ góc độ lịch sử, bạn nên làm quen với việc phân tích mật mã của máy Enigma. Cụ thể, thuật toán Enigma không bao giờ mã hóa một chữ cái cho chính nó. Điều này được cho là làm cho nó an toàn hơn bởi các kỹ sư của nó, nhưng nó có tác dụng làm cho máy trở nên kém an toàn hơn đáng kể. Đây là một trong nhiều bước cho phép các cường quốc Đồng minh phá vỡ Bí tích. Tôi không phải là một chuyên gia về tiền điện tử, nhưng khái niệm chung là bạn muốn không gian khóa của mình càng lớn càng tốt.
Sycorax nói phục hồi Monica

2
Tôi nghĩ rằng điều này thuộc về Mật mã học , không phải ở đây.
gung - Phục hồi Monica

2
Casper, xin làm rõ - bạn chủ yếu quan tâm đến vấn đề bảo mật (ví dụ: có những cân nhắc liên quan đến nhiều hơn chỉ là xác suất), trong trường hợp đó có thể phù hợp hơn ở nơi khác - hoặc bạn đang hỏi một câu hỏi xác suất chủ yếu (mà bạn đang hỏi phù hợp ở đây)?
Glen_b -Reinstate Monica

3
Về mặt lý thuyết --- nếu bạn chỉ tập trung vào các cuộc tấn công vũ phu --- nhiều khả năng hơn có nghĩa là bảo mật nhiều hơn, do đó, các hạn chế như không có chữ số hoặc không chạy 3 sẽ giảm số lượng khả năng do đó chúng yếu hơn rất nhiều. Tuy nhiên, thực tế (khi user777 chạm vào) mọi người không chọn ghim ngẫu nhiên. Nếu người dùng lười hơn họ hoang tưởng, nhiều người trong số họ có thể chọn các chân như "000000" hoặc "123456", điều này sẽ khiến mọi thứ trở nên kém an toàn hơn.
Gregor Thomas

2
Tôi đang bỏ phiếu để (tạm thời) đóng câu hỏi này vì không rõ ràng, với lý do ý định của OP chưa rõ ràng. Tôi thực sự muốn thấy câu hỏi của @ Glen_b được trả lời, vì vậy chúng tôi biết liệu câu hỏi này có nên được coi là câu hỏi kết hợp / câu hỏi xác suất hay là một câu hỏi nào đó được di chuyển tốt hơn.
Cá bạc

Câu trả lời:


8

Bạn đã hỏi một diễn đàn thống kê để được giúp đỡ về câu hỏi này, vì vậy tôi sẽ cung cấp câu trả lời dựa trên thống kê. Do đó, thật hợp lý khi cho rằng bạn quan tâm đến xác suất đoán mã PIN một cách ngẫu nhiên (đối với một số định nghĩa ngẫu nhiên), nhưng điều đó đọc nhiều vào câu hỏi hơn là được cung cấp.

Cách tiếp cận của tôi sẽ là liệt kê tất cả các tùy chọn có thể mà không hạn chế, sau đó trừ đi các tùy chọn trống. Tuy nhiên, điều này có một góc nhọn, được gọi là nguyên tắc loại trừ bao gồm, tương ứng với ý tưởng trực quan mà bạn không muốn trừ đi điều tương tự từ một bộ hai lần!

Trong mã PIN gồm sáu chữ số không có giới hạn và hệ thống số thập phân, có kết hợp có thể có, từ đến mỗi chữ số có 10 tùy chọn.106000000999999:

Hãy xem xét các chữ số "hai liền kề, giống hệt nhau" trông như thế nào: , trong đó các vị trí có nhãn giống nhau và có thể là bất kỳ chữ số thập phân nào. Bây giờ hãy xem xét có bao nhiêu cách khác mà chuỗi có thể được sắp xếp theo sáu chữ số: , , và . Vì vậy, đối với bất kỳ thứ tự cụ thể nào (một trong các tùy chọn đó), có ít nhất kết hợp, vì có chữ số mà không hạn chế. Bây giờ, có bao nhiêu sự lựa chọn của ? Chúng tôi đang làm việc với các chữ số thập phân, vì vậy phải có 10. Vì vậy, cóAAXXXXAXAAXAAXXXXXAAXXXXXAAXXXXXAA104104A105lựa chọn cho một thứ tự cụ thể. Có năm thứ tự như vậy, vì vậy có sắp xếp thỏa mãn định nghĩa này. (Điều này có nghĩa là gì về mặt bảo mật có thể được đo lường bằng thước đo lý thuyết thông tin về mức độ này làm giảm mức entropy của không gian mã PIN.)5×105

Bây giờ hãy xem xét những con số liên tiếp trông như thế nào. Trong chuỗi , nếu chúng ta biết A, chúng ta cũng biết B và C *: nếu A là 5, thì B là 6 và C là 7. Vì vậy, chúng ta có thể liệt kê các tùy chọn sau:ABCXXX

  • 012XXX
  • 123XXX
  • 234XXX
  • 456XXX
  • 789XXX

và tại thời điểm này, không rõ ràng nếu có một "bao quanh." Nếu có, chúng tôi cũng bao gồm

  • 890XXX
  • 901XXX

Mỗi giải pháp có kết hợp liên quan, theo cùng một lý do như trên. Vì vậy, chỉ cần tính ra có bao nhiêu giải pháp phải có. Hãy ghi nhớ để tính thứ tự thay thế, chẳng hạn như103XABCXX.

Bây giờ chúng ta đến góc nhọn, đó là nguyên tắc loại trừ bao gồm. Chúng tôi đã tạo bộ mã PIN gồm sáu chữ số thành ba bộ:

A. Mã PIN cho phép B. Mã PIN trống do "chữ số liền kề" C. Mã PIN trống do "chữ số liên tiếp"

Nhưng có một sự tinh tế bổ sung, mà là có một số con số 6 chữ số mà có thể được phân bổ cho cả và . Vì vậy, nếu chúng ta tính toán chúng ta sẽ trừ đi những con số đó hai lần và câu trả lời của chúng ta không chính xác. Việc tính toán chính xác là nơi là tập hợp các yếu tố trong cả và . Vì vậy, chúng ta phải xác định bao nhiêu cách có thể một số sụt giảm cả và .C | S | = | Một | - | B | - | C | , | S | = | Một | - | B | - | C | + | B C | , B C B C B CBC|S|=|A||B||C|,|S|=|A||B||C|+|BC|,BCBCBC

Có một số cách điều này có thể xảy ra:

  • AABCXX
  • ABCXDD và như vậy. Vì vậy, bạn phải tìm ra một cách tiếp cận có hệ thống cho vấn đề này, cũng như một cách để theo dõi các thứ tự thay thế. Sử dụng cùng một logic mà tôi đã áp dụng ở trên, điều này sẽ rất dễ hiểu, nếu hơi tẻ nhạt. Chỉ cần ghi nhớ có bao nhiêu cách thay thế có thể có để đáp ứng cả B và C.

Các cách tiếp cận nâng cao hơn một chút sẽ tận dụng các kết quả kết hợp cơ bản và định lý cơ bản về đếm, nhưng tôi đã chọn con đường này vì nó đặt gánh nặng kỹ thuật nhỏ nhất lên người đọc.

Bây giờ, để đây là một câu hỏi xác suất được hình thành tốt, chúng ta phải có một số biện pháp xác suất cho mỗi sắp xếp. Trong giả định về một cuộc tấn công ngây thơ, người ta có thể cho rằng tất cả các kết hợp chữ số có xác suất bằng nhau. Trong trường hợp này, xác suất của sự kết hợp được chọn ngẫu nhiên là Nếu đó là loại tấn công mà bạn quan tâm nhất để ngăn chặn, thì bộ tiêu chí được đề xuất rõ ràng làm suy yếu hệ thống, bởi vì một số kết hợp đã bị cấm, vì vậy chỉ có kẻ tấn công ngu ngốc mới thử chúng. Tôi để phần còn lại của bài tập cho người đọc.1|S|

Sự nhăn nheo của "năm cho đến khi khóa" được coi là sự bảo vệ tốt hơn chống lại truy cập trái phép, vì trong sơ đồ 4 chữ số hoặc 6 chữ số, có một số lượng lớn các tùy chọn và thậm chí năm lần đoán ngẫu nhiên khác nhau có mức thấp xác suất thành công. Đối với một câu hỏi xác suất được đặt ra, có thể tính toán xác suất của một cuộc tấn công như vậy thành công.

Nhưng các yếu tố khác ngoài xác suất của chuỗi số có thể ảnh hưởng đến tính bảo mật của cơ chế mã PIN. Chủ yếu, mọi người có xu hướng không chọn mã PIN một cách ngẫu nhiên! Ví dụ: một số người sử dụng ngày sinh của họ hoặc DOB của trẻ em hoặc một số số liên quan đến cá nhân tương tự làm mã PIN. Nếu kẻ tấn công biết DOB của người dùng, thì đó có lẽ sẽ là một trong những điều đầu tiên họ thử. Vì vậy, đối với một người dùng cụ thể, một số kết hợp có thể có nhiều khả năng hơn những người khác.

* Trình tự bạn liệt kê đang tăng nghiêm ngặt và không rõ liệu cả tăng và giảm khi bạn nói "số ba chạy".


1

Có được một công thức khép kín có vẻ phức tạp. Tuy nhiên, nó khá dễ dàng để liệt kê chúng. Có 568 916các mã có thể cho giải pháp thứ hai. Số lượng lớn hơn số lượng giải pháp với mã PIN gồm bốn chữ số. Mã để liệt kê chúng là dưới đây. Mặc dù không được tối ưu hóa, nhưng chỉ mất vài giây để chạy.

Ghi chú. Tôi giả định rằng trình tự phải theo thứ tự tăng dần (có thể dễ dàng sửa đổi trong three_running)

N = 999999

candidates = range(N)

def same_consecutive_digits(x):
    x_string = str(x).zfill(6)
    for i in range(1,len(x_string)):
        if x_string[i] == x_string[i-1]:
            return True
    return False

def three_running(x):
    x_string = str(x).zfill(6)
    for i in range(2,len(x_string)):
        if int(x_string[i]) == int(x_string[i-1]) + 1 and int(x_string[i-1]) == int(x_string[i-2]) + 1:
            return True
    return False

def valid(x):
    return not same_consecutive_digits(x) and not three_running(x)

assert(same_consecutive_digits(88555))
assert(same_consecutive_digits(123))
assert(not same_consecutive_digits(852123))
assert(three_running(123456))
assert(not three_running(4587))
assert(valid(134679))
assert(not valid(123894))
assert(not valid(111111))
assert(not valid(151178))
assert(valid("031278"))

accepted = [i for i in range(N) if valid(i)]
print(len(accepted))

Ẩn trong mã, nhưng không phải trong mô tả của bạn, là giả định rằng mã PIN sẽ không bao giờ bắt đầu bằng chữ số "0". Điều đó thường không đúng với mã PIN hoặc mật khẩu. Câu trả lời đúng, cho phép các số không như vậy, là 568.916. Tuy nhiên, hãy nhớ rằng câu trả lời có liên quan sẽ xem xét rằng các cuộc tấn công vào mã PIN trong vấn đề bị ràng buộc này có thể được thực hiện hiệu quả hơn nhiều bằng cách khai thác các ràng buộc, ngụ ý rằng việc liệt kê các khả năng này không thể hiện đầy đủ "sức mạnh" của hệ thống, như đã chỉ ra trong các ý kiến ​​cho câu hỏi.
whuber
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.