Jak mogę sprawić, by mój szyfr pokazywał efekt lawiny?

Jestem początkującym w kryptografii. Zaprojektowałem algorytm szyfrowania i deszyfrowania oparty na haśle, który wykorzystuje losową sól i hasło do zaszyfrowania wiadomości. Używam SHA-512 do mieszania, operacji macierzowych do tasowania, bitowego XOR do mieszania danych i pobierania. Długość soli i tekstu zaszyfrowanego to 256 liter.

O ile wiem, efekt lawiny oznacza niewielką zmianę któregokolwiek z następujących:

  • szyfr
  • hasło
  • sól

musi drastycznie zmienić wyjście.

W mojej implementacji, jeśli zmienię sól lub szyfr, nie widzę żadnych dużych zmian w moim wynik. Jednak gdy następuje niewielka zmiana hasła, dane wyjściowe zmieniają się drastycznie.

A więc moje pytania:

  • Czy moje rozumienie efektu lawiny jest ogólnie poprawne? Jeśli nie, to co powinno być?
  • Co mogę zrobić, aby uzyskać najlepszy efekt lawiny w moim (lub jakimkolwiek) szyfrze? czy powinienem mniej skracać długość soli i generować mniejszy szyfrogram, aby wywołać efekt lawiny? Jeśli nie, to jak mogę to osiągnąć?

Komentarze

  • Z ciekawości, do czego używasz tego skrótu?
  • Witamy w wymianie stosów kryptografii. @Avinash, Twoje pytanie zostało przeniesione tutaj, ponieważ jest tutaj bardziej na temat niż w Stack Overflow. Zarejestruj swoje konto tutaj, aby móc komentować i akceptować odpowiedź.
  • Jeśli chcesz uzyskać konstruktywne odpowiedzi, powinieneś pokazać, jak obecnie działa Twój szyfr (najlepiej w formułach matematycznych). Następnie możemy spojrzeć, jak to ulepszyć.
  • Usunąłem ' komentarze podobne do ” don ' t zaprojektuj własny szyfr ” – tutaj na crypto it ' s całkowicie akceptowalne, chociaż powinieneś zrozumieć, że to wszystko oczywiście na własne ryzyko 🙂 Ja ' zredagowałem też trochę pytanie, aby bardziej skupić się na efekcie lawiny pod nieobecność odpowiednich konstrukcji szyfrów. Jeśli ktokolwiek uzna to za niepotrzebne, nie krępuj się wycofać i poprawić to, co ' zrobiłem.

Odpowiedź

Nie przejmuj się zmianą rzeczywistego algorytmu szyfrującego. Przeczytaj o zasadzie Kerckhoffsa : powinieneś zmieniaj tylko takie rzeczy, jak klucz i IV, a nie rzeczywisty algorytm.

Aby przetestować lawinę, przekręć jeden bit w kluczu. Powinno to zmienić około połowy bitów w Twoim wyjściu.

W przypadku projektowania szyfrów zasugerowano już Applied Cryptography . Oprócz tego musisz przyjrzeć się wprowadzeniu Diffusion and Confusion do swojego algorytmu. Warto również zapoznać się z istniejącymi algorytmami, aby zobaczyć, jak sobie radzą. Zacząłem od zaprojektowania własnego prostego szyfru Feistela , dzięki czemu wiele otaczającej struktury jest już zrobione za Ciebie. Upraszcza również projekt, ponieważ funkcja F nie musi być odwracalna. To pozwala na dużo większą elastyczność w tej dziedzinie.

Ostrzeżenie przed używaniem własnego projektu do niczego innego niż ćwiczenie edukacyjne jest dobre.

Komentarze

  • Wielkie dzięki ….
  • Szyfrowanie / szyfrowanie to sprawa w Wielkiej Brytanii / USA.

Odpowiedź

Myślę, że to niesamowite, że tworzysz własny algorytm szyfrowania i deszyfrowania. W ten sposób dowiesz się wiele o kryptografii. Jak dotąd każdy, kto tworzy algorytm szyfrowania i deszyfrowania kryptograficznego tworzy coś przerażająco błędnego w taki czy inny sposób – bardzo pouczający – za pierwszym razem.

terminologia

Jeśli dobrze rozumiem twoje pytanie, masz doskonale rozsądne pytanie o efekt lawiny, ale większość ludzi na tej stronie jest tak zdezorientowana niestandardową terminologią, że nie mogą nawet zrozumieć, o co pytasz.

