Dzwon.

Są ci, którzy przeczytali tę wiadomość przed tobą.
Subskrybuj odbieranie artykułów świeżych.
E-mail
Nazwa
Nazwisko
Jak chcesz przeczytać dzwonek
Bez spamu

Termin "wydajność procesora" jest znana w społeczeństwie reprezentuje obiektywny, obliczony parametr mierzony w klapkach. Jednak większość mierzy je w Gigahertianach, w dziedzinie, wierząc, że jest to samo. Termin "Wydajność kodu" nie znają nikogo, i natychmiast wyjaśnij dlaczego.

Powodem jest to, że właśnie wyszedłem z nim i dopóki nikomu nie powiedziałem. Jednak wydajność kodu, a także wydajność procesora, ma obiektywne cechy, które można zmierzyć. W tym artykule jest to, że wydajność kodu przeprowadzanego przez rdzeń procesora.

Jaki jest pomiar wydajności kodu? Odkąd mówiłem pierwszym, aby o tym porozmawiać, a potem zmierzyę go w statkach RTT po prawej stronie rejestratora;).

Teraz poważnie. W nowoczesnych procesorach głównymi transformacjami są działaniami na 32-bitowych liczbach, wszystko inne i duże egzotyczne. Dlatego rozważymy najważniejsze - operacje z numerami 32-bitowymi. Jak myślisz, ile 32-bitowych operacji może wykonywać rdzeń współczesnego procesora w tym samym czasie?

Student odpowie na jeden, jego nauczyciel będzie pomyśleć i powiedzieć, że cztery, profesjonalne - że podczas gdy tylko dwanaście operacji.

Tak więc kod programu, który ładuje wszystkie siłowniki procesora jednocześnie w całym kodzie Kodeksu, będzie miał pojemność 12 RTT-Sho. Maksymalny! Szczerze mówiąc, wyznawam, nie napisałem takiego kodu, ale w tym artykule postaram się podjąć wysiłek na sobie.

Udowodnię, że Kodeks z jednoczesnym wykonaniem dwunastu 32-bitowych operacji jest możliwy

Kod programu, który wykorzystuje jeden siłownik w jądrze procesora, naturalnie ma wydajność w 1 RTT-SCI. Taka wydajność kodu może "pochwalić" programy generowane przez kompilatory języków wysokiego poziomu i interpretarzy maszyn wirtualnych. Nie trzeba zakładać, że wskaźnik ładowania procesora, który można zobaczyć w Menedżerze zadań OS może służyć jako obiektywne kryterium wydajności kodu. Obciążenie jądra procesora może wynosić 100%, ale kod programu będzie używać jednego siłownika (1 wydajność RTT). W tym przypadku, przy 100% załadunku, jądro procesora będzie działać w 1/12 jego maksymalnej wydajności. Innymi słowy, gdy maksymalny rozruch procesorowy jest wyświetlany w Menedżerze zadań w systemie Windows OS, jego rzeczywistą wydajnością może się różnić od 1 do 12 rtt. Widząc 100% w oknie okna wydajności na rdzeniu procesora, jest błędne, że wszystkie urządzenia wykonawcze działają w tym rdzeniu, w żaden sposób!

Jedynym kryterium oceny pośredniej pracy jądra procesora o maksymalnej wydajności może być jego zużycie energii, a w wyniku czego hałas chłodnicy. Jeśli chłodnica jest podejmowana, a następnie tak - pobieranie trafiło do maksimum. Nadszedł czas, aby zakończyć z ogólnymi koncepcjami i przenieść się do ostrej praktyki.

Tradycyjna sprzedaż Gost 28147-89

Nie jestem profesjonalistą w dziedzinie bezpieczeństwa informacji, ale nadal zaznajomiony z tematem szyfrowania. Szczególnie symetryczne szyfrowanie przepływające Zostałem zawieszony rozmową z profesjonalnym kryptografem, który głęboko szacunek. I zaangażowany w ten temat, starałem się zrobić dokładnie dobrze, a nie tylko dobre, ale także szybko, wykonując maksymalną liczbę operacji na jednostkę czasu. Innymi słowy, przede mną zadaniem zapisu kodu programu z maksymalną wartością RTT.

Transformacja kryptograficzna zgodnie z Gost 28147-89 jest używana do usprawnionego szyfrowania informacji w kanałach komunikacyjnych i na dyskach dysków.

Obecnie stosowanie programu tego GOST na Ron centralnej okrągły jest powszechnie stosowany. W znanych metodach wdrażania GOST wszystkie tajne informacje (klucze szyfrowania, bloki zmiany) są umieszczane w pamięci RAM. Zmniejsza to niezawodność szyfrowania, ponieważ posiadanie zrzutu RAM można całkowicie zidentyfikować wszystkie tajne elementy Cryptokremii. Ponadto sposób ma ograniczenia prędkości, ze względu na lokalizację głównych obiektów kryptokreformujących w OP i niepełnym obciążeniu siłowników ALU. Nowoczesne procesory, wdrażające kryptoprocesor w dobrze znanej metodzie, może zapewnić szybkość szyfrowania w 40-60 megabajtach na sekundę. A jeśli zrozumiesz do końca, powodem, dla którego ochrona o niskiej prędkości i słabej ochronie kryptokropionowania jest oprogramowaniem realizacji bloku substytucji. Za opis go w goście, patrz rys. jeden.

Zgodnie z paragrafem 1.2 Jednostka ta implementuje notebooki (cztery bity) permutacji w 32-bitowym słowie, ale architektura procesora X86 / 64 i jego systemu poleceń nie jest w stanie skutecznie manipulować Tetradem.

W przypadku wdrażania oprogramowania bloku substytucyjnego, specjalne tabele są stosowane w pamięci RAM, przygotowane na etapie inicjalizacji kryptofuncji. Tabele te łączą węzły zamiennego Tetradu do tabel bajtów o wielkości 8 × 8 bitów, a więc cztery 256-spike tabele są przystosowane w pamięci RAM.

W bardziej zaawansowanych implementacjach, te tabele mają rozmiar 1024 bajtów (256 słów czterech bajtów). Odbywa się to w celu wdrożenia w tabelach dodatkowy cykliczny przesunięcie do 11 pozycji otrzymanych w wyniku 32-bitowej substytucji słów (kolejna działanie algorytmu konwersji zgodnie z GOST). Przykład wdrażania GOST dla tej metody jest pokazany w dodatku 1 (na dysku).

Informacje o jednostce substytucyjnej jest tajnym składnikiem kryptofuncji (jak jest sformułowany w goście, patrz rys. 2).

Umieszczenie tych tabel z klucze bloków zastępczych w OP w przeciwieństwie do wymogów GOST (klauzula 1.7), ponieważ tajne informacje stają się dostępne dla programów innych firm działających na instalację komputerową. FSB, certyfikacja, w tym wdrażanie oprogramowania szyfrowania w Gost, patrzy na to naruszenie, aby umieścić go lekko, protekcjonalne. Jeśli nadal wymaga zainstalowania "liścia figowego" w OP FSB, klawisze maskuje operację XOR, a następnie do bloków zastępczych w OP nie jest wymagane, są one przechowywane w formie otwartej.

Krótko mówiąc, FSB brakuje takich implementacji oprogramowania kryptoprocesowych, pomimo wyraźnej redukcji wytrwałości takiej decyzji i bezpośredniego naruszenia własnych wymogów na GOST (pkt 1.7). I to pomimo znanych metod hakowania szyfrów przez tłok zrzutu pamięci ...

Do kwestii przechowywania kluczy i bloków zamienników w wewnętrznych rejestrach procesora, wrócimy trochę później (istnieje piękne i szybkie rozwiązanie), ale na teraz tylko klucze szyfrowania przechowywamy w rejestrach MMX, to więcej niezawodny.

