Điểm:0

Tôi có thể sử dụng một nửa khóa 256 bit làm AES 256 IV không?

lá cờ cn

Sau một số nghiên cứu trên google, tôi đã phát hiện ra IV được sử dụng trong mã hóa AES 256 bit phải là khóa 128 bit.

Mã hóa AES256 của tôi được xử lý bằng khóa gồm khóa 256 bit ngẫu nhiên và IV được tạo bằng chuỗi văn bản.

Tôi đang nghĩ về MD5 để tạo khóa như vậy, nhưng MD5 có vẻ đã lỗi thời.

Vì vậy, có ổn không nếu tôi sử dụng SHA256 để tạo khóa 256 bit thay vì chia chuỗi hex của khóa thành 2 phần bằng nhau và sử dụng phần đầu tiên làm IV trong mã hóa AES 256 bit?

kelalaka avatar
lá cờ in
KHÔNG!! IV là công khai và khóa là bí mật! Bạn đã cho một nửa bí mật của bạn!
Kim Mỹ avatar
lá cờ cn
bạn có thể vui lòng làm rõ nó cung cấp cho ai? Ý tôi là khóa hoàn toàn ngẫu nhiên và toàn bộ 256 bit IV không được lưu trữ, chỉ người dùng mới biết, chỉ sử dụng một nửa số đó?
kelalaka avatar
lá cờ in
Bạn đã không đề cập đến điều đó. Dù sao, hãy sử dụng $IV = SHA256(key, random\; salt)$ để đảm bảo an toàn. IV không có nghĩa là bí mật...
poncho avatar
lá cờ my
Bạn có ý định mã hóa nhiều thư bằng cùng một khóa (và do đó, theo đề xuất của bạn, cùng một IV)? Nếu không, tốt, trong chế độ CTR hoặc chế độ GCM, điều đó hoàn toàn bị hỏng (ngay cả với IV bí mật); với chế độ CBC, điều đó gần như không tệ, nhưng sẽ bị rò rỉ nếu hai tin nhắn có chung một tiền tố (vẫn còn nhiều thông tin hơn chúng ta muốn đối thủ có)
Maarten Bodewes avatar
lá cờ in
Hãy coi chừng, những thứ như tạo/dẫn xuất khóa MD5 và mã hóa khóa thập lục phân là những lá cờ đỏ lớn. Tôi thấy rất nhiều về nó trên [so] và trong 99% trường hợp, điều đó có nghĩa là người dùng không biết họ đang làm gì.
Điểm:1
lá cờ in

Vì vậy, có ổn không nếu tôi sử dụng SHA256 để tạo khóa 256 bit thay vì chia chuỗi hex của khóa thành 2 phần bằng nhau và sử dụng phần đầu tiên làm IV trong mã hóa AES 256 bit?

Không, có nhiều cách tốt hơn.

Trước hết, khi bạn tạo khóa, bạn cần một trình tạo số ngẫu nhiên được bảo mật bằng mật mã. nếu bạn lấy được khóa từ bí mật chính - đôi khi được gọi là hạt giống - bạn cần có hàm dẫn xuất khóa hoặc KDF. Trong trường hợp sau, bạn có thể ví dụ: sử dụng HKDF với hàm băm tốt, chẳng hạn như SHA-256. Về nguyên tắc, bạn có thể tạo, ví dụ: Đầu ra 384 bit bằng HKDF - ngay cả khi sử dụng SHA-256, nhưng tôi không nghĩ đó là một ý kiến ​​​​hay, vì phần sau của câu trả lời.


Thứ hai, sử dụng lại tổ hợp phím / IV không phải là một ý kiến ​​hay; tùy thuộc vào chế độ và tin nhắn, bạn có thể chỉ rò rỉ một số dữ liệu hoặc toàn bộ tin nhắn.

Nói chung, bạn chỉ có thể sử dụng IV hoàn toàn bằng 0 nếu khóa được tạo ngẫu nhiên cho mỗi tin nhắn. Điều đó sẽ tốt hơn là sử dụng lại một phần của chìa khóa. Như đã chỉ ra, IV thường không được coi là bí mật, vì vậy nếu bạn sử dụng dữ liệu chính vì việc triển khai IV rất có thể làm rò rỉ nó.'

Nếu bạn cần mã hóa nhiều tin nhắn bằng cùng một khóa thì bạn có thể sử dụng một tổng hợp IV hoặc SIV. Bằng cách đó, bạn sẽ chỉ bị rò rỉ dữ liệu nếu các tin nhắn hoàn toàn giống nhau, với chi phí là một số hiệu suất, vì các chế độ SIV là nhiều lượt (các tin nhắn cần được xử lý hai lần).

Nói chung, mặc dù vậy, bạn chỉ nên sử dụng IV ngẫu nhiên và gửi nó cùng với bản mã. Không rõ ràng từ câu hỏi nếu điều đó đã được xem xét; nó sẽ là cách phổ biến nhất để xử lý thế hệ IV.


Cuối cùng, các phím không phải là chữ và số; chúng bao gồm các bit. Mỗi khi một khóa được dịch thành văn bản, bạn đang mở một vấn đề bảo mật. Vì vậy, đừng làm điều đó: giữ khóa nhị phân.Tôi muốn sử dụng AES-128 với một khóa hoàn toàn ngẫu nhiên và sử dụng 128 bit khác cho IV hơn là hoàn nguyên về sử dụng hệ thập lục phân.

Hệ thập lục phân chỉ hữu ích cho tiêu dùng của con người, ví dụ: trong quá trình thử nghiệm hoặc gỡ lỗi khi nói đến khóa bí mật.