Jeśli dobrze zrozumiem Twoje pytanie, odbudowujesz system szyfrowania i deszyfrowania pobiera zwykły tekst jako dane wejściowe, przechowuje dane jako zaszyfrowane pliki, a następnie pozwala komuś z poprawnym hasłem na odszyfrowanie tych przechowywanych plików i odzyskanie odszyfrowanego tekstu jawnego bit po bicie identycznego z oryginalnym wejściem w postaci zwykłego tekstu.

Prawdopodobnie już wiesz, typowy program szyfrujący tworzy zaszyfrowane pliki, które rozpoczynają się od wektora inicjalizacyjnego (IV), który został świeżo wygenerowany przez generator liczb losowych zabezpieczony kryptograficznie podczas tworzenia zaszyfrowanego pliku.Następnie program szyfrujący dzieli plik wejściowy na bloki zwykłego tekstu o ustalonym rozmiarze bloku , używa pewnego trybu szyfrowania blokowego działania w „trybie szyfrowania”, aby przetworzyć każdy blok (i klucz szyfrowania) za pomocą szyfru blokowego , aby ostatecznie otrzymać zaszyfrowany blok ten sam rozmiar bloku, który jest dołączany do zaszyfrowanego pliku. Często na końcu znajdują się dziwne bity związane z „dopełnieniem” i „uwierzytelnianiem wiadomości”.

Później program deszyfrujący tnie zaszyfrowany plik na zaszyfrowane bloki o tej samej ustalonej wielkości, podaje każdy blok ( i klucz szyfrowania) poprzez szyfr blokowy przy użyciu tego samego trybu szyfrowania blokowego w „trybie deszyfrowania” w celu odzyskania bloku tekstu jawnego i łączy razem wszystkie bloki tekstu jawnego w celu odzyskania pliku bit po bicie identycznego z oryginalnym plikiem tekstu jawnego .

Używam SHA-512 do mieszania

OK, SHA-512 to doskonały algorytm mieszający. Jeśli używasz tego jako części wewnętrznej funkcji rundy lub do generowania podkluczy z głównego klucza szyfrowania, to zadziała; po prostu wydaje się to niepotrzebnie skomplikowane.

Jeśli używasz SHA-512 jako funkcja derywacji klucza (KDF) do generowania głównego klucza szyfrującego z hasła, wiele osób powie, że nie jest wystarczająco skomplikowana.

operacje macierzowe dla tasowanie

To trochę nietypowe, ale może zadziałać.

bitowe XOR do mieszania danych i pobierania.

Praktycznie wszystkie współczesne algorytmy szyfrowania używają wielu bitowych operacji XOR. Wiele nowoczesnych algorytmów szyfrujących jest zaprojektowanych tak, aby używać tylko modularnych dodatków, rotacji ze stałymi wartościami rotacji i XOR (ARX) w pętli wewnętrznej (iteracja okrągła).

Jestem całkiem taka, że funkcja rundy wewnętrznej, która używa tylko XOR lub tylko obrót lub tylko dodawanie modułowe będzie śmiertelnie niebezpieczne bez względu na to, ile okrągłych iteracji jest używanych.

(Nie wiem wystarczająco dużo, aby powiedzieć cokolwiek o bezpieczeństwie twojej konkretnej kombinacji operacji XOR i macierzy).

Długość sól, a szyfrogram ma 256 liter.

Zakładam, że chciałeś powiedzieć „Długość wektora inicjalizacyjnego (IV) i każdego bloku szyfrogramu to 256 liter . ”

„ Sól ”jest używana do jednokierunkowego szyfrowania kryptograficznego – patrz Czy możesz mi pomóc zrozumieć, czym jest kryptografia ” sól ” jest? . „IV” jest używany w kryptografii dwukierunkowej – zarówno w szyfrowaniu, jak i deszyfrowaniu. Zarówno „sól”, jak i „IV” to świeżo wygenerowane wartości losowe, które zakłada się, że są publicznie znane, ale terminologia wskazuje, że będą one używane w różnych rodzajach systemów.

Prawie każdy określa długość IV równy rozmiarowi bloku, więc to jest świetne.

W moim rozumieniu praktycznie wszystkie szyfry opracowane przed ogłoszeniem konkursu AES w 1997 roku używały rozmiaru bloku 64 bitów (8 bajtów) lub mniejszego. Niektórzy kryptolodzy najwyraźniej uważałem, że to nie wystarczy, ale z tego co wiem, obecnie wszyscy uważają, że rozmiar bloku 128 bitów (16 bajtów) jest wystarczający.

Rozmiar bloku 256 bajtów wystarczy; wydaje się po prostu niepotrzebnie duży.

efekt lawiny

Podczas przepuszczania każdego bloku tekstu jawnego przez szyfr blokowy (w pewnym trybie szyfrowania), efekt lawiny oznacza, że zmiana jednego bitu dowolne z poniższych:

  • dane w bloku tekstu jawnego
  • hasło
  • IV

