Czy powinienem używać wektora inicjalizacji (IV) wraz z moim szyfrowaniem?

Czy zaleca się używanie wektora inicjalizacji do szyfrowania / deszyfrowania moich danych? Czy to poprawi bezpieczeństwo? Czy jest to jedna z tych rzeczy, które należy oceniać indywidualnie?

Aby umieścić to w rzeczywistym kontekście, funkcja kryptograficzna Win32, CryptSetKeyParam pozwala na ustawienie wektora inicjalizacji na kluczu przed zaszyfrowaniem/odszyfrowaniem. Inne API również na to pozwalają.

Co jest ogólnie zalecane i dlaczego?

Author: Scott Saad, 2008-09-15

7 answers

IV jest niezbędny, gdy ten sam klucz może być kiedykolwiek użyty do zaszyfrowania więcej niż jednej wiadomości.

Powodem jest to, że w większości trybów szyfrowania dwie wiadomości zaszyfrowane tym samym kluczem mogą być analizowane razem. W prostym szyfrze strumieniowym, na przykład, XORing dwóch szyfertextów zaszyfrowanych tym samym kluczem skutkuje XOR dwóch wiadomości, z których tekst jawny może być łatwo wyodrębniony przy użyciu tradycyjnych technik kryptoanalizy.

Słaba kroplówka jest częścią tego, co stworzyło WEP łamliwe.

IV zasadniczo miesza unikalne, niezajawnione dane z kluczem, aby zapobiec dwukrotnemu użyciu tego samego klucza.

 24
Author: Andrew,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-15 19:24:15

W większości przypadków powinieneś używać IV. ponieważ IV jest generowany losowo za każdym razem, jeśli zaszyfrujesz te same dane dwa razy, zaszyfrowane wiadomości będą różne i nie będzie możliwe, aby obserwator powiedział, Czy te dwie wiadomości są takie same.

 8
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-15 19:24:08

Przyjrzyj się dobrze obrazowi (patrz poniżej) trybu morfologii. Szybko zdasz sobie sprawę, że napastnik znający IV jest jak napastnik znający poprzedni blok szyfrogramu (i tak, oni już wiedzą o tym wiele).

Oto, co mówię: większość "problemów" z IV=0 to ogólne Problemy z trybami szyfrowania blokowego, gdy nie zapewnia się integralność danych. Naprawdę musisz zapewnić uczciwość.

Oto co robię: używaj silnej sumy kontrolnej (kryptograficznego hasha lub HMAC) i przed szyfrowaniem prześlij go do zwykłego tekstu. Jest Twój znany pierwszy blok szyfrogramu: jest to IV tego samego bez sumy kontrolnej, i potrzebujesz sumy kontrolnej z miliona innych powodów.

Wreszcie: jakakolwiek analogia między CBC a szyframi strumieniowymi nie jest zbyt wnikliwa IMHO.

Wystarczy spojrzeć na zdjęcie trybu CBC, myślę, że będziesz mile zaskoczony.

Oto zdjęcie:

Http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation

Link text

 5
Author: Purfideas,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-11-07 03:32:40

Znalazłem writeup http Digest Auth (RFC 2617 ) bardzo pomocne w zrozumieniu użycia i potrzeby IVs / nonces.

 2
Author: Peter Stone,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-15 19:31:25

Jeśli ten sam klucz jest używany wiele razy dla wielu różnych tajemnic, wzorce mogą pojawić się w zaszyfrowanych wynikach. IV, który powinien być pseudo losowy i użyty tylko raz z każdym kluczem, jest tam, aby zaciemnić wynik. Nigdy nie należy używać tej samej kroplówki z tym samym kluczem dwa razy, co byłoby sprzeczne z celem.

Aby nie martwić się o śledzenie IV, najprostszą rzeczą jest dołączenie go do zaszyfrowanej tajemnicy. W ten sposób nie musisz myśleć dużo o tym. Wtedy zawsze będziesz wiedział, że pierwsze lub ostatnie N bitów to IV.

Kiedy odszyfrowujesz sekret, po prostu rozdzielasz kroplówkę, a następnie używasz jej razem z kluczem do odszyfrowania tajemnicy.

 2
Author: Molibar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-07-24 17:50:38

Czy jest to jedna z tych rzeczy, które należy oceniać indywidualnie podstawa?

Tak, jest. Zawsze zapoznaj się z używanym szyfrem i tym, jak oczekuje on jego wejścia. Niektóre szyfry nie używają kroplówek, ale wymagają soli, aby były bezpieczne. Kroplówki mogą mieć różną długość. Tryb szyfru może zmienić to, do czego IV jest używany (jeśli w ogóle jest używany) i w rezultacie, jakie właściwości musi być bezpieczny (losowy, unikalny, Przyrostowy?).

Ogólnie jest zalecane, ponieważ większość ludzi jest przyzwyczajona do używania AES-256 lub podobnych szyfrów blokowych w trybie zwanym "Cipher Block Chaining". Jest to dobre, rozsądne domyślne przejście do wielu zastosowań inżynierskich i wymaga odpowiedniego (Nie powtarzającego się) IV. w tym przypadku nie jest to opcjonalne.

 1
Author: Rushyo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-09-25 12:56:22

IV pozwala na zaszyfrowanie tekstu jawnego w taki sposób, że zaszyfrowany tekst jest trudniejszy do odszyfrowania dla atakującego. Każdy bit IV, którego użyjesz, podwoi możliwości zaszyfrowanego tekstu z danego zwykłego tekstu.

Na przykład, zaszyfrujmy 'hello world' używając IV jeden znak długi. IV jest losowo wybierany jako "x". Tekst, który jest następnie zaszyfrowany, to "xhello world", który yeilds, powiedzmy, "asdfghjkl". Jeśli zaszyfrujemy go ponownie, najpierw wygenerujemy nową IV-powiedzmy, że otrzymamy' b ' to czas--i szyfrować jak normalnie (w ten sposób szyfrować "świat bhello"). Tym razem otrzymamy 'qwertyuio'.

Chodzi o to, że atakujący nie wie, czym jest IV i dlatego musi obliczyć każdą możliwą IV dla danego zwykłego tekstu, aby znaleźć pasujący tekst zaszyfrowany. W ten sposób IV działa jak sól hasła . Najczęściej IV jest używany z szyfrem łańcuchowym (szyfrem strumieniowym lub blokowym). W szyfrze blokowym wynik każdego bloku zwykłego tekstu jest przesyłany do szyfru algorytm znajdowania zaszyfrowanego tekstu dla następnego bloku. W ten sposób każdy blok jest połączony łańcuchami.

Więc, jeśli masz losową kroplówkę używaną do szyfrowania zwykłego tekstu, jak go odszyfrować? Proste. Przekaż IV (zwykłym tekstem) wraz z zaszyfrowanym tekstem. Używając naszego pierwszego przykładu powyżej, ostatecznym tekstem zaszyfrowanym byłby 'xasdfghjkl' (IV + cipher text).

Tak, powinieneś użyć kroplówki, ale pamiętaj, aby wybrać ją prawidłowo. Użyj dobrego źródła liczb losowych, aby to zrobić. Nigdy nie używaj tego samego IV dwa razy. I nigdy nie używaj stałej IV.

Artykuł na Wikipedii o wektorach inicjalizacji zawiera ogólny przegląd.

 0
Author: John,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-15 20:46:14