Secure Hash Algorithm: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Nessun oggetto della modifica
m SHA-0 e SHA-1: Correct typo
 
(20 versioni intermedie di 16 utenti non mostrate)
Riga 1:
Con il termine '''SHA''' ([[acronimo]] dell'[[Lingua inglese|inglese]] '''Secure Hash Algorithm''') si indica una famiglia di cinque diverse funzioni [[crittografia|Funzioni crittografiche]] di ''[[Funzionehash|funzioni crittograficacrittografiche di ''hash|hash'']]'' sviluppate a partire dal [[1993]] dalla ''[[National Security Agency]]'' (NSA) e pubblicatepubblicato dal [[National Institute of Standards and Technology|NIST]] come [[Federal Information Processing Standard|standard federale]] dal governo degli [[Stati Uniti d'America|USA]] ([http://csrc.nist.gov/publications/fips/fips180-4/fips-180-4.pdf FIPS PUB 180-4]).
 
Come ogni [[algoritmo]] di ''hash'', l'SHA produce un ''message digest'', o "impronta del [[messaggio]]", di lunghezza fissa partendo da un messaggio di lunghezza variabile. La sicurezza di un [[algoritmo]] di ''hash'' risiede nel fatto che la funzione non sia invertibile (non sia cioè possibile risalire al messaggio originale conoscendo solo questo dato) e che non deve essere mai possibile creare ''intenzionalmente'' due messaggi diversi con lo stesso ''digest''. Gli algoritmi della famiglia sono denominati '''SHA-1''', '''SHA-224''', '''SHA-256''', '''SHA-384''' e '''SHA-512''': le ultime 4 varianti sono spesso indicate genericamente come '''SHA-2''', per distinguerle dal primo. Il primo produce un ''digest'' del messaggio di soli 160 [[bit]], mentre gli altri producono ''digest'' di lunghezza in bit pari al numero indicato nella loro sigla (SHA-256 produce un ''digest'' di 256 bit). L'SHA-1 è il più diffuso algoritmo della famiglia SHA ed è utilizzato in numerose applicazioni e protocolli nonostante sia ormai insicuro e verrà presto sostituito dagli altri, più moderni ed efficienti.
 
La sicurezza di SHA-1 è stata appunto compromessa dai [[crittoanalisi|crittoanalisti]].<ref>[https://www.schneier.com/blog/archives/2005/02/cryptanalysis_o.html Crittoanalisi dell'SHA-1 (Schneier)]</ref> Sebbene non siano ancora noti attacchi alle varianti SHA-2, esse hanno un algoritmo simile a quello di SHA-1 per cui sono in atto sforzi per sviluppare algoritmi di ''hashing'' alternativi e migliorati.<ref>[https://www.schneier.com/blog/archives/2005/11/nist_hash_works_4.html Schneier on Security: NIST Hash Workshop Liveblogging (5)<!-- Titolo generato automaticamente -->]</ref><ref>[http://www.heise-security.co.uk/articles/75686/2 The H: Security news and Open source developments<!-- Titolo generato automaticamente -->]</ref>
Un concorso aperto per la realizzazione di una nuova funzione '''SHA-3''' venne annunciato nel ''Federal Register'' il 2 novembre 2007<ref name=autogenerato1>[http://csrc.nist.gov/groups/ST/hash/documents/FR_Notice_Nov07.pdf Document<!-- Titolo generato automaticamente -->]</ref> dal NIST e attraverso una [[Competizione NIST per funzioni hash|competizione pubblica]], simile a quella adottata per il processo di sviluppo dell'[[Advanced Encryption Standard|AES]],<ref>[http://www.csrc.nist.gov/pki/HashWorkshop/index.html Bounce to index.html<!-- Titolo generato automaticamente -->] {{webarchive|url=https://web.archive.org/web/20080205143613/http://www.csrc.nist.gov/pki/HashWorkshop/index.html |data=5 febbraio 2008 }}</ref> ha portato in data 2 ottobre 2012 ad annunciare come vincitore l'algoritmo [[Keccak]]. Opera di un team di analisti italiani e belgi, il Keccak<ref>[http://keccak.noekeon.org/ The Keccak sponge function family<!-- Titolo generato automaticamente -->]</ref> sembra dunque destinato a venire gradualmente incluso e adottato nelle soluzioni di [[sicurezza informatica]] più variegate.
 
Il 23 febbraio 2017 un team di Google ha annunciato la prima tecnica pratica per generare una [[collisione hash]].<ref>{{Cita web|https://security.googleblog.com/2017/02/announcing-first-sha1-collision.html|Announcing the first SHA1 collision|17 marzo 2017|data=23 febbraio 2017|lingua=en}}</ref><ref>{{Cita web|https://shattered.it|Shattered|17 marzo 2017|citazione=We have broken SHA-1 in practice.|lingua=en}}</ref>
Riga 13:
La specifica originale dell'algoritmo fu pubblicata nel 1993 come ''Secure Hash Standard'', [[Federal Information Processing Standard|FIPS]] PUB 180, dal [[National Institute of Standards and Technology|NIST]]. Ci si riferisce spesso a questa versione come '''SHA-0''' per distinguerla dalle successive versioni. Fu ritirata dall'[[National Security Agency|NSA]] breve tempo dopo la pubblicazione e fu soppiantata da una versione rivista, pubblicata nel 1995 (FIPS PUB 180-1) e solitamente nota come '''SHA-1'''. L'SHA-1 differisce dall'SHA-0 unicamente per una sola rotazione di bit nel processo di preparazione del messaggio della sua funzione di compressione ad una via; ciò fu fatto, secondo l'NSA, per correggere un difetto nell'algoritmo originale, il quale riduceva la sicurezza crittografica di SHA-0. Ad ogni modo, l'NSA non fornì nessuna ulteriore spiegazione chiarificante. Sono state in seguito riportate debolezze sia nel codice dell'SHA-0 sia in quello dell'SHA-1. L'SHA-1 pare offrire maggiore resistenza agli attacchi, a supporto dell'asserzione dell'NSA che il cambiamento aumentò la sicurezza.
 
L'SHA-1 (così come l'SHA-0) produce un ''digest'' di 160 bit da un messaggio con una lunghezza massima di 2<sup>64</sup>-1 bit, edessendo èfondato basatosullo schema di Merkel-Damgard si basa su principi simili a quelli usati da [[RonRonald Rivest|Ronald L. Rivest]] del [[Massachusetts Institute of Technology|MIT]] nel ''design'' degli algoritmi [[MD4]] e [[MD5]].
 
=== Funzionamento ===
Riga 28:
 
''Passo 4'' (Elaborazione dei blocchi da 512bit): La sequenza di bit "messaggio+imbottitura+lunghezzaMessaggio" viene divisa in blocchi da 512bit, che identificheremo con B<sub>n</sub> con n che va da 0 a L.
Il fulcro dell'algoritmo SHA-1 è chiamato ''compression function'' ed è formato da 4 cicli di 20 passi cadauno. I cicli hanno una struttura molto simile tra di loro se non per il fatto che utilizzano una differente funzione logica primitiva. Ogni blocco viene preso come parametro di input da tutti e 4 i cicli insieme ad una costante K e i valori dei 5 registri. Alla fine della computazione otterremo dei nuovi valori per A,B,C,D,E che useremo per la computazione del blocco successivo sino ad arrivare al blocco finale F.
 
== L'insieme SHA-2 ==
Riga 41:
 
== SHA-3 ==
{{Vedi anche|SHA-3}}
La [[Competizione NIST per funzioni hash|competizione]] che ha portato al rilascio del nuovo standard '''SHA-3''' è stata ufficialmente lanciata il 2 novembre [[2007]]<ref name=autogenerato1 />. Il 2 ottobre 2012 la [[National Institute of Standards and Technology|NIST]] ha proclamato come vincitore l'algoritmo di [[Keccak]] [[SHA-3]].
 
Riga 59 ⟶ 60:
| colspan="2" | '''SHA-0''' || 160 || 160 || 512 || 2<sup>64</sup> − 1 || 32 || 80 || +,and,or,xor, rotl || Sì
|- align="center"
| colspan="2" | '''SHA-1''' || 160 || 160 || 512 || 2<sup>64</sup> − 1 || 32 || 80 || +,and,or,xor, rotl || Attacco 2<sup>53</sup><ref>[{{Cita web |url=https://www.debian-administration.org/users/dkg/weblog/48 |titolo=Weblog for dkg - HOWTO prep for migration off of SHA-1 in OpenPGP<!-- Titolo generato automaticamente -->] |accesso=4 maggio 2019 |dataarchivio=3 maggio 2019 |urlarchivio=https://web.archive.org/web/20190503073509/https://debian-administration.org/users/dkg/weblog/48 |urlmorto=sì }}</ref>
|- align="center"
| rowspan="2" | '''SHA-2''' || ''SHA-256/224'' || 256/224 || 256 || 512 || 2<sup>64</sup> − 1 || 32 || 64 || +,and,or,xor,shr, rotr || Nessuna
Riga 261 ⟶ 262:
* sono eseguiti 80 passaggi invece di 64,
* i valori iniziali e le costanti da addizionare sono estesi a 64 bit e
* le quantità delle rotazioni (''rotate'') e degli spostamenti (''shift'') sono differenti.
 
L'SHA-384 è identico all'SHA-512 tranne che:
Riga 284 ⟶ 285:
 
== Collegamenti esterni ==
* {{FOLDOC}}
 
=== Siti Internet per il calcolo degli hash ===
Riga 299 ⟶ 301:
* RFC 4634, “US Secure Hash Algorithms (SHA and HMAC-SHA)”
* [https://web.archive.org/web/20070113064108/http://csrc.nist.gov/CryptoToolkit/tkhash.html CSRC Cryptographic Toolkit] – Official [[National Institute of Standards and Technology|NIST]] site for the Secure Hash Standard
** [http://csrc.nist.gov/publications/fips/fips180-2/fips180-2withchangenotice.pdf FIPS 180-2: Secure Hash Standard (SHS)] {{Webarchive|url=https://web.archive.org/web/20120312101511/http://csrc.nist.gov/publications/fips/fips180-2/fips180-2withchangenotice.pdf |date=12 marzo 2012 }} ([[Portable Document Format|PDF]], 236 kB) – Current version of the Secure Hash Standard (SHA-1, SHA-224, SHA-256, SHA-384, and SHA-512), 1 August 2002, amended 25 February 2004
** [https://web.archive.org/web/20110625054822/http://csrc.nist.gov/groups/ST/toolkit/secure_hashing.html NIST secure hashing] Pagina relativa agli algoritmi di hashing del NIST
* [https://web.archive.org/web/20100505162618/http://csrc.nist.gov/groups/ST/hash/index.html NIST Cryptographic Hash Project] SHA-3 competition
Riga 309 ⟶ 311:
 
=== Implementazioni ===
* [https://web.archive.org/web/20140414075014/https://www.openssl.org/ The OpenSSL Project] – La diffusa libreria [[OpenSSL]] include [[free software|software libero]] ed [[open source]] con implementazione dell'SHA-1, SHA-224, SHA-256, SHA-384 ed SHA-512
* [https://www.cryptopp.com/ Crypto++] Crypto++, libreria libera in C++ con schemi crittografici
* [https://www.bouncycastle.org/ Bouncy Castle] La libreria Bouncy Castle è una libreria libera in Java e C# che contiene implementazioni dell'SHA-1, SHA-224, SHA-256, SHA-384 ed SHA-512, e di altri algoritmi di hash.