musi zmienić drastycznie generuje blok tekstu zaszyfrowanego (około połowy bitów).

Podczas przepuszczania każdego bloku tekstu zaszyfrowanego przez szyfr blokowy (w pewnym trybie deszyfrowania) efekt lawiny oznacza, że jeden bit zmienia się w jednym z poniższych:

  • blok tekstu zaszyfrowanego
  • hasło
  • IV

musi drastycznie zmienić wyjściowy blok tekstu jawnego (o połowa bitów).

W mojej implementacji, jeśli zmienię sól lub szyfr, nie widzę żadnych dużych zmian w wynikach.

Zgaduję, że miałeś na myśli jedną z dwóch rzeczy:

  • „jeśli zmienię choćby kawałek w pobliżu początek o w zaszyfrowanym pliku (tj. w IV lub w jakimś wczesnym bloku tekstu zaszyfrowanego), nie widzę żadnych dużych zmian pod koniec mojego wyjściowego pliku tekstowego.

Ten brak zmiana zachodzi zawsze, gdy używasz (bezpiecznego) łączenia bloków szyfrowania (CBC) lub innych trybów działania. Więc niekoniecznie jest to problem.

Jednak może to być problem, jeśli myślisz, że używasz (bezpiecznego) trybu Propagating Cipher Block Chaining (PCBC), gdzie ten brak zmian wskazuje na błąd w realizacji.

Ponadto ten brak zmian jest oczekiwanym rezultatem podczas korzystania z (niezabezpieczonego) trybu elektronicznej książki kodowej (ECB).

Niezależnie od wybranego trybu działania, program deszyfrujący powinien wydrukować duże przerażające ostrzeżenia, że plik nie przeszedł weryfikacji uwierzytelnienia MAC za każdym razem, gdy uszkodzony jest pojedynczy bit zaszyfrowanego pliku.

  • „jeśli zmienię choćby jeden bit w pojedynczy zaszyfrowany blok tekstu zaszyfrowanego w zaszyfrowanym pliku, nie widzę żadnych dużych zmian w odpowiednim bloku tekstu jawnego w moim wyjściowym pliku zwykłego tekstu. ”

Tak, to wskazuje na poważną wadę – algorytm szyfru blokowego nie ma dobrego efektu lawinowego. To znak, że algorytm nie ma wystarczającego mieszania. Ogólnie oznacza to, że system jest podatny na ataki z wybranym szyfrogramem i podobne ataki.

Co mogę zrobić, aby jak najlepiej wywołać efekt lawiny w moim (lub jakimkolwiek) szyfrze? czy powinienem zmniejszyć długość soli i wygenerować mniejszy tekst zaszyfrowany, aby stworzyć efekt lawiny?

Zakładam, że chciałeś zapytać „czy powinienem zmniejszyć rozmiar IV i rozmiar bloku, aby wywołać efekt lawiny? ”

To generalnie nie jest konieczne.

Najczęstsze podejścia do wywoływania efektu lawiny są wymienione w Wikipedii szyfr blokowy artykuł:

Nie znam żadnego szyfru blokowego, który generowałby pełną lawinę po jednej rundzie. Osoby projektujące szyfry blokowe starają się wybrać pewną liczbę rund wystarczającą, aby szyfr blokowy był odporny na wszystkie standardowe ataki kryptograficzne , co jest więcej niż wystarczające do wywołania pełnej lawiny .

Osoby projektujące szyfr blokowy zazwyczaj wybierają jeden ogólny schemat projektowania szyfru blokowego i sprawiają, że program szyfru blokowego wykonuje go w kółko przez wybraną liczbę rund. Niektóre z najpopularniejszych schematów projektowania szyfrów blokowych to:

  • sieć z substytucją i permutacją
  • szyfr Feistela
  • szyfr Lai-Massey

Każdy z nich wymaga jakiejś wewnętrznej funkcji nieliniowej. Wczesne szyfry blokowe często wykorzystują skomplikowaną funkcję wewnętrzną w każdej rundzie, która prawie powoduje lawinę w jednej rundzie. Współczesne szyfry często używają bardzo prostej, szybkiej funkcji wewnętrznej w każdej rundzie (kilka funkcji ARX) z nieliniowością wystarczającą do osiągnięcia lawiny po dużej liczbie rund.

Komentarze

  • Uwaga dodatkowa: szyfr khazad ma pełną dyfuzję po jednej rundzie. ' stworzyłem zabawki, które też to robią, jest to ' z pewnością możliwe, a odkrywanie sposobów na to jest zabawne.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *