# SHA-3

SHA-3 (Secure Hash Algorithm 3) és l'últim membre de la família d'estàndards Secure Hash Algorithm, publicat pel NIST el 5 d'agost de 2015. Encara que forma part de la mateixa sèrie d'estàndards, SHA-3 és internament diferent de l'estructura semblant a MD5 de SHA-1 i SHA-2.
SHA-3 és un subconjunt de la família primitiva criptogràfica més àmplia Keccak (/ˈkɛtʃæk/ o /ˈkɛtʃɑːk/), dissenyada per Guido Bertoni, Joan Daemen, Michaël Peeters, i Gilles Van Assche, basat en RadioGatún. Els autors de Keccak han proposat usos addicionals per a la funció, no (encara) estandarditzats pel NIST, incloent un xifrat de flux, un sistema de xifratge autenticat, un esquema de hash "arbre" per a un hash més ràpid en determinades arquitectures, i xifratge AEAD. Keyak i Ketje.
Keccak es basa en un nou enfocament anomenat construcció d'esponges. La construcció de l'esponja es basa en una funció aleatòria àmplia o permutació aleatòria, i permet introduir ("absorbir" en terminologia de l'esponja) qualsevol quantitat de dades i emetre ("prémer") qualsevol quantitat de dades, alhora que actua com una funció pseudoaleatoria pel que fa a totes les entrades anteriors. Això comporta una gran flexibilitat.
Actualment, el NIST no té previst retirar SHA-2 ni eliminar-lo de l'estàndard Secure Hash revisat. L'objectiu de SHA-3 és que es pugui substituir directament per SHA-2 a les aplicacions actuals si cal, i millorar significativament la robustesa del conjunt d'eines d'algorisme hash del NIST.
Per a mides de missatges petites, els creadors dels algorismes Keccak i de les funcions SHA-3 suggereixen utilitzar la funció més ràpida KangarooTwelve amb paràmetres ajustats i un nou mode hashing d'arbre sense sobrecàrrega addicional.

## Història

L'algoritme de Keccak és obra de Guido Bertoni, Joan Daemen (que també va dissenyar conjuntament el xifrat de Rijndael amb Vincent Rijmen), Michaël Peeters i Gilles Van Assche. Es basa en dissenys anteriors de funcions hash PANAMA i RadioGatún. PANAMA va ser dissenyat per Daemen i Craig Clapp el 1998. RadioGatún, successor de PANAMÀ, va ser dissenyat per Daemen, Peeters i Van Assche, i es va presentar al NIST Hash Workshop el 2006. El codi font de la implementació de referència es va dedicar al domini públic mitjançant l'exempció CC0.
L'any 2006, el NIST va començar a organitzar el concurs de funcions hash NIST per crear un nou estàndard hash, SHA-3. SHA-3 no està pensat per substituir SHA-2, ja que no s'ha demostrat cap atac significatiu a SHA-2. A causa dels atacs reeixits a MD5, SHA-0 i SHA-1, NIST va percebre la necessitat d'un hash criptogràfic alternatiu i diferent, que es va convertir en SHA-3.

## Disseny

SHA-3 utilitza la construcció d'esponja, en la qual les dades s'"absorbeixen" a l'esponja, i després el resultat s'"esprem". En la fase d'absorció, els blocs de missatges es transformen XOR en un subconjunt de l'estat, que després es transforma com un tot mitjançant una funció de permutació. $f$. (Trucant $f$ una permutació pot ser confusa. Tècnicament és una permutació de l'espai d'estats, per tant una permutació d'un conjunt amb $2^{1600}\approx 4.4\cdot 10^{481}$ elements, però fa més que només permutar els bits del vector d'estat). En la fase de "estrenyir", els blocs de sortida es llegeixen del mateix subconjunt de l'estat, alternats amb la funció de transformació d'estat $f$. La mida de la part de l'estat que s'escriu i llegeix s'anomena "taxa" (indicada $r$), i la mida de la part que no es toca per l'entrada/sortida s'anomena "capacitat" (indicada $c$). La capacitat determina la seguretat de l'esquema. El nivell de seguretat màxim és la meitat de l'aforament.

## Acceleració de maquinari

Els nuclis de CPU SoC de sis nuclis Apple A13 ARMv8 tenen suport per accelerar SHA-3 (i SHA-512) mitjançant instruccions especialitzades (EOR3, RAX1, XAR, BCAX) del conjunt d'extensió criptogràfica ARMv8.2-SHA.
Algunes biblioteques de programari utilitzen instal·lacions de vectorització de CPU per accelerar l'ús de SHA-3. Per exemple, Crypto++ pot utilitzar SSE2 a x86 per accelerar SHA3, i OpenSSL també pot utilitzar MMX, AVX-512 o AVX-512VL en molts sistemes x86. També les CPU POWER8 implementen una rotació vectorial de 2x64 bits, definida a PowerISA 2.07, que pot accelerar les implementacions SHA-3. La majoria de les implementacions per a ARM no utilitzen instruccions vectorials Neon, ja que el codi escalar és més ràpid. Tanmateix, les implementacions ARM es poden accelerar utilitzant instruccions vectorials SVE i SVE2; aquests estan disponibles a la CPU Fujitsu A64FX, per exemple.
L'IBM z/Architecture admet SHA-3 des del 2017 com a part de l'extensió Message-Security-Assist 6. Els processadors admeten una implementació completa de tots els algorismes SHA-3 i SHAKE mitjançant les instruccions KIMD i KLMD mitjançant un motor d'assistència de maquinari integrat a cada nucli.

## Referències

* ↑ «Hash Functions» (en anglès). NIST, 22-06-2020. [Consulta: 17 febrer 2021].
* ↑ NIST "SHA-3 Standard: Permutation-Based Hash and Extendable-Output Functions", 01-08-2015. DOI: 10.6028/NIST.FIPS.202 [Consulta: 29 febrer 2020].
* ↑ Dworkin, Morris J. Federal Inf. Process. STDS. (NIST FIPS), 04-08-2015.
* ↑ «NIST Selects Winner of Secure Hash Algorithm (SHA-3) Competition» (en anglès). NIST, 02-10-2012. [Consulta: 2 octubre 2012].
* ↑ Cruz, José R.C. «Keccak: The New SHA-3 Encryption Standard» (en anglès). Dr. Dobbs, 07-05-2013.
* ↑ Bertoni, Guido. «Keccak specifications summary» (en anglès). [Consulta: 27 març 2023].
* ↑ Chang, Shu-jen; Perlner, Ray; Burr, William E.; Sonmez Turan, Meltem; Kelsey, John M. "Third-Round Report of the SHA-3 Cryptographic Hash Algorithm Competition", 01-11-2012. DOI: 10.6028/NIST.IR.7896 [Consulta: 29 febrer 2020].
* ↑ Bertoni, Guido. «CAESAR submission: Ketje v1» (en anglès), 13-03-2014. [Consulta: 29 febrer 2020].
* ↑ Bertoni, Guido. «CAESAR submission: Keyak v1» (en anglès), 13-03-2014. [Consulta: 29 febrer 2020].
* ↑ Bertoni, Guido. «The sponge and duplex constructions» (en anglès). [Consulta: 27 març 2023].
* ↑ «Announcing Request for Candidate Algorithm Nominations for a New Cryptographic Hash Algorithm (SHA-3) Family [U.S. Federal Register Vol. 72 No. 212)]» (en anglès), 02-11-2007. Arxivat de l'original el 31 març 2011. [Consulta: 18 juliol 2017].
* ↑ Bertoni, Guido. «The road from Panama to Keccak via RadioGatún» (en anglès). [Consulta: 27 març 2023].
* ↑ Stevens, Marc. «The first collision for full SHA-1» (en anglès). [Consulta: 23 febrer 2017].
* ↑ Leurent, Gaëtan. «SHA-1 is a Shambles» (en anglès). [Consulta: 8 gener 2020].
* ↑ Bertoni, Guido. «The sponge and duplex constructions» (en anglès). [Consulta: 27 març 2023].
* ↑ «llvm/llvm-project – AArch64.td» (en anglès). GitHub. [Consulta: 24 juny 2020].
* ↑ «ARMv8 – ARM – WikiChip» (en anglès). en.wikichip.org. [Consulta: 24 juny 2020].
* ↑ «weidai11/cryptopp» (en anglès). GitHub. [Consulta: 25 juny 2020].
* ↑ «openssl/openssl» (en anglès). GitHub. [Consulta: 25 juny 2020].
* ↑ «openssl/openssl» (en anglès). GitHub, 01-11-2021.
* ↑ «apple/llvm-project – lib/Target/AArch64/AArch64SVEInstrInfo.td» (en anglès). GitHub. [Consulta: 25 juny 2020].