/ / Jak szyfrować AES w .NET bez IV - .net, asp-classic, kryptografia, rijndael, wektor inicjalizacji

Jak zaszyfrować AES w .NET bez IV - .net, asp-classic, kryptografia, rijndael, inicjalizacja-wektor

Mamy starszą część naszej klasycznej aplikacji ASP, która korzysta z kodu, który ma szyfrować / deszyfrować ciągi przy użyciu Rijndael (AES). Ten kod został znaleziony w dniu Internet tutaj (Rijndael AES Block Cipher (wersja VB)). Znalazłem już pytanie dotyczące SO, które odwołuje się do tej konkretnej biblioteki i które zapytaj prawie tak samo jak ja, ale podejrzewam, że przynajmniej jedna rzecz się wydarzyźle (poza dodaniem długości danych do zaszyfrowania na początku tablicy bajtów). Implementacja vbScript wcale nie wygląda na dodanie IV do danych do zaszyfrowania. Dlatego nie jestem w stanie dopasować tego samego szyfrowania do RijndaelManaged, ponieważ:

  1. automatycznie generuje inną IV za każdym razem
  2. absolutnie wymaga IV

Czy ktoś wie, czy możliwe jest szyfrowanie AES czegoś w .Net bez określenia IV (pustego)?

Odpowiedzi:

7 dla odpowiedzi № 1

Zarówno używany kod, jak i rozwiązanie problemu są całkowicie niepewne. Pierwszy, * NIGDY NIE POWINIENEŚ WYKORZYSTAĆ ŻADNYCH OKOLICZNOŚCI KORZYSTAJĄCYCH Z BIBLIOTEK CRYPTO, NIEKTÓRE LOSOWE LUDZIE * Okres, koniec historii. Zarówno okna, jak i.net ma zaufane, sprawdzone i szyfrowane biblioteki. Nie mają takich rzeczy jak problemy z atakiem czasowym, wychodzenie bezpośrednio z domu lub po prostu kretyńskie rzeczy, których nikt nie wiedziałby o kryptografii.

W tym przypadku wspomniana biblioteka wydaje się obsługiwać tylko Tryb EBC. Jest to całkowicie niepewne i nikt, kto wiedziałby, co robią, nie zrobiłby tego. Chociaż istnieje wiele powodów, najlepszym dowodem na to, dlaczego tego nie zrobić, jest:

wprowadź opis obrazu tutaj

To jest zaszyfrowany obrazem pingwina linuksa ekb. Niezbyt bezpieczne to jest?


2 dla odpowiedzi nr 2

Nie, nie możesz zaszyfrować niczego w trybie CBC bez IV. Możesz jednak jawnie ustaw IV na al zero. Ponieważ IV jest XOR "edowane z pierwszym blokiem zwykłym, ustawienie IV na wszystkie zera" jest równoważne z brakiem IV.

To tylko odpowiedź na twoje pytaniebyć może zechcesz zapoznać się ze wszystkimi pozostałymi do tej pory poradami dotyczącymi bezpieczeństwa. Możesz także sprawdzić, czy kod faktycznie używa szyfrowania w trybie CBC, który wymaga IV.

Szyfrowanie w trybie IV dla trybu CBC ma zawsze dokładnie jeden blok (16 bajtów dla AES, ale należy użyć getBlockSize() metoda, o ile jest dostępna.


1 dla odpowiedzi nr 3

Jawnie ustaw Mode własność twojego szyfru do ECB.

EBC jest niebezpieczny, chyba że szyfrowane zwykłe teksty są krótkimi, losowymi, unikatowymi ciągami. Przydatne jest na przykład szyfrowanie klucza sesji lub innego klucza kryptograficznego.