Điểm:0
lá cờ us

Tôi cho rằng bạn không tiết lộ IV này. Phụ thuộc vào những gì bạn muốn và chế độ bạn sử dụng. IV cho AES phải là 128 bit đối với các chế độ như OFB, CBC hoặc CFB nhưng nó thường ngắn hơn đối với các chế độ như CTR hoặc các biến thể được xác thực của nó trong đó cách tạo khối phổ biến nhất được sử dụng để tạo luồng sẽ là nối IV (nonce) và phản đối. Có thể có nhiều vấn đề với việc sử dụng một phần của khóa làm IV:

Tôi đã từng biết không có rủi ro bảo mật cố hữu lớn nào liên quan đến việc tiết lộ $E_k(k_{0..|k|/2})$ hoặc $E_k(k_{0..|k|/2} \oplus P)$ hoặc $E_k(k_{0..m} || ctr)$ cho một số tin nhắn đã biết $P$ cho AES đầy đủ (Vui lòng sửa lại nếu tôi sai). Đây là những chức năng mà bạn có thể thấy tùy thuộc vào các chế độ được sử dụng. Tuy nhiên, việc sử dụng thực tế có thể không an toàn.

  1. Về cơ bản làm cho mã hóa của bạn mang tính quyết định. Vì vậy, nó không hoàn toàn ẩn tin nhắn. Đối với các chế độ như CBC hoặc CFB, bạn có thể phát hiện các tiền tố phổ biến (tiền tố khối đầy đủ trong tin nhắn). Đối với CFB, điều này cũng có thể cho phép bạn suy ra mối quan hệ giữa các văn bản đơn giản tương ứng với các khối phân kỳ đầu tiên, cụ thể là $P_{1_i} \oplus P_{2_i}$ nơi các văn bản mật mã khác nhau tại $i^{th}$ chặn. Đối với các chế độ như CTR hoặc OFB, nó có thể tàn phá nếu bạn sử dụng lại khóa, bạn có thể suy ra mối quan hệ xor cho toàn bộ văn bản thuần túy của hai chế độ đó. Sự cố này vẫn tồn tại ngay cả khi bạn sử dụng MD5 cho IV. Do đó, nó làm cho nó rất không phù hợp để tái sử dụng, thậm chí là vô tình, điều này nói dễ hơn làm.

  2. Trong một số giao thức nếu kẻ tấn công tìm cách lấy được $E_k(k_{0..|k|/2})$ ví dụ: bằng cách lừa mã hóa $0^{|k|}$ trong chế độ CBC và sau đó lừa họ mã hóa $p_i||c_{i}$ nơi anh đã có được $c_{i}$ từ tương tác trước đó để tiết lộ $E_k(0^{|k|})$, anh ta có thể lừa họ tiết lộ một nửa khóa bằng cách yêu cầu giải mã $E_k(0^{|k|})$. Đây không phải là ý tưởng ban đầu của tôi vì vậy tôi khuyên bạn nên xem câu trả lời của fgrieu trên Đây, xem nhược điểm 2.

  3. Có thể an toàn khi sử dụng nó nếu bạn không sử dụng lại khóa hoặc trong các giao thức tương tự khác. Đối với các chế độ như CBC hoặc thậm chí ECB với một số thông báo entropy cao (ngẫu nhiên) không có cấu trúc đã biết cũng có thể ổn trong trường hợp bạn sử dụng nhiều lần.

SAI Peregrinus avatar
lá cờ si
"Tôi cho rằng bạn không tiết lộ IV này." Giả định đó là xấu. Các phân tích bảo mật của tất cả các chế độ AES phổ biến giả định IV công khai. Vì vậy, bạn phải phát minh ra một chế độ mới với IV bí mật và phải đảm bảo nó được bảo vệ (các thư viện hiện tại không cố gắng che giấu IV). Điều đó có nghĩa là thêm khả năng chống kênh bên vào việc xử lý IV. Nó khó hơn nhiều so với việc chỉ sử dụng hàm băm hoặc KDF trên khóa hoặc tốt hơn là chế độ SIV.
Manish Adhikari avatar
lá cờ us
@SAIPeregrinus Theo câu hỏi của OP, IV là một phần của khóa, vì vậy tôi cho rằng đó là điều OP muốn
SAI Peregrinus avatar
lá cờ si
Có, nhưng IV là công khai theo định nghĩa. Vì vậy, không có thư viện phần mềm nào thực hiện bất kỳ nỗ lực nào để che giấu nó, phần lớn nó được thêm vào đầu ra bản mã! Vì vậy, câu hỏi rút gọn lại thành "điều gì sẽ xảy ra nếu tôi tiết lộ một nửa khóa bí mật cho những kẻ tấn công".
poncho avatar
lá cờ my
Đối với chế độ ECB, chúng tôi thường không lo lắng nhiều về IV... :-)
Kim Mỹ avatar
lá cờ cn
cảm ơn tất cả! Nếu IV có nghĩa là công khai và được thêm vào đầu ra được mã hóa, nghĩa là tôi nên hoán đổi IV làm khóa và khóa thành IV?
Kim Mỹ avatar
lá cờ cn
Đầu ra được mã hóa của base64 có thể được chuyển đổi và hiển thị IV không?
Manish Adhikari avatar
lá cờ us
Trao đổi IV và chìa khóa, ý bạn là gì? Tôi hy vọng bạn không đề xuất giữ bí mật khóa công khai và IV, nó không mang lại sự bảo mật nào.

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