Điểm:2

Làm thế nào ít an toàn hơn là những byte ngẫu nhiên?

lá cờ kn

Trong cơ sở mã Python của chúng tôi, một số byte ngẫu nhiên đã được tạo mà chúng tôi muốn bảo mật bằng mật mã. Trước đây, mã là:

khả năng = "".join(secrets.choice(string.digits) for i in range(33))

Tôi đã đổi nó thành:

khả năng = secret.token_bytes(16)

Theo ước tính của tôi, phiên bản đầu tiên đã chọn 33 lần giữa 10 chữ số và do đó có 33*log2(10)=110 bit entropy, trong khi cái thứ hai có 128 bit entropy. Tính toán này có đúng không?

poncho avatar
lá cờ my
"Các byte ngẫu nhiên đó kém an toàn đến mức nào"; nó cũng phụ thuộc vào những gì bạn đã làm với các byte đó. Ví dụ: nếu bạn đã sử dụng chúng làm khóa AES-128, điều đó có nghĩa là rất có thể bạn chỉ sử dụng 16 byte đầu tiên của ví dụ đầu tiên, điều này tệ hơn *đáng kể* so với "bảo mật 110 bit"
Maarten Bodewes avatar
lá cờ in
Tôi đồng ý với Poncho. Tôi không thấy có gì sai với phép tính của bạn, nhưng điều đó phụ thuộc vào cách các chữ số được sử dụng (và xem xét phương pháp tạo chúng, đó có thể là cách tốt hoặc xấu). Một điều nữa là nếu đây được coi là một số mà bạn có thể kết thúc bằng một vài số 0 đứng đầu, số này có thể bị xóa trước khi giá trị được sử dụng. Nó lại phụ thuộc vào mã sau đó nếu điều đó có tác động đáng kể hay không.
Maarten Bodewes avatar
lá cờ in
Cẩn thận với kiểu gõ Vịt được sử dụng trong Python. Có một Chuỗi bao gồm các chữ số hoặc byte thì khác. Tôi không thích sử dụng chuỗi cho các giá trị nhị phân; nếu tôi thiết kế một API, tôi sẽ chỉ chấp nhận [`bytes` hoặc `bytearray`](https://www.w3resource.com/python/python-bytes.php) cho Python 3
lá cờ kn
Chúng tôi sử dụng toàn bộ để tạo một URL không thể đoán được (với base64).
Điểm:3
lá cờ us

Toán học của bạn là chính xác, về mặt lý thuyết. Thật vậy, việc sử dụng các chữ số có thể in được để lưu trữ tính ngẫu nhiên là sự đánh đổi giữa khả năng lưu trữ và khả năng đọc. Tuy nhiên, vì bạn đang nói về bảo mật mật mã nên tôi muốn đề cập đến một điều.

Khi xem xét tính ngẫu nhiên, có hai điều bạn nên ghi nhớ: tính không thể đoán trước và tính đồng nhất.

  • Không phải trường hợp của bạn nhưng, nếu bạn đang sử dụng python tích hợp sẵn như ngẫu nhiên, bạn có tính đồng nhất nhưng không phải là không thể đoán trước, bởi vì nó sử dụng PRNG. Vì vậy, nói về mật mã một cách khôn ngoan theo luật Kerchoff, bạn nhận được 0 entropy.
  • Nếu bạn đang sử dụng bí mật. Nó sử dụng (ví dụ trong Linux) /dev/urandom thường được coi là bảo mật bằng mật mã *, ngoại trừ trong một số trường hợp (ví dụ: trong khi khởi động), bạn nhận được thông báo ước lượng lượng entropy (bạn thực sự không thể đo được nó) mà bạn hy vọng nó ít hơn một chút so với lý thuyết của bạn.

* Có/đã có một cuộc tranh luận đang diễn ra về việc có nên sử dụng /dev/urandom hoặc /dev/ngẫu nhiên. bạn có thể đọc thêm đây và bạn cũng có thể kiểm tra nhận xét của SAI Peregrinus dưới đây.

Paul Uszak avatar
lá cờ cn
Rất tiếc, ý của bạn là gì _"sử dụng các chữ số có thể in được để lưu trữ tính ngẫu nhiên là sự đánh đổi giữa khả năng lưu trữ và khả năng đọc"_? Bạn có quan tâm đến dung lượng lưu trữ?
SAI Peregrinus avatar
lá cờ si
"Cuộc tranh luận đang diễn ra" đó đã không còn là một cuộc tranh luận trong một thời gian. Các nhân Linux hiện tại *không* khác biệt về hành vi giữa /dev/random và /dev/urandom. Chúng chặn khi khởi động cho đến khi nhóm được gieo, sau đó không chặn sau đó.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.