AES może być używany dla 3 kluczy wielkości: 128, 192 i 256-bitowych. Zasadniczo, jeśli możesz użyć większych kluczy niż 256 bitów, biblioteka "kłamie", to znaczy, że niektóre bity większego klucza są w jakiś sposób odrzucane lub kompresowane. Na przykład PHP mcrypt
ogranicza rozmiar klucza do największego możliwego rozmiaru.
Większe kluczowe "nasiona" są dość powszechne w świecie kryptografii. Na przykład Diffie-Hellman - algorytm uzgodnienia klucza - zwykle generuje sekret większy niż wymagany rozmiar klucza. Tak więc często pojawia się pytanie, czy , wyodrębniając (koncentrując) ilość entropii w kluczu. Jeśli bity są obcięte, to entropia w tych bitach jest odrzucana.
Tym, czego właściwie używa się w nowoczesnej kryptografii, jest KDF, funkcja wyprowadzania klucza. Jeśli wejście - nasiono - jest hasłem, powinieneś użyć PBKDF (Password Based KDF). Współczesne PBKDF to PBKDF2, bcrypt, scrypt i Argon2.
Jeśli dane wejściowe są już kluczem - dane, które zapewniają wystarczającą entropię (losowość), jeśli są wzięte razem - należy użyć KBKDF (Key Based KDF). Nowoczesny KBKDF to na przykład HKDF. Zauważ, że te algorytmy wymagają dodatkowego wejścia, więc jeśli nie podano żadnych dodatkowych danych, najprawdopodobniej bity dodatkowych kluczy są po prostu ignorowane.
Siła kryptograficzna AES-128 jest i pozostaje 128 bitów oczywiście. Tak długo jak te bity są nie do odróżnienia od przypadkowego przez atakującego, AES-128 should provide enough security for practical needs. AES-256 może być użyty, jeśli obawiasz się przełomów w kryptografii kwantowej.
Tak więc dla odpowiedzi: "Czy AES legalne wielkości klucza naprawdę są limitem?" odpowiedź brzmi: tak. 2048 bitowych rozmiarów kluczy jest częściej spotykanych dla algorytmów asymetrycznych, takich jak RSA/DSA. W przypadku RSA i DSA rozmiar klucza jest raczej niski, mimo że powinien być poza zasięgiem praktycznych ataków. Może szyfrowany tekst został zaszyfrowany przy użyciu hybrid encryption.
'(nowy AesCryptoServiceProvider()). Key = nowy bajt [256];' -> "CryptographicException: Podany klucz nie jest prawidłowym rozmiarem dla tego algorytmu." - Czy możesz pokazać kod, którego używasz z kluczem 256-bajtowym? – Blorgbeard
Napisałem bezpośrednią odpowiedź, ale zgadzam się z Blorgbeard na ten temat, nie widzę jak "AesCryptoServiceProvider" może być używany z dowolnymi kluczami o rozmiarach innych niż "legalne" rozmiary kluczy. To powiedziawszy, dokumenty Mickeysoft są - znowu - dość niejasne, by nie podawać żadnych błędów, które mogą się pojawić. –
Jeśli najpierw ustawisz klucz na 256, następnie wygenerujesz klucz, API wygeneruje 256 bajtowych kluczy bez błędów i pozwoli ci użyć go we właściwy sposób bez żadnych błędów. Napisałem całą bibliotekę klas funkcjonalnych, która używa klucza o rozmiarze 256 bajtów dla AES i hybrydowego RSA/AES, aby sprawdzić, czy zadziała podczas pisania programów na większej liczbie platform. I robi ... tylko wyjaśnienia 8, że albo klucze prawne są błędne, albo większość klucza nie jest używana. Jestem skłonny uwierzyć w to drugie. – SteakNinja