Ale istnieje wystarczająca ilość tekstów, ważne jest w ramach rozważanego tematu, że ten kod programu ma wydajność w 1 RTT-SCI. Teraz zapisuj kod o pojemności 2 RTT-ShKI.

Wdrożenie wielokrotne GOST 28147-89

Jedyną możliwością przyspieszenia kryptoprocesorów w dobrze znanym algorytmie jest wprowadzenie wielowartości. Znaczenie takiej zmiany wdrażania algorytmu jest obliczenie kilku bloków danych jednocześnie równolegle.

Większość programistów sugeruje pod kontrolą równoległej przetwarzania wyłącznie do pracy kilka rdzeni procesorów zsynchronizowanych poprzez przerwanie i semafory w pamięci.

Istnieje jednak inny wariant równoległych przetwarzania danych na jednym jądrze procesora. Wyjaśnię tę niesamieniową myśl.

Nowoczesne procesory mają w ich kompozycji co najmniej dwa, a następnie trzy lub sześć urządzeń arytmetycznych i logicznych. Te ALU (FPU, bloki arytmetyczne i tak dalej) mogą działać niezależnie od siebie, jedynym warunkami ich działalności równoległej jest obiektami programu nie cyklu, z którymi działają. Innymi słowy, w poleceń, które jednocześnie wykonują alu, adresy pamięci i numery rejestracyjne muszą być różne. Ogólnie rejestry i adresy pamięci, do których adresowane są różne siłowniki procesorów, operacje rekordów nie powinny być wykonywane.

Ładując pracę wszystkich Allu kontroluje specjalny blok sprzętowy wewnątrz jądra procesora - planista, który przeglądający kod wykonywalny jest przystępno przybudowo, do głębokości 32-64 bajtów. Jeśli harmonogram wykryje polecenia, które można uruchomić na Allu bez konfliktu, rozpoczyna je jednocześnie na różnych siłownikach. W tym samym czasie, miernik wykonanych poleceń wskazuje polecenie wykonywalne (istnieje kilka z nich w takim schemacie), po czym wszystkie polecenia zostały już wykonane.

Większość sekwencji programowych generowanych automatycznie (kompilatory) nie może załadować wszystkich ALU i FPU znajdujących się w jądrze CPU. W tym przypadku sprzęt procesora jest bezczynny, co znacznie zmniejsza jego wynikową wydajność. Deweloperzy procesorów rozumieją to i wprowadzają tryby zwiększania częstotliwości rdzenia, gdy sprzęt nie jest w pełni używany. Ponadto, system hipertrered jest również przeznaczony, a użyję tego systemu, aby "nacisnąć" kod do maksimum w przyszłości.

Kompilatory, nawet najbardziej zoptymalizowane, a jeszcze bardziej skocznice maszyn wirtualnych, nie mogą tworzyć zoptymalizowanego kodu z punktu widzenia prędkości. Tylko programista z wiedzą inżynieryjną może pisać taki zoptymalizowany kod, a narzędzie do pisania jest wyłącznie asembler.

Charakterystyczną ilustracją możliwości wykonywania kilku niezależnych strumieni oprogramowania na jednym rdzeniu procesora jest realizacja Gost, wykonana w dwóch strumieniach na jedynym rdzeniu procesora. Idea kodu jest prosta: istnieją dwa bloki danych blokujących do szyfrowania / deszyfrowania, ale jeden rdzeń procesora, który się zmieni. Możesz wykonać konwersję tych dwóch bloków danych sekwencyjnie i odbywa się do tej pory. W takim przypadku czas potrzebny do transformacji jest podwojony.

Ale możesz iść i inaczej: alternatywne polecenia związane z przetwarzaniem różnych bloków danych. Grafically, te opcje są prezentowane na FIG. 3.


Na rysunku najwyższy przykład pokazuje zwykłą procedurę wykonania przetwarzania dwóch niezależnych bloków danych. Po pierwsze, pierwszy blok jest przetwarzany, a następnie procesory procesora do przetwarzania drugiego bloku. Oczywiście, uzyskany czas jest równy dwukrotnie, który jest niezbędny do przetwarzania jednego bloku, a siłowniki jądra procesora nie są w pełni załadowane.

Poniżej znajduje się przykład z przemiennymi poleceniami z różnych wątków przetwarzania. W takim przypadku polecenia dotyczące różnych bloków danych alternatywnych. Harmonogram wybiera zespół niezależną od siebie i przekazuje je do wykonywania ich w ALU1 i Allu2. Grupowanie zespołów pierwszego i drugiego strumienia na tych ALU jest automatycznie wdrażane, ponieważ w algorytmie pracy Planista, grupowanie poleceń z przekładni na ogólne dane na temat tych samych urządzeń wykonawczych.

Aby taki kod programu pracować bez przestoju przez ALU, konieczne jest, aby każdy wątek programu pracował z zestawem rejestrów. Pamięć podręczna w tym schemacie staje się gardłem (ma tylko dwa porty wydawania danych), więc klucze są przechowywane w rejestrach MMX. Ponieważ w tym przypadku węzły wymiany (i zmianę) są tylko czytane tylko w pamięci, mogą być wspólne dla obu strumieni oprogramowania.

To oczywiście bardzo uproszczone wyjaśnienie zasady równoległych wykonujących strumieni oprogramowania na jedynym rdzeniu, jest naprawdę wszystko znacznie trudniejsze. W praktyce konieczne jest uwzględnienie architektury przenośnika urządzeń wykonawczych, ograniczeń w jednoczesnym dostępie do pamięci podręcznej i blok rejestru RON, obecność węzłów arytmetyków adresowych, przełączników i wiele więcej ... więc to jest Temat dla profesjonalistów, które można policzyć na palcach ... jedną ręką.

Metoda szybkiego szyfrowania równoległa jest skutecznie zaimplementowana tylko dla 64-bitowego trybu działania procesora, ponieważ w tym trybie istnieje wystarczająca ilość Ron (aż 16 sztuk!). Przykładem realizacji GOST dla tej metody jest pokazany w dodatku 2 (na dysku).

Oczywiste jest, że ta implementacja Gost ma wydajność 2 Kod RTT-ShKe. A teraz zobaczmy, jak wpływa na czas wykonania.

Cykl szyfrowania dla jednego strumienia (dodatek 1) wynosi 352 TACT, a w tym czasie jest obliczany 8 bajtów danych, do dwukrotnej implementacji GOST (dodatek 2), wymagane są 416 cykli procesorów, ale obliczane są 16 bajtów . Zatem wynikowa szybkość transformacji wzrasta od 80 do 144 megabajtów dla procesora o częstotliwości 3,6 GHz.

Uzyskany jest ciekawy obraz: Kod zawiera dokładnie dwa razy więcej drużyn i jest wykonywane tylko o 15% dłużej, ale myślę, że czytelnicy rozumieli powód tego zjawiska ...

Teoretycznie, kod z drugiego przykładu musi być wykonany dla tej samej liczby zegarów, co kod z pierwszego przykładu, ale montaż planisty rozwija się w inżynierach Intel, ale także ludzi, a my wszyscy jesteśmy daleko od doskonałych. Więc możliwe jest ocena skuteczności ich stworzenia. Ten kod będzie pracować nad procesorem AMD i możesz porównać ich wyniki.

Jeśli ktoś mi nie wierzy, to dla takich niewierzących programy testowe z licznikami TACH są dołączone na dysku. Programy w kategoriach źródłowych, naturalnie na asemblerze, dzięki czemu możliwe jest sprawdzenie moich słów, a jednocześnie i rozlewać kilka sztuczek profesjonalnych kodowania.

