Điểm:2

Tại sao hầu hết các nguyên mẫu mã hóa được xác thực đều mong đợi một khóa ngẫu nhiên không thể đoán trước và thống nhất để được bảo mật?

lá cờ cn

Tôi đã nhận thấy rằng các khóa dành cho nguyên mẫu mã hóa được xác thực như AES phải không thể đoán trước và ngẫu nhiên thống nhất để được an toàn. Giá trị IV và hạt giống cho PRNG cũng phải ngẫu nhiên và không thể đoán trước.

Câu hỏi của tôi là: Các giá trị ngẫu nhiên và không thể đoán trước đó khác với các giá trị có thể dự đoán chứa toàn bộ từ tiếng Anh, chẳng hạn như (như verysecretkey123456) như thế nào?

Tôi cho rằng từ góc độ của thuật toán, điều đó không thành vấn đề (miễn là độ dài khóa là chính xác), nhưng những kẻ tấn công có thể đoán các khóa/mật khẩu có thể dự đoán dễ dàng hơn vì trước tiên chúng thử các khóa/mật khẩu yếu. Tôi có đúng không?

ngẫu nhiên thống nhất chỉ có ý nghĩa khi các khóa được tạo nhiều lần? Nếu vậy thì điều gì sẽ xảy ra khi chúng ta sử dụng ngẫu nhiên không đều phím?

kelalaka avatar
lá cờ in
[Các cuộc tấn công dựa trên Entropy kém](https://security.stackexchange.com/a/239397/86735)
Điểm:4
lá cờ tr

Tôi cho rằng từ góc độ của thuật toán, điều đó không thành vấn đề (miễn là độ dài khóa là chính xác), nhưng những kẻ tấn công có thể đoán các khóa/mật khẩu có thể dự đoán dễ dàng hơn vì trước tiên chúng thử các khóa/mật khẩu yếu. Tôi có đúng không?

Thật vậy, tính bảo mật của một sơ đồ như vậy đến từ tính bí mật của khóa. Do đó, dễ dự đoán có nghĩa là chương trình không thể an toàn.

Câu hỏi của tôi là: Các giá trị ngẫu nhiên và không thể đoán trước đó khác với các giá trị có thể dự đoán chứa toàn bộ từ tiếng Anh, chẳng hạn như (như verysecretkey123456) như thế nào?

Không khó để trả lời trực tiếp câu hỏi này (tôi sẽ thảo luận về lưu ý ở phần cuối). Để hiểu rõ hơn về điều này, bạn nên xem xét kỹ các yêu cầu thực tế đối với một khóa. Khi chúng ta nói về một khóa "ngẫu nhiên", chúng ta không nói về việc khóa đó "trông như thế nào", mà đúng hơn, chúng ta đang nói về một thuộc tính của tiến trình tạo khóa này. Nếu bản thân quá trình xử lý là tốt (sẽ được xác định sau), chẳng hạn như sử dụng CSPRNG, thì khóa đó không thành vấn đề b"TÀU TÀU VÀNG" hoặc b"\x84\x1cR\xc5X\x07\xd0\x07\xd9R'\xd1\xa2\xad\xbef" hoặc b"verysecretkey123456". Lý do là trong kịch bản lý tưởng, cả hai đều có khả năng được tạo ra bởi quá trình tạo khóa. Nói cách khác, tôi không thể chỉ nhìn vào giá trị b"verysecretkey123456" rằng nó không phải là khóa an toàn hay không; Tôi sẽ phải xem nó được tạo ra như thế nào.

báo trước: Bây giờ, chúng ta sống trên trái đất và chúng ta có thể đưa ra một số giả định... Nhìn thấy một chiếc chìa khóa trông giống như b"verysecretkey123456", thật hợp lý khi cho rằng quy trình này không phải là một CSPRNG thích hợp, nhưng có lẽ ai đó đã sao chép từ Stackoverflow...

Và ngẫu nhiên thống nhất chỉ có ý nghĩa khi các khóa được tạo nhiều lần? Nếu vậy, điều gì sẽ xảy ra khi chúng ta sử dụng các khóa ngẫu nhiên không đồng nhất?

Không có giới hạn chung về số lần bạn có thể tạo ra một giá trị từ một quy trình như vậy (trừ khi có quy định khác và tùy thuộc vào ngữ cảnh). Chẳng hạn, bạn có thể chạy đoạn mã sau mà không gặp sự cố trong Python. Lưu ý rằng chúng tôi không đảm bảo hệ điều hành mô-đun.

nhập hệ điều hành

keys = [os.urandom(16) for _ in range(100)]
Eugene avatar
lá cờ cn
Cảm ơn bạn đã trả lời. Tôi sẽ chấp nhận cả hai câu trả lời nếu tôi có thể)
Điểm:1
lá cờ in

TL;DR Bởi vì đó là cách chúng được thiết kế. Bạn có thể sử dụng KDF để lấy các khóa chứa tối đa tính ngẫu nhiên có trong tài liệu khóa đầu vào.

Tôi đã nhận thấy rằng các khóa dành cho nguyên mẫu mã hóa được xác thực như AES phải không thể đoán trước và ngẫu nhiên thống nhất để được bảo mật.

