Điểm:3

Sử dụng đúng AES CTR

lá cờ cn

Tôi đã đọc rằng AES CTR chỉ an toàn nếu được sử dụng đúng cách. Vì vậy, tôi muốn chắc chắn rằng tôi sử dụng nó đúng cách.

  1. Vectơ ban đầu (IV) chỉ có thể được sử dụng một lần, nó không nhất thiết phải là ngẫu nhiên. Có an toàn không khi sử dụng bộ đếm cho một phần của IV, phần còn lại chỉ là một số văn bản const. Bộ đếm được truyền tới mọi người ở dạng văn bản rõ ràng, trong khi phần nhạy cảm của tin nhắn được mã hóa. Có phải vấn đề là IV tiếp theo có thể dự đoán được không?
  2. Tôi hiểu rằng IV không bao giờ có thể lặp lại, nhưng chỉ trong trường hợp cần bao nhiêu lần lặp lại điều kiện này để bẻ khóa hệ thống. Ý tôi là hai lần lặp lại cùng một bộ đếm hay 100?
  3. Cuối cùng nhưng không kém phần quan trọng, việc sử dụng AES-256 thay vì AES-128 để mã hóa tin nhắn 16 byte có tăng tính bảo mật không?
Điểm:2
lá cờ in

Ở đây chúng tôi đã thực hiện một sự khác biệt. $nonce \mathbin\|đối tác$ cấu thành $IV$

  • Có phải vấn đề là IV tiếp theo có thể dự đoán được không?

Không, đó không phải là vấn đề trong chế độ CTR, hãy đọc thêm trong [1]. Các $IV= (nonce\mathbin\|đối tác)$ được mã hóa và bản mã được x-ored với bản rõ.

$$C_i = \operatorname{AES-CTR}(nonce\mathbin\|encode(i)) \oplus P_i$$

Miễn là $(IV,khóa)$ cặp không bao giờ lặp lại không có vấn đề gì cho 16- của bạnbyte giả định rằng bạn luôn bắt đầu từ 0 trong bộ đếm cho mọi mã hóa bằng khóa mới hoặc khóa mới.

Nếu có lặp lại thì tính bí mật sẽ bị mất.

Tôi hiểu rằng IV không bao giờ có thể lặp lại, nhưng chỉ trong trường hợp cần bao nhiêu lần lặp lại điều kiện này để bẻ khóa hệ thống. Ý tôi là hai lần lặp lại cùng một bộ đếm hay 100?

Hai cặp là đủ để phá vỡ sự bí mật với các kỹ thuật kéo cũi. Nó bây giờ là tự động [2]. Nếu bạn biết một trong số chúng thì việc tìm cái còn lại bằng x-or là chuyện nhỏ.

Cuối cùng nhưng không kém phần quan trọng, việc sử dụng AES256 thay vì AES128 để mã hóa tin nhắn 16 byte có tăng tính bảo mật không?

Chế độ CTR là CPA an toàn miễn là nó được sử dụng đúng cách. AES-128 an toàn (hầu hết)[3] tuy nhiên, sử dụng AES-256, nó sẽ an toàn ngay cả với các đối thủ lượng tử được cung cấp cùng với Máy của Grover.


Lưu ý rằng với chế độ CTR, bạn chỉ có thể nhận được bảo mật CPA, tức là không có tính toàn vẹn và xác thực. Để đạt được tính toàn vẹn và xác thực, người ta có thể sử dụng AES-GCM (với SIV). Chế độ SIV sử dụng thông báo để tránh sự cố IV.Khi IV lặp lại, nó chỉ rò rỉ bình đẳng của các tin nhắn chứ không phải nội dung.

Sử dụng đúng AES CTR

Nghĩa vụ của bạn: như hợp đồng bảo mật

  • Chọn khóa ngẫu nhiên thống nhất $k$ cỡ 256 và luôn giữ bí mật.

  • Chọn IV và đảm bảo rằng $(k,IV)$ không bao giờ lặp lại ngay cả khi bộ đếm tăng lên;

    • sử dụng một bộ đếm xác định hoặc LFSR để theo dõi các $nonce$, đảm bảo rằng một khóa mới sẽ được trao đổi nếu có lỗi/hệ thống tạm dừng, họ có thể không ghi được lần sử dụng cuối cùng $nonce$.

    • Hoặc, sử dụng ngẫu nhiên $nonce$, đảm bảo rằng bạn đang ở mức thấp trong vụ va chạm của $nonce$ dưới cùng một khóa.

    • Luôn khởi động bộ đếm từ $0$. Nếu bộ đếm không bắt đầu từ $0$ có một con đường nguy hiểm có thể khiến IV lặp lại nếu nonce giống nhau.

  • Mã hóa tin nhắn và đảm bảo rằng nó không dài hơn $2^{32}$.

    • Đảm bảo không có điểm phân biệt và
    • Đảm bảo rằng bộ đếm không bao giờ vượt qua tất cả 1 trạng thái, tức là không bao giờ vượt quá giá trị tối đa của bộ đếm.
  • Lưu trữ nó.

