AES có thể được sử dụng cho 3 kích thước khóa: 128, 192 và 256 bit. Về cơ bản, nếu bạn có thể sử dụng các khóa lớn hơn 256 bit, thì thư viện là "nói dối bạn" tức là một số bit của khóa lớn hơn bị loại bỏ hoặc nén bằng cách nào đó. Ví dụ: PHP mcrypt
chỉ cần cắt kích thước của khóa xuống kích thước lớn nhất có thể.
Khóa lớn hơn "hạt giống" khá phổ biến trong thế giới mã hóa. Ví dụ Diffie-Hellman - một thuật toán thỏa thuận chính - thường tạo ra một bí mật lớn hơn kích thước khóa cần thiết. Vì vậy, câu hỏi của giải nén (tập trung) số lượng entropy trong một khóa thường phát sinh. Nếu bit bị cắt ngắn thì entropy trong các bit đó sẽ bị loại bỏ.
Vì vậy, những gì thực sự được sử dụng trong mật mã hiện đại là một KDF, một chức năng dẫn xuất khóa. Nếu đầu vào - hạt giống - là một mật khẩu, bạn nên sử dụng PBKDF (Mật khẩu dựa trên KDF). PBKDF hiện đại là PBKDF2, bcrypt, scrypt và Argon2.
Nếu đầu vào đã là một khóa - dữ liệu cung cấp đủ entropy (ngẫu nhiên) nếu được kết hợp với nhau - bạn nên sử dụng KBKDF (Key Based KDF). Một KBKDF hiện đại là ví dụ HKDF. Lưu ý rằng các thuật toán này yêu cầu đầu vào bổ sung, vì vậy nếu không có dữ liệu bổ sung nào được cung cấp thì rất có thể các bit khóa phụ chỉ đơn giản là bị bỏ qua.
Cường độ mã hóa của AES-128 là và giữ nguyên 128 bit. Miễn là các bit này không thể phân biệt ngẫu nhiên bởi kẻ tấn công, AES-128 should provide enough security for practical needs. AES-256 có thể được sử dụng nếu bạn sợ những đột phá trong Mật mã lượng tử.
Vì vậy, để trả lời: "AES có phải là kích thước khóa pháp lý thực sự là giới hạn không?" câu trả lời là một số điện thoại vang lên có. Kích thước khóa 2048 bit thường được tìm thấy cho các thuật toán không đối xứng như RSA/DSA. Đối với RSA và DSA, kích thước khóa thực sự khá thấp, mặc dù nó vẫn không thể tiếp cận được với các cuộc tấn công thực tế. Có lẽ bản mã đã được mã hóa bằng cách sử dụng hybrid encryption.
Nguồn
2014-04-24 05:15:56
'(new AesCryptoServiceProvider()). Key = new byte [256];' -> "CryptographicException: Khóa được chỉ định không phải là kích thước hợp lệ cho thuật toán này." - Bạn có thể hiển thị mã bạn đang sử dụng với khóa 256 byte không? – Blorgbeard
Tôi đã viết một câu trả lời trực tiếp nhưng tôi đồng ý với Blorgbeard về điều này, tôi không thấy cách 'AesCryptoServiceProvider' có thể được sử dụng với bất kỳ kích thước khóa nào khác với kích thước khóa" hợp pháp ". Điều đó nói rằng, các tài liệu Mickeysoft là - một lần nữa - mơ hồ, đủ để không chỉ định bất kỳ lỗi nào có thể phát sinh. –
Nếu bạn đặt kích thước khóa thành 256 trước, sau đó tạo khóa, API sẽ tạo khóa 256 byte không có lỗi và cho phép bạn sử dụng đúng cách mà không có lỗi. Tôi đã viết một thư viện toàn bộ lớp chức năng sử dụng kích thước khóa 256Byte cho AES và RSA/AES lai để xem nó có hoạt động khi viết chương trình trên nhiều nền tảng hơn không. Và nó ... chỉ giải thích 8 rằng một trong hai khóa hợp pháp là sai hoặc phần lớn khóa không được sử dụng. Im nghiêng để tin sau này. – SteakNinja