Korzystanie z rejestrów SSE i zespołów AVX nowoczesnych procesorów do wdrożenia Gost 28147-89

Nowoczesne przetwórcy architektury X86 / 64 są w ich kompozycji zestaw SSE rejestrów 16 bajtów i wyspecjalizowanych FPU (co najmniej dwóch) wykonania różnych operacji na tych rejestrach. Możliwe jest wdrożenie GOST na tym urządzeniu, aw tym przypadku węzły wymiany nie można umieścić w postaci tabel w pamięci RAM, ale bezpośrednio na wybranych rejestrach SSE.

Na jednym rejestrze SSE można umieścić dwa tabele z 16 linii. Tak więc cztery rejestry SSE pozwolą Ci w pełni dostosować wszystkie tabele zastępcze. Jedynym warunkiem tego miejsca jest wymóg alteracji, zgodnie z którym jedno bajtowe tetrady powinny być umieszczone w różnych rejestrach SSE. Ponadto wskazane jest umieszczenie młodszych i starszych tetradów wejściowych odpowiednio, w młodszych i starszych bajtów SSE-rejestry.

Wymagania te są określane przez optymalizację pod dostępnym zestawem poleceń AVX. W ten sposób każdy Bajt Rejestru SSE będzie zawierać dwa tetrady związane z różnymi bajtami rejestru wejściowego bloku substytucji, a pozycja bajtowego rejestru SSE jednoznacznie odpowiada indeksowi w tablicy zastępczej blokowej blokady.

Schemat jednego z możliwych miejsc zamiennych węzłów na rejestrach SSE pokazano na FIG. cztery.


Umieszczenie tajnych informacji SSE-rejestry węzłów wymiany zwiększa ochronę kryptoprocesorów, ale całkowita izolacja tych tajnych informacji jest możliwa zgodnie z następującymi warunkami:

  • Rdzeń procesora przekłada się na gospodarza hiperwizora, a blok przerwań jest przymusowy (APIC). W tym przypadku rdzeń procesora jest w pełni samodzielny od systemu operacyjnego i aplikacji działających na instalacji komputerowej.
  • Załadowanie rejestrów SSE i izolację jądra obliczeniowego jest wykonywane przed rozpoczęciem rozpoczęcia operacyjnego, optymalny jest wykonanie tych procedur z zaufanego modułu obciążenia (MDZ).
  • CryptoProcece ocenice Programy Gost są umieszczane w niemiarkowanym obszarze pamięci instalacji obliczeniowej (BIOS lub w pamięci flash MDZ).

Spełnienie tych wymogów pozwoli na zapewnienie całkowitej izolacji i niezmienności kodeksu programu kryptoprocesora i wykorzystywanych w nich tajnych informacji.

Aby uzyskać skuteczną próbkę SSE, bieżące przełączniki bajtów są używane jako część bloków FPU. Te przełączniki umożliwiają przeniesienie z dowolnego źródła bajtu do dowolnego bajtu odbiornika, zgodnie z indeksami w specjalnym indeksowym rejestrze SSE. Ponadto, równolegle, przekazanie przez wszystkie 16 bajtów odbiorcy SSE.

Mając węzły pamięci masowej w SSE-Rejestry i wielokanałowy przełącznik w blokach FPU, można zorganizować następującą transformację w bloku substytucji (rys. 5).

W tym obwodzie rejestr wejściowy w każdej tetradzie ustawiają adres dla odpowiedniego przełącznika, który nad transferze magistrali danych do rejestru wyjściowego z napędów węzłów wymiany. Taki schemat można zorganizować na trzy sposoby:

  • Utwórz odpowiedni projekt wiórów, ale jest to dla nas fantastyczne.
  • Przeprogramuj mikrokod i utwórz własny polecenie procesora, aby wdrożyć tę funkcję na istniejących procesorach - to nie jest już fikcja, ale niestety nierealne w obecnych warunkach.
  • Napisz program na oficjalnych poleceń AVX. Opcje i niezbyt skuteczne, ale będziemy wdrażać "tutaj i teraz". Więc to nastąpi dalej.

Praca przełączników jest zarządzana przez specjalne Trekhadres Team Avx VPShufbbbbbbbb. Jego pierwszym operandem jest odbiornik informacji z przełączników, drugi - źródło, do którego podłączone są wejścia przełączników. Trzecim operandem jest rejestr sterowania dla przełączników, których każdy bajt jest związany z odpowiednim wyłącznikiem; Wartość w nim określa numer kierunkowy, z którego przełącznik odczytuje informacje. Opis tego polecenia z oficjalnej dokumentacji Intel, patrz rys. 5. Na rys. 6 przedstawia schemat pracy tego polecenia - przedstawiono tylko połowę rejestrów SSE, na drugą połowę wszystko jest podobne.


Przełącznik wykorzystuje tylko młodsze cztery bity do określenia kierunku przełączania, ostatni bit w każdym paszku służy do przymusowego zresetowania odpowiedniego bajtu odbiornika, ale ta funkcja przełącznika w naszym przypadku nie jest jeszcze w popycie.

Program z wyborem Tetradu przez przełączniki FPU zostało napisane, ale nawet nie umieściłem go do aplikacji - zbyt uboju. Masz rejestr 128 bitów i używaj tylko 32 bitów - nieprofesjonalne.

Jak mówią: "Nasze wykończenie jest horyzontem", więc ściskać tak ściskać ... naciskamy i złożymy w pakietach!

To nie jest gra słów i surowa rzeczywistość FPUE - Rejestry SSE można podzielić na równe części i wykonać te same transformacje na tych częściach za pomocą jednego polecenia. Aby procesor rozumiem, istnieje magiczny belfer "P" - pakiet, który jest umieszczony przed zespołem mnemonii, a nie mniej magiczny dziób "Q", "D", "W", "B", które są umieszczane w końcu i deklarują, jakie części rejestrów SSE są podzielone na to polecenie.

Jesteśmy zainteresowani reżimem wsadowym z rejestrem SSE dla czterech 32-bitowych bloków; W związku z tym wszystkie polecenia będą miały prefiks "P" i na końcu - symbol "D". Umożliwia to jedno polecenie procesora równolegle do obsługi czterech bloków 32 bitów jednocześnie, czyli, aby policzyć cztery bloki danych w równolegle.

Program wdrażający tę metodę jest dostępny w dodatku 3, Ibid - wszystkie wyjaśnienia.

Jednak naciśnij więc, więc naciśnij! W nowoczesnych procesorach znajdują się co najmniej dwa jednostki FPU, a dwa wątki niezależnych poleceń mogą być używane do w pełni pobrania. Jeśli poprawnie prawidłowo alternatywne polecenia z niezależnych strumieni, możesz całkowicie pobrać obie bloki FPU i natychmiast uzyskać osiem równoległych strumieni danych natychmiast. Taki program został napisany i można go oglądać w dodatku 4, po prostu musisz uważnie wyglądać - możesz latać z cewek. W ten sposób nazywa się "kod nie jest dla wszystkich ...".

Cena kwestii.

Korzystanie z rejestrów SSE do przechowywania węzłów wymiany jest jasne - daje pewną gwarancję izolacji tajnych informacji, ale rozumieniu obliczenia cryptofuncji sama na FPU nie jest oczywisty. Dlatego pomiary mierzono dzięki wdrażaniu standardowych procedur metodą bezpośredniej zamienną zgodnie z GOST przez cztery i osiem przepływów.

Dla czterech strumieni uzyskano prędkość 472 zegara procesora. Tak więc, dla procesora o częstotliwości 3,6 GHz, jeden strumień jest rozpatrywany z prędkością 59 megabajtów na sekundę i cztery strumienie, odpowiednio z prędkością 236 megabajtów na sekundę.