Những gì bạn nhận được

  • Bảo mật Ind-CPA và không có gì hơn thế nữa!

Thay vào đó, người ta có thể sử dụng XChaCha20-Poly1305 với các nonce 192-bit mà $(IV,khóa)$ xảy ra là không đáng kể. Bạn cũng sẽ nhận được xác thực và tính toàn vẹn. Và vì chế độ CTR được thiết kế cho PRF, nên sử dụng XChaCha20 với chế độ CTR tốt hơn ( XChaCha20 sử dụng CTR nội bộ).


Gilles 'SO- stop being evil' avatar
lá cờ cn
Không! Đối với CTR, nó không đủ để IV không lặp lại. **giá trị bộ đếm** không được lặp lại.
kelalaka avatar
lá cờ in
@Gilles'SO-stop beingevil' đừng là biệt danh của bạn nữa. Thứ nhất, chúng ta đang nói về 16 byte, thứ hai tôi nói "Đảm bảo rằng bộ đếm không bao giờ vượt qua tất cả 1 trạng thái." Trường hợp được cho là tiếp tục một giá trị truy cập?
Maarten Bodewes avatar
lá cờ in
Tôi có thể thấy cách sử dụng thuật ngữ IV được sử dụng cho Nonce + bộ đếm, vì IV chỉ được sử dụng làm giá trị ban đầu - xét cho cùng thì đó là vectơ khởi tạo. Theo định nghĩa, 16 byte tốt hơn nên được đặt tên là *khối bộ đếm*, bao gồm nonce + bộ đếm.@Gilles'SO-stop beingevil' Nếu bạn tuân thủ các định nghĩa của NIST, thì chỉ lặp lại bộ đếm cũng không đủ, vì đó chỉ là một phần của khối đầu vào/bộ đếm, vì vậy vâng, thuật ngữ.
Gilles 'SO- stop being evil' avatar
lá cờ cn
@MaartenBodewes Nếu bạn chia khối bộ đếm thành một nonce trên mỗi thông báo và một giá trị bộ đếm trên mỗi khối, thì yêu cầu trở thành nonce trên mỗi thông báo không lặp lại và giá trị bộ đếm trên mỗi khối không bị tràn. Không phải tất cả các bản trình bày của chế độ CTR đều làm được điều đó. Câu trả lời này định nghĩa rõ ràng âIVâ là khối ban đầu đầy đủ bao gồm nonce được nối với bộ đếm và _that_ là duy nhất là chưa đủ: phần nonce phải là duy nhất. Lặp lại nonce với các giá trị bộ đếm ban đầu khác nhau là không đủ.
kelalaka avatar
lá cờ in
@Gilles'SO-stop beingevil' vấn đề là tôi nhận thức rõ vấn đề đó và đối với 16 byte thì đó không phải là vấn đề. Tôi chưa bao giờ nói tiếp tục một giá trị bộ đếm hoặc sử dụng một giá trị bộ đếm khác. Bộ đếm bắt đầu từ 0, tiếp tục đến một bộ đếm là một con đường nguy hiểm và không phải là một quan điểm bảo mật tốt làm tăng số lượng cạm bẫy. Bây giờ, tôi đã phân biệt giữa bộ đếm và phần đối của IV.
Gilles 'SO- stop being evil' avatar
lá cờ cn
Trong trường hợp rất cụ thể khi tất cả các tin nhắn dài (tối đa) một khối, thì có, IV và giá trị bộ đếm giống nhau. Nhưng đó là một trường hợp rất đặc biệt mà câu hỏi không bị giới hạn rõ ràng (nó chỉ xuất hiện trong một câu hỏi phụ). Câu trả lời của bạn hiện đã chính xác theo quan điểm toán học nghiêm ngặt, nhưng nó vẫn rất dễ gây hiểu lầm vì thực tế là nó đặc trưng cho trường hợp tin nhắn một khối, một tình huống rất hiếm gặp, hầu như không rõ ràng.
kelalaka avatar
lá cờ in
@Gilles'SO-stop beingevil' Tôi đã đưa ra trường hợp chung trong hợp đồng bảo mật. Tôi không thích ý tưởng về tính liên tục của bộ đếm. Chà, trong một số môi trường hạn chế, mọi người cần nó để họ trao đổi ít khóa hơn. Tuy nhiên, tôi không xem xét chúng ở đây. Bắt đầu đếm từ 0. Kiểm tra lại từ ngữ để không hiểu nhầm...
Gilles 'SO- stop being evil' avatar
lá cờ cn
Không, trong trường hợp chung, với khối truy cập được cấu trúc là nonce||đối tác (điều mà không phải tất cả các bản trình bày và triển khai CTR đều làm), nghĩa vụ là nonce không lặp lại.Và do kích thước hạn chế cho nonce, điều này thực tế đòi hỏi phải theo dõi các nonce đã sử dụng trước đó, điều này không phải lúc nào cũng thực hiện được. Đó là một cạm bẫy về CTR mà người dùng có xu hướng hiểu sai và câu trả lời của bạn đã khuyến khích họ hiểu sai.
kelalaka avatar
lá cờ in
@Gilles'SO-stop beingevil' Có thể một người có thể kết hợp ngẫu nhiên và vùng chứa để tạo thành nonce, mặc dù điều này yêu cầu tính toán và yêu cầu tuổi thọ của khóa cũng như số lượng thông báo trên mỗi khóa. Như tôi đã nói, nếu có vấn đề, hãy đổi chìa khóa mới. Lời khuyên chung của tôi là sử dụng xChaCha vì nó có phạm vi nonce tốt hơn. Như Lindell đã từng nói, khối 256 bit là cần thiết để chúng tôi có thể có giới hạn CTR và GCM tốt hơn. Tôi không nghĩ rằng tôi đang dẫn họ đến cạm bẫy, tôi đã hạn chế họ không rơi vào đó.
lá cờ au
Ngoài ra, xin lưu ý rằng CTR (theo thiết kế) sử dụng cùng một thuật toán để mã hóa và giải mã. Điều này có thể dẫn đến việc giải mã trái phép trong một số ngữ cảnh (mặc dù điều đó yêu cầu lặp lại IV).
Điểm:1
lá cờ cn

