Bảo mật chế độ truy cập AES so với chế độ CBC

Evgeni Vaknin 05/09/2017. 1 answers, 401 views
aes cbc ctr nonce

Đối với AES-CBC là CPA đảm bảo IV được sử dụng phải được chọn ngẫu nhiên cho mỗi gói. Nếu IV có thể dự đoán được hơn mã hóa không phải là CPA an toàn. Điều này có đúng với chế độ AES-CTR không? có nghĩa là, đối với chế độ AES-CTR, bộ đếm đầu tiên phải là ngẫu nhiên hoặc nó có thể là một nonce? Cảm ơn

1 Answers


Patrick K 31/07/2017.

Yêu cầu đối với các khối đầu vào AES-CTR là, chúng phải là unique trong suốt vòng đời của khóa. Trong hầu hết các trường hợp, một nonbit 96bit ngẫu nhiên được sử dụng với bộ đếm 32 bit bắt đầu từ 0. Nếu cùng một khối đầu vào cho AES-CTR xảy ra hai lần, AES-CTR không phải là CPA an toàn nữa. Trong trường hợp này, điều này có thể là do tràn bộ đếm ngược sau $ 2 ^ {32} $ khối hoặc do va chạm ngẫu nhiên 96bit nonces (sinh nghịch lý: 50% cơ hội sau $ \ sqrt {2 ^ {96}} $ messages. Xem xét trường hợp sau:

Hai thông điệp 1-block riêng biệt $ P $ và $ P '$ được gửi dưới cùng một khóa $ K $ (có thể được thương lượng trước đó) và với cùng một nonce $ N $. Kẻ tấn công biết rằng các văn bản mật mã có liên quan $ C $ và $ C '$ trong đó tính bằng XORing chúng với keystream (dựa trên nonce và bộ đếm):

$ C = P \ oplus E_K (N, 0) $

$ C '= P' \ oplus E_K (N, 0) $

Sau đó, kẻ tấn công có thể chỉ đơn giản là xor các văn bản mã hóa

$ C \ oplus C '= P \ oplus E_K (N, 0) \ oplus P' \ oplus E_K (N, 0) = P \ oplus P '$

và anh ta nhận được khoảng cách '' giữa hai văn bản thuần tuý. Do dư thừa trong tiếng Anh, anh ta có thể xác định được $ P $ và $ P '$.

Vấn đề này còn được gọi là "hai lần-pad". Một khi cùng một keystream là XORed với plaintext, chúng ta gặp rắc rối. Do đó, điều quan trọng là đầu vào cho mã hóa AES là duy nhất trong suốt vòng đời của khóa. Nó không phải là không thể đoán trước, chỉ là duy nhất.

5 comments
Evgeni Vaknin 31/07/2017
bởi tuyên bố "2 ^ 32 tin nhắn" Tôi nghĩ rằng bạn có nghĩa là 2 ^ 32 khối 16 byte mỗi trong AES? nếu có, hơn 2 ^ 32 khối thời gian là 2 ^ 32 * 128 bit, tức là 10Gbps, khoảng 1 phút ... vì vậy mỗi phút 1 thuật toán trao đổi khóa phải được thực hiện để thiết lập khóa mới và nonce ?
1 Patrick K 31/07/2017
Vâng bạn đã đúng. Tôi đã chỉnh sửa câu trả lời. Nếu bạn có một nonce tĩnh, sau đó bạn sẽ cần phải làm một trao đổi quan trọng mỗi phút trong trường hợp này. Nhưng kể từ khi nonce thường được thay đổi với mỗi tin nhắn, bạn được giới hạn trong các tin nhắn có độ dài tối đa là $ 2 ^ {32} \ cdot128 $ bit. Số lượng tin nhắn tối đa có thể được gửi theo một khóa nhất định bị giới hạn bởi nghịch lý sinh nhật. Nếu số 96 bit nonce được chọn ngẫu nhiên cho mỗi thông điệp, xác suất của một xung đột nonce là $ \ khoảng 0.5q ^ 2/2 ^ {96} $ cho q tin nhắn. Nếu bạn muốn cụm từ này tối đa là 1%, $ q_ {max} = 4 \ cdot10 ^ {13} $ của bạn.
Evgeni Vaknin 31/07/2017
Điều gì sẽ xảy ra nếu tôi không sử dụng nonce ngẫu nhiên, thay vào đó tôi sử dụng một giá trị ngẫu nhiên cho giá trị ban đầu nonce và tăng nó mỗi gói? Ví dụ, cho phép nói rằng mỗi gói chứa ít hơn 256 khối AES (mỗi bit 128 bit) và bộ đếm AES-CTR bao gồm nonce 120 bit, được khởi tạo ngẫu nhiên khi khóa được trao đổi và hơn trong gói 8 bit bộ đếm được sử dụng để đếm các khối 128 bit. Và mỗi gói mới, (tiếp tục trong bình luận tiếp theo)
Evgeni Vaknin 31/07/2017
Tôi tăng nonce bằng 1, và xóa bộ đếm 8 bit. Trong trường hợp này, nghịch lý ngày sinh không liên quan, vì xung đột là không thể (giả sử tôi đang thay thế khóa trước khi bộ đếm 120 bit của nonce hết hạn)
1 Patrick K 01/08/2017
Có, nếu bạn bằng cách nào đó chắc chắn rằng bạn không bao giờ tái sử dụng cùng một cặp (input-block, key) cho thế hệ keystream, thì mọi thứ đều ổn. (Tất nhiên giả định rằng chìa khóa được giữ bí mật và được chọn thống nhất từ ​​ngẫu nhiên)

Related questions

Hot questions

Language

Popular Tags