SHA-3
Ilustracja
Architektura „gąbki” w algorytmie Keccak
Rodzaj algorytmu

kryptograficzna funkcja skrótu

Data stworzenia

2012

Autorzy

Guido Bertoni, Joan Daemen, Michaël Peeters, Gilles Van Assche

SHA-3 (Secure Hash Algorithm 3) – kryptograficzna funkcja skrótu wyłoniona w 2012 roku w ramach konkursu ogłoszonego przez amerykański NIST[1].

Historia

edytuj

Konkurs na SHA-3 rozpoczął się w 2009 roku. Zgłoszono do niego 30 kandydatów[2]. W 2012 roku NIST wyłonił jako zwycięzcę algorytm Keccak[3].

Charakterystyka

edytuj

Algorytm Keccak charakteryzuje się wyższą wydajnością niż SHA-2 zarówno w implementacjach sprzętowych jak i programowych (różnica sięga 25-80% w zależności od procesora i implementacji)[4]. Keccak ma architekturę „gąbki” (ang. sponge construction) — bloki wejściowe są stopniowo „wchłaniane” w kolejnych etapach i mieszane z dużym rejestrem stanu. Blok wyjściowy jest konstruowany w podobny sposób, przez „wyciskanie” kolejnych fragmentów danych wyjściowych z rejestru stanu, wielokrotnie go mieszając pomiędzy wyciskanymi blokami. Wchłanianie i wyciskanie odbywa się na małej części rejestru stanu poprzez wykonanie funkcji binarnej alternatywy wykluczającej (xor) z danymi wejściowymi lub odczyt tej samej małej części przy odczycie danych wyjściowych. Pozostała część stanu nigdy nie jest bezpośrednio używana do konstrukcji danych wyjściowych ani nie oddziałuje bezpośrednio z danymi wejściowymi.

Funkcja mieszająca stanu (funkcja f na rysunku), składa się z wielokrotnej aplikacji funkcji rundy (do 24 razy w przypadku największej wersji algorytmu). Każda runda z kolei składa się z kompozycji 5 prostych i wydajnych w implementacji funkcji, które dokonują odwracalnych permutacji, rotacji, mieszań albo dyfuzji. Ostatnia z tych funkcji w rundzie dodatkowo jest parametryzowana stałą wartością zależną od numeru rundy (i wersji algorytmu) w celu usunięcia symetrii z funkcji rundy.

Dane wejściowe są dopełniane do całkowitej wielokrotności liczby bitów w pojedynczym bloku przy pomocy prostego schematu dopełniania zwanego „101”: do ciągu danych wejściowych w postaci ciągu binarnego dopisz bit o wartości 1, następnie bity o wartości 0, aż do przedostatniego bitu w pełnym bloku, następnie dopisz bit o wartości 1 dopełniając blok całkowicie.

Implementacje

edytuj

Dostępne są implementacje w językach: C/C++, Java, VHDL, Python[5], Rust[6], Cryptol[7], .NET C#, PHP[8].

Przypisy

edytuj
  1. NIST Selects Winner of Secure Hash Algorithm (SHA-3) Competition. National Institute of Standards and Technology, 2012.
  2. Trzydziestu kandydatów do SHA-3. IPSec.pl, 4 listopada 2009. [dostęp 2012-10-09]. [zarchiwizowane z tego adresu (11 lutego 2011)].
  3. Guido Bertoni, Joan Daemen, Michaël Peeters, Gilles Van Assche: The Keccak sponge function family.
  4. Thomas Pornin: Comparative Performance Review of the SHA-3 Second-Round Candidates. 2010.
  5. Software and other files. The Keccak sponge function family.
  6. libOctavo/octavo.
  7. Alfonso De Gregorio: Untwisted: A Cryptol Implementation of Keccak – Part 1. 2011. [dostęp 2012-10-09]. [zarchiwizowane z tego adresu (2013-04-07)].
  8. PHP: hash - Manual [online], www.php.net [dostęp 2026-02-11] (ang.).

📚 Artikel Terkait di Wikipedia

LZ77

przez Abrahama Lempela i Ja’akowa Ziwa i opisany w artykule A universal algorithm for sequential data compression opublikowanym w IEEE Transactions on Information

Algorytm Euklidesa

 Weisstein Eric W.E.W., Euclidean Algorithm, [w:] MathWorld, Wolfram Research [dostęp 2020-12-12]  (ang.). Euclidean algorithm (ang.), Encyclopedia of Mathematics

IPsec

and AH RFC 2405 ↓: The ESP DES-CBC Cipher Algorithm With Explicit IV RFC 2410 ↓: The NULL Encryption Algorithm and Its Use With IPsec RFC 2451 ↓: The ESP

Data Encryption Standard

1981 standard ANSI dla sektora prywatnego (znany jako Data Encryption Algorithm). Od kilku lat uznawany jest za algorytm niezapewniający odpowiedniego

Algorytm

Algorytmy numeryczne. nr.com. [zarchiwizowane z tego adresu (2018-08-25)]. Algorithm (ang.), Encyclopedia of Mathematics, encyclopediaofmath.org [dostęp 2025-04-23]

C++11

jeden z dwóch proponowanych algorytmów (algorithm.do_it): // Pierwszy sposób. template< bool B > struct algorithm { template< class T1, class T2 > int do_it(

Sortowanie bąbelkowe

elementy tablicy numerowane są od 0 do n - 1. #include <iostream> #include <algorithm> void bubble_sort(int tab[], int n) { for (int i = 0; i < n - 1; ++i)

Biegun niedostępności

UmbertoU. Lombardo UmbertoU., Poles of inaccessibility: A calculation algorithm for the remotest places on earth, „Scottish Geographical Journal”, 123