Dla ośmiu przepływów uzyskano szybkość wykonania 580 zegarów procesora. Tak więc, dla procesora o częstotliwości 3,6 GHz, jeden strumień jest rozpatrywany z prędkością 49 megabajtów na sekundę, a osiem strumieni z prędkością 392 megabajtów na sekundę.

Ponieważ czytelnik może zauważyć, kod w przykładzie nr 3 ma 4 wydajność RTT, a kod w przykładzie nr 4 ma 8 RTT. W takich przykładach rejestry SSE są takie same jak przy użyciu Rona, tylko planista zmniejszył skuteczność. Teraz zapewnia 20% wzrost czasu trwania z dwukrotnym wzrostem długości kodu.

Ponadto wyniki uzyskano przy użyciu uniwersalnych poleceń AVX dostępnych w procesorach Intel i procesorów AMD. Jeśli zoptymalizujesz procesor AMD, wynik będzie znacznie lepszy. Brzmi z trendem, ale jednak jest to prawda, a potem, dlaczego: Procesory AMD mają dodatkowy zestaw drużyn, tzw. Rozbudowa XOP, aw tym dodatkowym zestawie poleceń są te, które znacznie upraszczają wdrażanie Gost algorytm.

Odnosi się to do poleceń logicznego przesunięcia bajtów i cyklicznej zmiany wsadowej podwójnych słów. W przykładach podanych w załącznikach 3 i 4 sekwencje poleceń uniwersalnych, które wdrażają niezbędną transformację, są używane: w pierwszym przypadku jeden "niepotrzebny" polecenie, aw innym przypadku cztery niepotrzebne polecenia naraz. Więc rezerwy optymalizacji są i znaczne.

Jeśli chodzi o dalszą optymalizację, nie jest to zapamiętanie obecności 256-bitowych rejestrów (rejestry YMM), przy użyciu teoretycznie dwukrotnej prędkości obliczeń. Ale gdy jest to tylko perspektywa, obecnie powolne procesory są bardzo wolne, gdy przeprowadzane są 256-bitowe instrukcje (FPU mają szerokość ścieżki 128). Eksperymenty wykazały, że na nowoczesnych procesorach, konto w 16 wątkach na rejestrach YMM nie daje wygranej. Ale tak dlatego też nowe modele procesora będą niewątpliwie zwiększone prędkości 256-bitowych poleceń, a następnie zastosowanie 16 strumieni równoległych stanie się odpowiedni i doprowadzi do jeszcze większego wzrostu prędkości kryptoprocesora.

Teoretycznie można liczyć na prędkość 600-700 megabajtów na sekundę w obecności dwóch stóp FPU w procesorze o szerokości ścieżki roboczej 256 bitów. W tym przypadku możemy porozmawiać o pisaniu kodu z skutecznością 16 RTT, a to nie jest fikcja, ale najbliższa perspektywa.

Tryb mieszany

Ponownie brakuje kwestii liczby rejestrów, brakuje im promowania takiego algorytmu. Ale tryb hipertrered pomoże nam. Kernel procesora ma drugi zestaw rejestrów dostępnych w procesorach logicznych. Dlatego wykonamy ten sam kod jednocześnie na dwóch procesorach logicznych. W tym trybie urządzeń wykonawczych, oczywiście nie dodamy, ale alternatywną możesz uzyskać pełne ładowanie wszystkich urządzeń wykonawczych.

Nie ma potrzeby liczenia na wzrost o 50% tutaj, wąski punkt staje się pamięcią podręczną, w których przechowywane są maski technologiczne, ale nadal można uzyskać wzrost dodatkowych megabajtów. Ta opcja nie jest podana w aplikacjach (makr są podobne do tych używanych w kodzie o 8 RTT), ale jest dostępny w plikach programowych. Jeśli więc ktoś nie wierzy w możliwość szyfrowania z prędkością 500 megabajtów na sekundę na jednym rdzeniu procesora, niech rozpocznie się pliki testowe. Są też teksty z komentarzami, aby nikt nie pomyślał, że jestem aresztą.

Taki skupienie jest możliwe tylko na procesorach Intel, AMD ma tylko dwa bloki FPU na dwa moduły procesora (analogowy tryb przeciera). Ale są cztery same same, którzy nie używają grzechu.

Możesz prowadzić moduły procesora "buldożera" do trybu, podobnie jak tryb hipertrajding, ale uruchomić na różnych modułach w jednej konwersji nici do Ron, aw innym strumieniu na SSE-rejestry i uzyskaj ten sam 12 RTT. Nie sprawdziłem tej opcji, ale myślę, że kod AMD przy 12 rtt będzie działał bardziej wydajnie. Ci, którzy chcą spróbować, programy testowe można poprawić, aby pracować nad "buldożerami" łatwo łatwo łatwo.

Kto tego potrzebuje?

Poważne pytanie, ale z prostą odpowiedzią - jest to konieczne dla każdego. Wkrótce wszyscy niedoszłomy chmury, przechowywamy i dane i programy tam oraz tam, jak chcesz wyposażyć własny, prywatny narożnik. Aby to zrobić, będziesz musiał szyfrować ruch, a prędkość kryptokreform będzie głównym czynnikiem definiującym w wygodnej pracy w chmurze. Wybór algorytmu szyfrowania od nas jest mały - Albo Gost, albo AES.

Co więcej, dziwnie wystarczająco, wewnętrzne szyfrowanie w algorytmie AES okazuje się znacznie wolniejsze, testy wykazują prędkość na poziomie 100-150 megabajtów na sekundę, a to jest wtedy, gdy algorytm jest sprzętem! Problem polega na koncie pojedynczym i jednostce zamiennej, która działa przez bajty (tabela z 256 linii). Więc Gost okazuje się być bardziej wydajny we wdrażaniu w zakresie architektury X86 / 64, która pomyślałaby ...

To jest, jeśli mówimy o osiągniętym poziomie szybkości szyfrowania. A jeśli pamiętasz, teoretyczne przysmaki w dziedzinie zwiększenia wydajności kodu, najprawdopodobniej nie jest to konieczne dla nikogo. 3-6 specjalistów RTT są praktycznie nie, kompilatory generalnie generują kod na poziomie 1-2,5 RTT, a główną masą programistów nie zna asemblera, a jeśli zna jego pisownię, nie rozumie, nie rozumie urządzeń współczesnych edytor. I bez tej wiedzy, że asembler, że niektóre Si-Sharp jest tam - bez różnicy.

Ale nie wszystko jest tak smutne: w "suchej pozostałości" po tygodniu bezsennych nocy istnieje nowy algorytm do wdrożenia Gost, który jest grzechem nie do patentu. I aplikacje do patentów (aż trzech) są już zdobione i złożone, więc Pan Kommersant, zbudować kolejkę - kobiety i zniżki dla dzieci.

Algorytm Gost 28147-89 i Magma Cipher (Gost R 34.12-2015)

Ogólny schemat algorytmu. Algorytm opisany przez GOST 28147-89 "System przetwarzania informacji. Ochrona kryptograficzna. Algorytm transformacji kryptograficznej "jest krajowym standardem szyfrowania symetrycznego (przed 1 stycznia 2016 r.) I jest zobowiązany do wdrożenia w certyfikowanych narzędzi do ochrony kryptograficznej informacji wykorzystywanych w systemach informacyjnych w państwie, aw niektórych przypadkach w systemach handlowych. Certyfikacja informacji o ochronie informacji kryptograficznych jest zobowiązana do ochrony informacji, które stanowią sekret państwowy Federacji Rosyjskiej, których poufność informacyjna, której wymagane jest podana zgodnie z obowiązującym prawem. Również w Federacji Rosyjskiej zaleca się stosowanie algorytmu Gost 28147-89 do ochrony systemów informacji bankowych.

