# Competizione NIST per funzioni hash

La Competizione NIST per funzioni hash o Competizione SHA-3 è stata una competizione promossa dall'ente americano NIST per sviluppare una nuova funzione di hashing chiamata SHA-3 per rafforzare le vecchie funzioni SHA-1 e SHA-2. La competizione fu formalmente annunciata nel Registro Federale americano il 2 novembre 2007. "NIST sta per impegnarsi a sviluppare uno o più algoritmi di hashing in una competizione pubblica, simile al processo che ha portato allo sviluppo di Advanced Encryption Standard (AES)." La competizione si è conclusa il 2 ottobre 2012, quando il NIST ha annunciato il vincitore: Keccak sarebbe stato il nuovo algoritmo di hashing SHA-3.

## Svolgimento

Le candidature furono ricevute fino al 31 ottobre 2008 e la lista dei candidati accettati per il primo turno fu pubblicato il 9 dicembre 2008. Il NIST organizzò una conferenza nel febbraio del 2009 dove i candidati presentarono i loro algoritmi. Vennero discussi i criteri per restringere il gruppo di candidati per il secondo turno. La lista dei 14 candidati accettati per il secondo turno fu pubblicata il 21 luglio 2009. Venne organizzata una seconda conferenza il 23 e 24 agosto 2010, dopo la Conferenza Internazionale di Crittologia (CRYPTO) 2010, all'Università della California (Santa Barbara), dove furono esaminate le candidature del secondo turno. L'annuncio del gruppo finale di candidati avvenne il 20 dicembre 2010. Il 2 ottobre 2012, il NIST annunciò il vincitore, scegliendo Keccak, creato da Guido Bertoni, Joan Daemen, Gilles Van Assche di STMicroelectronics e Michaël Peeters di NXP.

## Partecipanti

Di seguito è riportata una lista non ancora completa di candidature. Il NIST selezionò 51 proposte per il primo turno, 14 delle quali avanzarono al secondo turno. Tra questi vennero selezionati i 5 finalisti.

### Partecipanti esclusi in fase iniziale

Di seguito viene riportata la lista dei partecipanti che sono stati esclusi nella fase iniziale della competizione.

#### Partecipanti scartati

Molte proposte ricevute dal NIST non sono state accettate per partecipare al primo turno, in base ad un'analisi interna del NIST. In generale non sono state date motivazioni del rifiuto. Il NIST non ha neppure pubblicato la lista dei candidati che sono stati rifiutati, tuttavia ne sono stati individuati 13, ma solo i seguenti sono stati pubblicati.
* HASH 2X
* Maraca
* NKS 2D
* Ponic
* ZK-Crypt

#### Partecipanti ritirati

I seguenti algoritmi, presentati per partecipare al primo turno, sono stati ufficialmente ritirati da parte dei loro autori; sono stati considerati inadatti in base a alle direttive.
* Abacus
* Boole
* DCH
* Khichidi-1
* MeshHash
* SHAMATA
* StreamHash
* Tangle
* WaMM
* Waterfall

#### Partecipanti iniziali con problemi sostanziali

I seguenti algoritmi non sono riusciti a passare al primo turno. Sono state riscontrate debolezze dal punto di vista crittografico.
* AURORA (Sony and Nagoya University)
* Blender
* Cheetah
* Dynamic SHA
* Dynamic SHA2
* ECOH
* Edon-R
* EnRUPT
* ESSENCE
* LUX
* MCSSHA-3
* NaSHA
* Sgàil
* Spectral Hash
* Twister
* Vortex

### Partecipanti esclusi a primo turno

Le funzioni di hashing seguenti sono state accettate per gareggiare nel primo turno ma non sono passate al secondo turno. Non hanno avuto particolari problemi dal punto di vista crittografico né sono stati ritirati dalla competizione dai loro autori, ma sono stati riscontrati problemi nel design delle componenti o problemi di prestazioni.
* ARIRANG (CIST - Korea University)
* CHI
* CRUNCH
* FSB
* Lane
* Lesamnta
* MD6 (Rivest et al.)
* SANDstorm (Sandia National Laboratories)
* Sarmal
* SWIFFTX
* TIB3

### Partecipanti esclusi al secondo turno

Le seguenti funzioni di hashing furono accettate per il secondo turno, ma non riuscirono a passare al turno finale.
* Blue Midnight Wish
* CubeHash (Bernstein)
* ECHO (France Télécom)
* Fugue (IBM)
* Hamsi
* Luffa
* Shabal
* SHAvite-3
* SIMD

### Finalisti

NIST selezionò cinque algoritmi candidati a divenire il nuovo SHA-3. Questi algoritmi vennero scelti per passari al terzo (ed ultimo) turno:
* BLAKE
* Grøstl (Knudsen et al.)
* JH
* Keccak (Keccak team, Daemen et al.)
* Skein (Schneier et al.)
NIST individuò alcune caratteristiche che vennero considerate nella selezione. Gli aspetti degli algoritmi selezionati vennero descritti nel post:.
* Prestazioni: "Un paio di algoritmi sono stati penalizzati o eliminati a causa di eccessivi requisiti in termini di spazio di calcolo. Lo spazio di calcolo che richiedevano precludeva il loro utilizzo a molte potenziali applicazioni."
* Sicurezza: "Abbiamo preferito rimanere previdenti rispetto alla sicurezza, e in alcuni casi abbiamo scartato algoritmi con performance eccezionali, principalmente a causa di un certo 'nervosismo', nonostante sapessimo che non erano noti attacchi all'algoritmo."
* Analisi: "Il NIST ha eliminato parecchi algoritmi a causa della presenza di aggiustamenti durante il secondo turno o a causa di mancanza di crittoanalisi; entrambi i fattori hanno creato il sospetto che il design dell'algoritmo non fosse sufficientemente maturo e sottoposto a test."
* Differenza: "I finalisti hanno incluso funzioni di hashing basare su diverse metodologie, includendo costruzioni HAIFA e funzioni spugna, e con differenti strutture interne, includendo algoritmi basati su AES, bit slicing e addizioni alternate con XOR.".
NIST rilasciò un rapporto che spiegava la propria valutazione di ogni singolo algoritmo.

### Vincitore

Il 2 ottobre 2012 venne annunciato il vincitore: Keccak