Đối với CTR, yêu cầu là giá trị truy cập không lặp lại (đối với một khóa nhất định). Vấn đề lớn nhất với chế độ truy cập là nó không đủ cho IV. (các ban đầu giá trị truy cập) không lặp lại.

Việc giá trị bộ đếm có thể dự đoán được hay không không quan trọng. Nếu bạn có thể sắp xếp để bộ đếm bắt đầu từ 0 và tăng thêm 1 cho mỗi khối tin nhắn, thì đó là một cách rất tốt để sử dụng CTR. Lưu ý rằng với nhiều thông báo, điều này có nghĩa là thông báo đầu tiên sử dụng các giá trị bộ đếm $0, 1, 2, \ldots, a$, thì thông báo thứ hai sử dụng giá trị bộ đếm $a+1, a+2, \ldots, b$, tin nhắn thứ ba sử dụng $b+1, b+2, \ldots, c$, và như thế.

Hãy để tôi minh họa những gì sai với một giá trị bộ đếm lặp lại. Để cho $E$ là chức năng mã hóa khối và viết $\langle n\rangle$ để mã hóa giá trị bộ đếm $n$ như một khối. Nếu bạn gửi hai tin nhắn hai khối $P_0||P_1$$P'_0||P'_1$ (trong đó mỗi $P^{(j)}_i$ đại diện cho một khối), một với IV $n$ và cái tiếp theo với IV $n+1$, thì các bản mã tương ứng là $C_0||C_1 = (E(\langle n\rangle) \oplus P_0) || (E(\langle n+1\rangle) \oplus P_1)$$C'_0||C'_1 = (E(\langle n+1\rangle) \oplus P'_0) || (E(\langle n+2\rangle) \oplus P_1)$. Lưu ý cách cả hai bản mã này sử dụng $E(\langle n+1\rangle)$. Kẻ thù có thể xor hai khối bản mã sử dụng cùng một giá trị bộ đếm và mặt nạ mã hóa của chúng bị hủy bỏ: $C_1 \oplus C'_0 = P_1 \oplus P'_0$. Điều này thường đủ để đoán một số hoặc tất cả các khối văn bản gốc. Ví dụ: nhiều thư chứa tiêu đề đã biết hoặc gần như đã biết và trong ví dụ lặp lại giá trị bộ đếm này, điều này sẽ tiết lộ nội dung của 16 byte sau tiêu đề trong thư đầu tiên.

Nếu bạn không thể theo dõi giá trị bộ đếm nào đã được sử dụng, một kỹ thuật phổ biến để tránh lặp lại là sử dụng ngẫu nhiên 16 byte cho IV. Điều này làm cho cơ hội sử dụng lại một giá trị truy cập đủ nhỏ để nó không xảy ra trong thực tế.

Trong hầu hết các trường hợp, bạn nên sử dụng tiêu chuẩn mã hóa xác thực (AEAD) thay vào đó, ví dụ SIV hoặc hoặc GCM-SIV hoặc GCM hoặc CCM. Điều này có hai lợi ích. Một là bản mã đã được xác thực: khi giải mã, bạn có thể xác minh rằng bản mã không bị thay đổi. (Không thể xác minh tính xác thực của bản mã nếu không có khóa bí mật. Kẻ thù vẫn có thể hoán đổi hai thông điệp xác thực, vì vậy tính xác thực không hoàn toàn bao hàm tính toàn vẹn.) Ưu điểm khác của việc sử dụng chế độ AEAD tiêu chuẩn là giá trị của bộ đếm đủ để bảo mật không lặp lại: không có điều kiện vi tế nào khác. Chế độ SIV có lợi thế là ngay cả khi IV vô tình lặp lại, điều này chỉ có thể tiết lộ rằng các tin nhắn giống hệt nhau, nó sẽ không tiết lộ bất cứ điều gì về nội dung của chúng.

Sử dụng AES-256 thay vì AES-128 chỉ cải thiện khả năng bảo mật đối với máy tính lượng tử, trong trường hợp chúng trở nên thiết thực.

kelalaka avatar
lá cờ in
Chúng ta đang nói 16 byte!
Maarten Bodewes avatar
lá cờ in
Việc ngẫu nhiên hóa hoàn toàn IV chỉ có thể làm cho bộ đếm lặp lại sớm hơn, mặc dù sự khác biệt là tương đối nhỏ - việc triển khai thường thực hiện tăng $2^{128}$ mô-đun cho toàn bộ khối, vì vậy nếu một phần bộ đếm cao và một trong những phần tiếp theo không hoạt động trình tự thấp thì bạn sẽ gặp xung đột trước khi sử dụng hết tất cả các giá trị bộ đếm có thể có. Tách phần nonce và bộ đếm có lẽ là cách tốt nhất để tiến hành, trong đó bộ đếm ban đầu có thể được khởi tạo thành tất cả bằng không.
Gilles 'SO- stop being evil' avatar
lá cờ cn
@MaartenBodewes âNgẫu nhiên hóa hoàn toàn IV chỉ có thể khiến bộ đếm lặp lại sớm hơn điều đó không thể đúng. Ví dụ: nếu bạn lấy trường hợp cực đoan của sự phân chia 1/127 bit giữa bộ đếm nonce trên mỗi thông báo và bộ đếm trên mỗi khối, thì điều này đảm bảo tối đa lặp lại các giá trị bộ đếm trên thông báo thứ ba.
Maarten Bodewes avatar
lá cờ in
Giả sử bạn có kích thước thư tối đa là 2^32 khối. Sau đó, bạn sử dụng 96 bit còn lại dưới dạng nonce (ngẫu nhiên) và nếu bạn sử dụng bộ đếm 32 bit để duy trì trong nonce; theo cách đó, phần tăng của bộ đếm không thể tạo ra xung đột với khối bộ đếm có nonce khác.Tuy nhiên, điều đó có thể xảy ra nếu bạn ngẫu nhiên hóa hoàn toàn khối bộ đếm, vì khoảng cách giữa các bộ đếm của hai nonce tiếp theo khác nhau. Tất nhiên, vấn đề không phải là khi nào việc lặp lại được đảm bảo, mà là về thời điểm có thể hoặc có khả năng xảy ra.
Gilles 'SO- stop being evil' avatar
lá cờ cn
@MaartenBodewes Điều này giả sử bạn có thể theo dõi những nonce nào đã được sử dụng trước đó. Tôi chỉ khuyên bạn nên sử dụng một IV ngẫu nhiên (chiếm toàn bộ khối) cho trường hợp bạn _cannot_ theo dõi những nonce nào đã được sử dụng, vì vậy, điều tốt nhất bạn có thể làm là để giá trị không lặp lại là duy nhất về mặt thống kê. Có một tình huống trong đó số lần truy cập không xác định + bộ đếm mỗi tin nhắn sẽ tốt hơn, đó là khi bạn có thể theo dõi số thứ tự tin nhắn nhưng không biết trước độ dài tin nhắn. Điều đó hơi phổ biến trong các giao thức truyền thông. Nhưng nó hơi nằm ngoài phạm vi cho câu trả lời của tôi ở đây.

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