Algorytm GOG 28147-89 (Rys. 2.21) opiera się na obwodzie FAISTEL i szyfruje informacje przez bloki 64 bitów, które są podzielone na dwa podgoks 32 bitów (I, oraz, oraz R). Blok R, Jest przetwarzany przez funkcję rundy konwersji, po czym jego wartość zostanie złożona z wartością LJ Sub-Block LJ, następnie subobloki są zmieniane w miejscach. Algorytm ma 16 lub 32 rund w zależności od trybu szyfrowania (IMIT obliczenia imagETP lub inne tryby szyfrowania).

Figa. 2.21.

W każdej rundzie algorytmu wykonuje się następujące transformacje.

1. Nakładka koła. TREŚCI SUB-BLOK R I. Składany Modulo 2 32 z okrągłym kluczem K. KJ. - Jest to 32-bitowa część klawisza źródłowego używana jako runda. Algorytm GOG 28147-89 NS wykorzystuje kluczową procedurę rozszerzeń, źródło 256-bitowy klucz szyfrowania jest reprezentowany jako konkatenacja (sprzęgła) osiem 32-bitowych połączeń (Rys. 2.22): K 0, K (, K T K, K A, K 5, do 6 do 7.

W procesie szyfrowania używany jest jedna z tych wtyczek. DO

Od 1 do 24 rundy - w sekwencji bezpośredniej:

Od 25., ale 32 rundy - w odwrotnej kolejności:

Figa. 2.22. Algorytm szyfrowania klucza budowlanego GOST 28147-89

2. Wymiana kart. Po nakładaniu klucza kłódki R I. Jest podzielony na osiem części, ale 4 bitów, z których wartość każdej jest osobno zastępowana zgodnie z jego tabelą zastępczą (S-Block). Używa się łącznie ośmiu bloków S - S 0, S, S 2, S3, S 4, S 5, S 6, S 7. Każdy S-Block Gost 28147-89 Algorytm jest wektor (jednowymiarowa tablica) z elementami ^ ponumerowaną od 0 do 15. Wartości bloku S to numery 4-bitowe, tj. liczby całkowite od 0 do 15.

Element jest pobierany z tabeli S-Block, której numer kolejny zbiega się z wartością, która przyszła do wejścia substytucji.

Przykład 2.6.

Niech będzie blok S następnego formularza:

Przypuśćmy do wejścia tego bloku S, wartość 0100 2 \u003d 4. Czwarty element tabeli zastępczy zostanie wypełniony wyjściem bloków S, tj. 15 \u003d 1111 2 (numeracja elementów rozpoczyna się od zera).

stary zamienne nie są zdefiniowane przez standard, jak się skończy, na przykład w Sifre Des. Wymienne wartości tabel podstawowych utrudniają algorytm cryptoanalizy. W tym samym czasie opór algorytmu znacznie zależy od ich właściwego wyboru.

Niestety, Algorytm GOG 28147-89 ma "słabe" substytucje, przy użyciu algorytmu może być dość łatwo odkryte metodami kryptanalytycznymi. "Słabe" odnosi się na przykład, trywialna tabela podstawienia, w której wejście jest równe wyjściowi (tabela 2.16).

Tabela 2.16.

Przykład słabego bloku S

Uważa się, że specyficzne wartości tabel zastępczego powinny być przechowywane potajemnie i są długotrwałym elementem kluczowym, tj. Działać przez znacznie dłuższy okres niż oddzielne klucze. Jednakże, tajne wartości tabel zastępczego nie są częścią klucza i nie może zwiększyć jego skutecznej długości.

Rzeczywiście, tajne tabele zastępcze można obliczyć przy użyciu następującego ataku, który jest praktykowany w praktyce:

  • Zainstalowany klucz zerowy i wyszukaj "zero wektor", tj. Wartości z. = F (0) gdzie. F - Algorytm funkcji konwersji okrągły. Wymaga to około 2 32 operacji szyfrowania testowego;
  • Korzystając z wektora zerowego, wartości tabel zastępczych są obliczane, co wymaga nie więcej niż 2 11 operacji.

Jednak nawet jeśli poufność tabel zastępczy zostaje naruszona, szyfr pozostaje niezwykle wysoka i nie staje się niższa niż dopuszczalny limit.

Zakłada się również, że tabele podstawowe są wspólne dla wszystkich witryn szyfrowania w ramach jednego systemu ochrony kryptograficznej.

Poprawa struktury bloków S jest jednym z najbardziej intensywnych badanych problemów w dziedzinie symetrycznych szyfrów blokowych. W istocie wymaga, aby wszystkie zmiany w wejść bloków S są wlewane do losowy na rodzaj zmiany wyjścia. Z jednej strony, większe bloki S, bardziej stabilny algorytm metod liniowej i różnicowej kryptanalizy. Z drugiej strony, duży stół podłoża jest bardziej skomplikowany do projektowania.

W nowoczesnych algorytmach bloków S są zazwyczaj wektorowym (dwuznaną tablicą) zawierającą 2 "T-elementy bitowe. Wejście blokowe określa numer elementu, którego wartość jest wyjściem bloku S.

Dla projektu bloków S umieszczono kilka kryteriów. Tabela wymiany musi spełnić:

  • ścisłe kryterium lawinowe;
  • Kryterium niezależności bitów;
  • Wymóg nieliniowości z wartości wejściowych.

Aby spełnić ostatnie wymaganie, zaproponowano, aby ustawić kombinację liniową jA. bitów ( i \u003d. 1, ..., t) Wartości tabeli wymiany bentfunkcje (pol, wygięty - Dezystanowanie w tym przypadku, z funkcji liniowych). Bent Funkcje tworzą specjalną klasę funkcji boolowskich charakteryzujących się najwyższą klasą nieliniowości i korespondencji ścisłego kryterium lawinowego.

W niektórych dziełach dla S-Blocks zaproponowano, aby sprawdzić wykonanie gwarantowanego efektu lawinowego zamówienia w - po zmianie w jednej zmianie bitów wejściowych zmienia się co najmniej bity wyjściowe zmian S-bloku S. Właściwość gwarantowanego efektu lawinowego zamówienia od 2 do 5 zapewnia wystarczająco dobre cechy dyfuzji bloków S dla dowolnego algorytmu szyfrowania.

Przy projektowaniu wystarczająco dużych podstawień można stosować następujące podejścia:

  • Wybór losowy (dla bloków S małego rozmiaru może prowadzić do tworzenia słabej substytucji);
  • wybór losowy z późniejszym testem dla zgodności z różnymi kryteriami i odrzuceniem słabych bloków S;
  • Wybór ręczny (dla bloków S dużych rozmiarów jest zbyt czasochłonny);
  • Podejście matematyczne, takie jak generacja przy użyciu wygiętych funkcji (podejście to jest stosowane w algorytmie odlewu).

Możesz zaproponować następującą procedurę projektowania poszczególnych bloków S GOST 28147-89 algorytmu:

  • Każdy blok S może być opisany przez cztery funkcje logiczne, każda z funkcji powinna mieć cztery argumenty logiczne;
  • Konieczne jest, aby funkcje te są dość skomplikowane. Wymóg trudności nie można wyrazić formalnie, jednak może być wymagany jako warunek niezbędny, że odpowiednie funkcje logiczne odnotowane w formularzu minimalnym (tj. Minimalną możliwą długość ekspresji) przy użyciu podstawowych operacji logicznych nie były krótsze niż jakaś wymagana wartość ;
  • Oddzielne funkcje, nawet używane w różnych tabelach zastępczych, powinny być w wystarczającym stopniu.

W 2011 r. Zaproponowano nowe spotkanie odblaskowe w środku ", nieznacznie zmniejszona wytrwałość Gost 28147-89 (od 2256 do 2225). Najlepsze wyniki kryptanalizy algorytmu od 2012 r. Zmniejsza swoją odporność na 2 192, wymagające stosunkowo dużej wielkości szyfertekstu i ilości wstępnie utworzonych danych. Pomimo proponowanych ataków, na obecnym poziomie rozwoju sprzętu komputerowego, GOST 28147-89 zachowuje praktyczny odporność.

Szyfr "Magma" (GOST R 34.12-2015).Standardowy Gost 28147-89 działał w Rosji od ponad 25 lat. W tym czasie wykazał wystarczającą odporność i dobrą skuteczność implementacji oprogramowania i sprzętu, w tym na urządzeniach niskiego przejścia. Chociaż zaproponowano ataki kryptanalityczne, co zmniejsza swoje szacunki trwałości (najlepsze - do 2 192), są one daleko od możliwości praktycznej realizacji. Dlatego zdecydowano, że uwzględniono algorytm GOG 28147-89 w nowo opracowany standard szyfrowania symetrycznego.

W sklepie 2015 przyjęto dwa nowe krajowe standardy kryptograficzne: Gost R 34.12-2015 "Technologia informacyjna. Ochrona informacji kryptograficznych. Szyfry blokowe "i Gost R 34.13-2015" Technologia informacyjna. Ochrona informacji kryptograficznych. Tryby działania szyfrów blokowych ", które wchodzą w życie 1 stycznia 2016 r

Standardowy GOST R 34.12-2015 zawiera opis dwóch szyfrów blokowych o długości blokowej 128 i 64 bitów. SIFR GOST 28147-89 z stałymi blokami substytucji nieliniowej jest zawarty w nowej GOST R 34.12-2015 jako 64-bitowy szyfr zwany "Magma" ("Magma").

Poniżej znajdują się bloki zamienne w standardu:

Zestaw bloków S podanych w normie zapewnia najlepsze cechy, które określają wytrwałość kryptoalorgorytm do korptanalizy różnicowej i liniowej.

Według Komitetu Technicznego w sprawie standaryzacji ochrony kryptograficznej informacji (TC 26), utrwalanie bloków substytucji nieliniowej sprawi, że algorytm Gost 28147-89 bardziej ujednolicona i pomoże wykluczyć stosowanie "słabych" bloków substytucja nieliniowa. Ponadto, fiksacja w standardach wszystkich długoterminowych parametrów szyfr jest odpowiedzialna za przyjętą praktykę międzynarodową. Nowy standardowy GOT R 34.12-2015 jest terminologicznie i koncepcyjnie związany z międzynarodowymi standardami technologiami informacyjnymi ISO / IEC 10116 ". Metody bezpieczeństwa. Tryby działania dla "-bit Ciphers Ciphers" (ISO / IEC 10116: 2006 Technology informacyjne - techniki bezpieczeństwa - Tryby pracy dla technologii informacyjnych bloków N-bitowych) i serii ISO / IEC 18033 serii ". Metody i narzędzia bezpieczeństwa. Algorytmy szyfrowania ": ISO / IEC 18033-1: 2005" Część 1. Ogólne "(ISO / IEC 18033-1: 2005 Technology informacyjne - techniki bezpieczeństwa - algorytmy szyfrowania - Część 1: Ogólne) i ISO / IEC 18033-3: 2010 "Część 3. Cyfery blokowe" (ISO / IEC 18033-3: 2010 (Technology informacyjne - Algorytmy szyfrowania - Część 3: Cyfery blokowe)).

Standard Gost P 34.12-2015 zawiera również nowy szyfr blokowy ("konik polny") z wielkością bloku 128 bitów. Oczekuje się, że ten szyfr będzie odporny na wszystkie ataki na dzisiejsze ataki na szyfry blokowe.

Tryby działania szyfrów blokowych (prosta wymiana, Gamming, Feedback Gaming, Feedback, Siprotext Feedback Gamming, po prostu zastępując zaangażowaniem i produkcją imitavage) są usuwane w odrębnym standardzie R. 34.13-2015, co odpowiada międzynarodowym międzynarodowym międzynarodowym ćwiczyć. Tryby te mają zastosowanie zarówno do szyfrowania "Magma", jak i do nowego szyfru "Grasshopper".

  • Przeprowadzi się bitowa cykliczna zmiana w lewo od 11 bitów. Odszyfrowanie przeprowadza się w tym samym schemacie, ale z innym harmonogramem użycia klawiszy: od 1 do 8 rundy deszyfrowania - w linii: od 9 do 32. rundy deszyfrowania - w odwrotnej kolejności: w porównaniu Do Sipera Des w Gost 28147-89 istnieją następujące zalety: znacznie dłuższy klucz (256 bitów w porównaniu z 56 w Sifra Des), atak, na który przez całkowitą integralność zestawu klucza na dim amomant jest niemożliwy; Prosty harmonogram wykorzystania klucza, który upraszcza wdrażanie algorytmu i zwiększa prędkość obliczania. Projektowanie bloków S GOP 28147-89. Oczywiście schemat algorytmu Gost 28147-89 jest dość prosty. Oznacza to, że największe obciążenie szyfrowania spada na tabelę zastępczą. Wartości kart
  • Panasepko S. P. Algorytmy szyfrowania: Katalog specjalny. SPB.: BHV-Peter-Burg, 2009.
  • Kara O. Ataki refleksji na szyfry produktów. URL: http://eprint.iacr.org/2007/043.pdf.
  • Rosyjski standard szyfrowania: zmniejszona opór. URL: http://cryptofaq.ru/index.php/2010-12-23-18-20-21/2010-12-23-22-09/90-2011-01-01-07-47- 27.
  • Achekseyev E. K., Schdslyaev S. V. GOST 28147-89: "Nie spiesz się, by go pochować".

Algorytm zdefiniowany przez GOST 28147-89 ma długość klucza szyfrowania 256 bitów. Szyfruje informacje przez bloki 64 bitów (takie algorytmy nazywane blokami), które są następnie podzielone na dwa podskokowe 32 bitów (N1 i N2) (Rysunek 1). Podciąg N1 jest przetwarzany w określony sposób, po którym jego wartość zostanie złożona przy wartości podstroku N2 (dodanie przeprowadza się przez moduł 2, tj. Operacja Logika XOR jest używana - "z wyłączeniem lub"), a następnie sub -Bloki są zmieniane w miejscach. Ta transformacja jest wykonywana pewną liczbę razy ("rundy"): 16 lub 32, w zależności od sposobu działania algorytmu. W każdej rundzie wykonuje dwie operacje.

Rysunek 1. Schemat algorytmu Gost 28147-89.

Pierwszy to nałożenie klucza. Zawartość składania podrzędnych N1 w module 2 z 32-bitową częścią klawisza KX. Kompletny klucz szyfrowania jest reprezentowany jako połączenia 32-bitowe włączania: K0, K1, K2, K3, K4, K5, K6, K7. Podczas procesu szyfrowania używany jest jedna z tych wtyczek - w zależności od numeru okrągłego i trybu działania algorytmu.

Druga operacja - wymiana tabelaryczna. Po zastosowaniu klucza podblok N1 jest podzielony na 8 części 4 bitów, z których każdy jest wymieniany zgodnie z tabelą zastępczą dla tej części podboku. Następnie przeprowadzono cykliczne przesunięcie bitowego podkomorowania pozostawionego do 11 bitów.

Wymiana tabeli (pola podstawowa) są często stosowane w nowoczesnych algorytmach szyfrowania, więc konieczne jest wyjaśnienie, jak taka operacja jest zorganizowana. Wartości wyjściowe tabeli są rejestrowane w tabeli. Blok danych o wymiarze określonym (w naszym przypadku - 4-bit) ma własną reprezentację numeryczną, która określa liczbę wartości wyjściowej. Na przykład, jeśli S-Box ma formularz 4, 11, 2, 14, 15, 0, 8, 13, 3, 12, 9, 7, 5, 10, 6, 1, 7, 5, 10, 6, 1, 4-bitowy blok "0100 "Przyszedł do wejścia (wartość 4), zgodnie z tabelą, wartość wyjściowa będzie równa 15, tj." 1111 "(0 A 4, 1 A 11, 2 A 2 ...).

Algorytm, zdefiniowany przez GOST 28147-89, zapewnia cztery tryby działania: prostą wymianę, gamamowanie, denerwowanie sprzężenia zwrotnego i generacji Imithods. Używają tej samej transformacji szyfrowania opisanej powyżej, ale ponieważ cel trybów jest inny, ta konwersja przeprowadza się w każdym z nich na różne sposoby.

W trybie prostym zamiennym, 32 opisane rundy opisane powyżej są wykonywane w prostocie każdego 64-bitowego informacji. W tym samym czasie wtyczka 32-bitowa jest używana w następującej sekwencji:

K0, K1, K2, K3, K4, K5, K6, K7, K0, K1 itp. - w rundach od 1 do 24;

K7, K6, K5, K4, K3, K2, K1, K0 - w rundach od 25 do 32..

Odszyfrowanie w tym trybie przeprowadza się w ten sam sposób, ale z nieco inną sekwencją zastosowania połączenia:

K0, K1, K2, K3, K4, K5, K6, K7 - w rundach od 1 do 8;

K7, K6, K5, K4, K3, K2, K1, K0, K7, K6 itp. - w rundach od 9 do 32.

Wszystkie bloki są szyfrowane niezależnie od siebie, tj. Wynik szyfrowania każdego bloku zależy tylko od jego zawartości (odpowiedni blok tekstu źródłowego). Jeśli istnieje kilka identycznych bloków oryginalnego (otwartego) tekstu, odpowiednie bloki CIPHERTEXT będą również takie same, co zapewnia dodatkowe przydatne informacje, aby uzyskać do otwarcia Ciphery Cryptoanalitics. Dlatego ten tryb jest używany głównie do szyfrowania kluczy szyfrowania (wiele schematów jest bardzo często wdrażane, w których klucze są szyfrowane na sobie). Do szyfrowania samej informacji, są przeznaczone dwa inne tryby działania - dyplom i przewozowe Gamming.

W trybie obrazowania Gamm każda otwarta jednostka tekstowa jest zablokowana przez moduł 2 z 64-bitowym bloku gamma szyfru. Gamma Cipher jest specjalną sekwencją, która prowadzi do niektórych operacji z rejestrami N1 i N2.

  • 1. W rejestrach N1 i N2 ich początkowe napełnianie jest rejestrowane - 64-bitowa wartość zwana syncopionel.
  • 2. Szyfrowany jest zawartością rejestrów N1 i N2 (w tym przypadku - syncroptery) w prostym trybie wymiany.
  • 3. Zawartość rejestru N1 polega na module (232 - 1) ze stałą C1 \u003d 224 + 216 + 28 + 24, a wynikem dodawania jest rejestrowany w rejestrze N1.
  • 4. Zawartość rejestru N2 jest utworzona przez moduł 232 ze stałą C2 \u003d 224 + 216 + 28 + 1, a wynikiem dodawania jest zapisywany do rejestru N2.
  • 5. Zawartość rejestrów N1 i N2 podawana jest do wyjścia jako 64-bitowy blok gamma szyfru (w tym przypadku, N1 i N2 tworzą pierwszy blok gamma).

Jeśli wymagany jest następny blok gamma (I.e. konieczne jest kontynuowanie szyfrowania lub deszyfrowania), powraca do pracy 2.

Aby odszyfrować gamma, jest produkowany w podobny sposób, a następnie operacja XOR jest ponownie stosowana do kawałków zaszyfrowanego tekstu i gamma. Ponieważ ta operacja jest odwracalna, w przypadku prawidłowo wygenerowanej gamma, otrzymuje się tekst źródłowy (tabela 1).

Tabela 1.Szyfrowanie i deszyfrowanie w trybie Gamming

Aby opracować szyfę użytkownika, ten sam klucz, ten sam klucz i taką samą wartość drona synchronizacji, które były używane podczas szyfrowania informacji, powinno być tym samym kluczem. W przeciwnym razie nie będzie możliwe uzyskanie tekstu źródłowego z zaszyfrowanego.

W większości wdrażania algorytmu Gost 28147-89, synkopista nie jest tajemnicą, ale są systemy, w których synklopista jest tym samym tajnym elementem, co klucz szyfrowania. W przypadku takich systemów skuteczna długość klucza algorytmu (256 bitów) wzrasta o kolejne 64 bitów sekretnych synchronizacji, które można również uznać za kluczowy element.

W trybie Gamming sprzężenia zwrotnego, aby wypełnić rejestry N1 i N2, począwszy od drugiego bloku, a nie poprzedniego bloku gamma, ale wynik szyfrowania poprzedniego bloku otwartego tekstu (Rysunek 2). Pierwszy blok w tym trybie jest generowany przez poprzednio podobny do poprzedniego.

Rysunek 2. Rozwój Cipher Gamma w trybie Gamming Feedback.

Biorąc pod uwagę sposób generowania jednocześnie, konieczne jest określenie koncepcji obiektu pokolenia. IMITROBRISTENING to suma kontrolna kryptograficzna obliczona przy użyciu klucza szyfrowania i przeznaczona do sprawdzania integralności wiadomości. Podczas generowania Imithaod wykonuje się następujące operacje: pierwsza 64-bitowa jednostka tablicy informacyjnej, dla której obliczana jest uproszczenie, jest zapisywana do rejestrów N1 i N2 i zaszyfrowany w skróconym trybie prostej wymiany (pierwsze 16 rund 32 są wykonywane). Uzyskany wynik jest podsumowany przez moduł 2 z następującym blokiem informacji przy zachowaniu wyniku w N1 i N2.

Cykl powtarza się do ostatniego bloku informacji. W wyniku tych transformacji, 64-bitowy zawartość rejestrów N1 i N2 lub jej części i nazywana jest prostotą. Rozmiar uproszczenia jest wybrany, w oparciu o wymaganą niezawodność wiadomości: Przy długości Simpstab, Bit R jest prawdopodobieństwem, że zmiana w wiadomości pozostanie niezauważona, równa 2-R. 32-bit Symprystening jest używany, czyli połowę treści rejestrów. Jest to wystarczające, ponieważ jako dowolną kontrolę, Imiton został zaprojektowany przede wszystkim do ochrony przed losowymi zakłóceniami informacji. Aby chronić te same dane do celowej modyfikacji danych, stosuje się inne metody kryptograficzne - przede wszystkim elektroniczny podpis cyfrowy.

Podczas wymiany informacji simpristenger jest rodzajem dodatkowego sposobu kontroli. Jest obliczany dla otwartego tekstu, gdy zaszyfrowałem wszelkie informacje i jest wysyłane wraz z CipHertekstem. Po odszyfrowaniu obliczana jest nowa wartość imitacyjna wartość, która jest porównywana z wysłanymi. Jeśli wartości nie pasują - oznacza to, że CipHertekst został zniekształcony podczas transmisji lub gdy odszyfrowanie użyto nieprawidłowych kluczy. Uproszczenie jest szczególnie przydatne w celu weryfikacji poprawnego odszyfrowania kluczowych informacji podczas korzystania z wielu schematów.

Algorytm GOG 28147-89 jest uważany za bardzo silny algorytm - obecnie nie proponuje się bardziej wydajnych metod w celu ujawnienia niż "siła gruba wymieniona powyżej. Jego wysoka odporność osiąga się głównie ze względu na dużą długość kluczową - 256 bitów. Podczas stosowania tajnych synkopiów, efektywna długość kluczowa wzrasta do 320 bitów, a sektor tabeli substytucyjnych dodaje dodatkowe bitów. Ponadto opór kryptost zależy od liczby rund transformacji, które według Gost 28147-89 powinno wynosić 32 (pełny wpływ dyspersji danych wejściowych jest osiągnięty po 8 rundach).

Zalety Gost 28147-89 są obecnością ochrony przed narzucaniem fałszywych danych (produkcja Imitava) i tego samego cyklu szyfrowania we wszystkich czterech algorytmach Gost.

DES krajowy standard szyfrowania jest wygodniejszy do wdrożenia oprogramowania.

W przeciwieństwie do amerykańskiego DES w standardzie krajowym, zastosowano dłuższy klucz - 256 bitów. Ponadto rosyjski standard proponuje użycie 32 rundy szyfrowania, podczas gdy des wynosi tylko 16.

Zatem główne parametry algorytmu transformacji kryptograficznej dla Gost 28147-89 są następujące: Rozmiar bloku to 64 bitów, rozmiar klucza to 256 bitów, liczba rund wynosi 32.

Algorytm jest klasyczną siecią łańcuchową. Zaszyfrowany blok danych jest podzielony na dwie identyczne części, prawy R i lewy L. po prawej stronie jest złożona z podłączeniem rundy i przez pewien algorytm szyfruje lewą część. Przed następną rundą lewe i prawe części są zmieniane w miejscach. Taka struktura umożliwia stosowanie tego samego algorytmu zarówno dla szyfrowania, jak i odszyfrowania bloku.

W algorytmie szyfrowania stosuje się następujące operacje:

  • regulacja słów przez moduł 2 32;
  • cykliczna zmiana słowa w lewo do określonej liczby bitów;
  • moduł 2;
  • wymiana na stole.

W różnych etapach algorytmów Gost danych działają, są interpretowane i są używane na różne sposoby. W niektórych przypadkach elementy danych są przetwarzane jako tablice niezależnych bitów, w innych przypadkach - jako liczbę całkowitą bez znaku, w trzecim, jako element złożony strukturą składającą się z kilku prostszych elementów.

Okrągła struktura GOST 28147-89

Struktura jednej rundy Gost 28147-89 jest pokazana na FIG. 5.1.

Zaszyfrowany blok danych jest podzielony na dwie części, które są następnie przetwarzane jako oddzielne 32-bitowe liczby całkowite bez znaku. Po pierwsze, w prawej połowie bloku i lokalizacja rundy jest składana przez moduł 2 32. Następnie dokonane jest podstawienie bloku. Wartość 32-bitowa uzyskana w poprzednim etapie (oznaczanie IT) jest interpretowane jako tablica ośmiu 4-bitowych bloków kodu: S \u003d (S 0, S 1, S 2, S 3, S 4, S 5, S 6, S 7). Następnie wartość każdego z ośmiu bloków jest zastępowana nową, która jest wybierana przez tabelę podstawień w następujący sposób: Wartość bloku I zostaje zastąpiona przez I-Th, w celu elementu (numerowanie od zera ) Węzeł I-TH zastępczy (tj. Stoły zastępcze linii I-TH, numerowanie również od podstaw). Innymi słowy, jest wybrany jako zastępowanie wartości bloku numeru bloku z numeriem numeru równą liczbie zastępowanej bloku, a numer kolumny równy wartości zastępowania bloku jako 4-bit liczba całkowita nieustwowa liczba. W każdym wierszu tablicy zastępczej liczba jest rejestrowana od 0 do 15 w dowolnej kolejności bez powtórzeń. Wartości elementów tabel zastępujących są pobierane od 0 do 15, jak w czterech bitach, które podlegają substytucji, liczba całkowita może być rejestrowana bez znaku w zakresie od 0 do 15. Na przykład pierwszy ciąg S-bloku S może zawierać takie wartości: 5, 8, 1, 13, 10, 3, 4, 2, 14, 15, 12, 7, 6, 0, 9, 11 . W tym przypadku wartość bloku S 0 (cztery młodsze bitowe numery s) zostaną zastąpione przez numer, który stoi w pozycji, której liczba jest równa wartości wymiennego bloku. Jeśli s 0 \u003d 0, zostanie on zastąpiony przez 5, jeśli s 0 \u003d 1, zostanie on zastąpiony przez 8 itd.


Figa. 5.1.

Po ustaleniu zastępowania wszystkie 4-bitowe bloki ponownie łączyły się w pojedyncze 32-bitowe słowo, które są następnie cyklicznie przesuwane o 11 bitów w lewo. Wreszcie, używając złamanej operacji "Suma modułu 2" Wynik jest połączony z lewą połową, w wyniku czego otrzymuje się nowa prawy połowa R I. Nowa część lewica L i jest pobierana równa najmłodszej części konwertowanej jednostki: l i \u003d r i-1.

Uzyskana wartość transformowanego bloku jest uważana za wynik wykonania jednej rundy algorytmu szyfrowania.

Procedury szyfrowania i deszyfrowania

GOST 28147-89 to szyfr blokowy, więc konwersja danych przeprowadzane przez bloki w tzw podstawowe cykle.. Podstawowe cykle są wielokrotnie wykonywane dla bloku danych głównej rundy, omówione przez nas wcześniej, przy użyciu różnych elementów kluczowych i różnią się od siebie kolejnością przy użyciu kluczowych elementów. Każda runda jest używana jeden z ośmiu możliwych połączeń 32-bitowych.

Rozważ proces tworzenia okrągły wtyczki. W GOST ta procedura jest bardzo prosta, zwłaszcza w porównaniu z des. Klawisz 256-bitowy K jest podzielony na osiem 32-bitowych połączeń, oznaczonych K 0, K 1, K2, K3, K4, K 5, K 6, K 7. Algorytm obejmuje 32 rund, więc każda wtyczka szyfrowania jest używana w czterech rundach w sekwencji prezentowanej na tabeli 5.1.

Tabela 5.1. Sekwencja połączenia z szyfrowaniem
Okrągły 1 2 3 4 5 6 7 8
Pełna konstrukcja K 0. K 1. K2. K 3. K 4. K 5. K 6. K 7.
Okrągły 9 10 11 12 13 14 15 16
Pełna konstrukcja K 0. K 1. K2. K 3. K 4. K 5. K 6. K 7.
Okrągły 17 18 19 20 21 22 23 24
Pełna konstrukcja K 0. K 1. K2. K 3. K 4. K 5. K 6. K 7.
Okrągły 25 26 27 28 29 30 31 32
Pełna konstrukcja K 7. K 6. K 5. K 4. K 3. K2. K 1. K 0.

Proces deszyfrujący jest wykonany na tym samym algorytmie jako szyfrowanie. Jedyną różnicą jest użycie połączenia k i. Podczas dekodowania wtyczki należy stosować w odwrotnej kolejności, a mianowicie, jak wskazano

Dzwon.

Są ci, którzy przeczytali tę wiadomość przed tobą.
Subskrybuj odbieranie artykułów świeżych.
E-mail
Nazwa
Nazwisko
Jak chcesz przeczytać dzwonek
Bez spamu