Chà, họ cần phải có 128 bit để có bảo mật ~ 128 bit như lời hứa của AES. Về nguyên tắc, bạn cũng có thể tạo, giả sử, 112 bit của khóa ngẫu nhiên, sau đó sử dụng 16 bit có giá trị bằng 0 để tạo khóa 128 bit. Hầu hết các API chỉ chấp nhận byte - tức là bội số của 8 bit, do đó, đó sẽ là 14 byte ngẫu nhiên và 2 byte bằng 0 cho khóa 16 byte. AES, về nguyên tắc, không yêu cầu các khóa được phân phối tốt.

Tôi đã xóa phần này của câu trả lời nó đã được chỉ ra trong cuộc trò chuyện kênh bên rằng đây không phải là trường hợp. Điều đó nói rằng, các cuộc tấn công khóa có liên quan đã biết vào lịch trình khóa sẽ không trực tiếp hoạt động vì chúng cho rằng cuộc tấn công cụ thể yêu cầu một sự thay đổi cụ thể trong các khóa được cung cấp. Tuy nhiên, nếu không phân tích sâu hơn, chúng tôi không thể nói rằng kết quả là an toàn; thêm thông tin có thể được tìm thấy đây.

Giá trị IV và hạt giống cho PRNG cũng phải ngẫu nhiên và không thể đoán trước.

Không cần thiết. Yêu cầu IV là khác nhau đối với từng chế độ hoạt động. Chẳng hạn, CBC yêu cầu IV không thể đoán trước (thường chuyển thành ngẫu nhiên IV). CFB yêu cầu một nonce có cùng kích thước với kích thước khối. Chế độ CTR có thể sử dụng bất kỳ nonce có kích thước nào, miễn là khối bộ đếm không lặp lại. Chế độ GCM thường sử dụng nonce 12 byte. Nonce - số được sử dụng một lần - có thể được chọn ngẫu nhiên, nhưng chúng cũng có thể là số sê-ri chẳng hạn.

Câu hỏi của tôi là: Các giá trị ngẫu nhiên và không thể đoán trước đó khác với các giá trị có thể dự đoán chứa toàn bộ từ tiếng Anh, chẳng hạn như (như verysecretkey123456) như thế nào?

Chúng thường được tạo bởi một trình tạo số ngẫu nhiên an toàn được gieo hạt tốt (CSPRNG hoặc DRBG). Hoặc chúng có nguồn gốc từ thông tin khác. Chẳng hạn, chúng có thể được tạo bằng cách sử dụng thỏa thuận khóa, thường được theo sau bởi hàm dẫn xuất khóa dựa trên khóa (KBKDF).

Các khóa thực sự cũng có thể được tạo từ mật khẩu bằng PBKDF.Các chức năng đó cũng yêu cầu muối và hệ số công việc (và có thể là các tham số khác) để giảm thiểu nguy cơ kẻ tấn công đoán được mật khẩu. Trừ khi có các biện pháp đối phó khác, kế hoạch vẫn có thể không an toàn vì mật khẩu thường dễ đoán.

"verysecretkey123456" thường không được coi là khóa, nó sẽ được coi là mật khẩu hoặc cụm mật khẩu. Việc nó là một chuỗi chứ không phải nhị phân là đủ gợi ý cho điều đó.

Tôi cho rằng từ quan điểm của thuật toán, điều đó không thành vấn đề (miễn là độ dài khóa là chính xác),

Đúng, mặc dù AES yêu cầu một chuỗi bit làm khóa, vì vậy, để sử dụng nó, trước tiên bạn phải mã hóa mật khẩu hoặc cụm mật khẩu. Lưu ý rằng ví dụ: Các khóa DES có các bit chẵn lẻ trong khóa được mã hóa, vì vậy không phải tất cả các khóa chỉ nhận các bit ngẫu nhiên. Mặc dù vậy, các mật mã hiện đại hơn DES - bao gồm cả AES - thường được thiết kế để lấy các khóa hoàn toàn ngẫu nhiên.

nhưng những kẻ tấn công có thể đoán các khóa/mật khẩu có thể dự đoán dễ dàng hơn vì chúng thử các khóa/mật khẩu yếu trước. Tôi có đúng không?

Vâng, đó thường được gọi là tấn công từ điển khi họ thử những từ cụ thể. Tất nhiên, họ có thể kiểm tra các khóa rất nhỏ một cách riêng biệt và các cuộc tấn công từ điển có thể được tăng cường bằng các thủ thuật khác.

Và ngẫu nhiên thống nhất chỉ có ý nghĩa khi các khóa được tạo nhiều lần? Nếu vậy, điều gì sẽ xảy ra khi chúng ta sử dụng các khóa ngẫu nhiên không đồng nhất?

Không, như đã đề cập trong câu trả lời khác các cuộc nói chuyện ngẫu nhiên thống nhất về quá trình tạo, không phải kết quả như vậy. Nếu bạn có các khóa ngẫu nhiên không đồng nhất thì có khả năng kẻ thù có thể đoán được chúng - ít nhất là nhiều khả năng hơn nếu các khóa là ngẫu nhiên đồng nhất.

Theo các nguyên tắc Kerckhoff, chúng tôi thường cho rằng những kẻ tấn công biết cách tạo khóa hoặc mật khẩu, do đó, từ đó chúng có thể đoán được sự phân phối.

Đă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.