Secure Hash Algorithm: Unterschied zwischen den Versionen

Aus Foxwiki
Keine Bearbeitungszusammenfassung
Keine Bearbeitungszusammenfassung
 
(34 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
'''topic''' kurze Beschreibung
'''Secure Hash Algorithm''' (SHA) - Standardisierte [[Kryptologische Hashfunktion|kryptologischer Hashfunktionen]]


== Beschreibung ==
== Beschreibung ==
Der Begriff '''Secure Hash Algorithm''' (kurz '''SHA''', {{enS}} für ''sicherer Hash-Algorithmus'') bezeichnet eine Gruppe standardisierter [[Kryptologische Hashfunktion|kryptologischer Hashfunktionen]].
; '''Secure Hash Algorithm''' (kurz '''SHA''', {{enS}} für ''sicherer Hash-Algorithmus'') sind eine Gruppe standardisierter [[Kryptologische Hashfunktion|kryptologischer Hashfunktionen]]
* Diese dienen zur Berechnung eines [[Prüfsumme|Prüfwert]]s für beliebige digitale Daten (Nachrichten) und sind unter anderem die Grundlage zur Erstellung einer [[Digitale Signatur|digitalen Signatur]].
* Diese dienen zur Berechnung eines [[Prüfsumme|Prüfwert]]s für beliebige digitale Daten (Nachrichten) und sind unter anderem die Grundlage zur Erstellung einer [[Digitale Signatur|digitalen Signatur]].


Der Prüfwert wird verwendet, um die [[Integrität (Informationssicherheit)|Integrität]] einer Nachricht zu sichern.  
; Der Prüfwert wird verwendet, um die [[Integrität (Informationssicherheit)|Integrität]] einer Nachricht zu sichern.  
* Wenn zwei Nachrichten den gleichen Prüfwert ergeben, soll die Gleichheit der Nachrichten nach normalem Ermessen garantiert sein, unbeschadet gezielter Manipulationsversuche an den Nachrichten.  
* Wenn zwei Nachrichten den gleichen Prüfwert ergeben, soll die Gleichheit der Nachrichten nach normalem Ermessen garantiert sein, unbeschadet gezielter Manipulationsversuche an den Nachrichten.  
* Darum fordert man von einer kryptologischen Hashfunktion die Eigenschaft der [[Kollisionssicherheit]]: es soll praktisch unmöglich sein, zwei verschiedene Nachrichten mit dem gleichen Prüfwert zu erzeugen.
* Darum fordert man von einer kryptologischen Hashfunktion die Eigenschaft der [[Kollisionssicherheit]]: es soll praktisch unmöglich sein, zwei verschiedene Nachrichten mit dem gleichen Prüfwert zu erzeugen.


== Geschichte – SHA/SHA-0 ==
== Versionen ==
Das [[National Institute of Standards and Technology]] (NIST) entwickelte zusammen mit der [[National Security Agency]] (NSA) eine Hash-Funktion als Bestandteil des [[Digital Signature Algorithm]]s (DSA) für den Digital Signature Standard (DSS).  
=== SHA/SHA-0 ===
; Das [[National Institute of Standards and Technology]] (NIST) entwickelte zusammen mit der [[National Security Agency]] (NSA) eine Hash-Funktion als Bestandteil des [[Digital Signature Algorithm]]s (DSA) für den Digital Signature Standard (DSS).  
* Die Funktion wurde 1993 veröffentlicht.  
* Die Funktion wurde 1993 veröffentlicht.  
* Diese als Secure Hash Standard (SHS) bezeichnete Norm spezifiziert den sicheren Hash-Algorithmus (SHA) mit einem Hash-Wert von 160&nbsp;[[Bit]] Länge für beliebige digitale Daten von maximal 2<sup>64</sup>&nbsp;−&nbsp;1&nbsp;Bit (≈ 2&nbsp;[[Exbibyte]]) Länge.
* Diese als Secure Hash Standard (SHS) bezeichnete Norm spezifiziert den sicheren Hash-Algorithmus (SHA) mit einem Hash-Wert von 160&nbsp;[[Bit]] Länge für beliebige digitale Daten von maximal 2<sup>64</sup>&nbsp;−&nbsp;1&nbsp;Bit (≈ 2&nbsp;[[Exbibyte]]) Länge.


SHA ist wie die von [[Ronald L. Rivest]] entwickelten [[MD4]] und [[MD5]] eine [[Merkles Meta-Verfahren|Merkle-Damgård-Konstruktion]] mit Davies-Meyer-Kompressionsfunktion, und die Kompressionsfunktion ist auch ähnlich wie bei diesen konstruiert.  
; SHA ist wie die von [[Ronald L. Rivest]] entwickelten [[MD4]] und [[MD5]] eine [[Merkles Meta-Verfahren|Merkle-Damgård-Konstruktion]] mit Davies-Meyer-Kompressionsfunktion, und die Kompressionsfunktion ist auch ähnlich wie bei diesen konstruiert.  
* Mit seinem längeren Hash-Wert von 160&nbsp;Bit gegenüber 128&nbsp;Bit bei MD4 und MD5 ist SHA aber widerstandsfähiger gegen [[Brute-Force-Methode|Brute-Force-Angriffe]] zum Auffinden von Kollisionen.
* Mit seinem längeren Hash-Wert von 160&nbsp;Bit gegenüber 128&nbsp;Bit bei MD4 und MD5 ist SHA aber widerstandsfähiger gegen [[Brute-Force|Brute-Force-Angriffe]] zum Auffinden von Kollisionen.


Die Nachricht wird mit einem Endstück [[Padding (Informatik)|erweitert]], das die Länge der ursprünglichen Nachricht codiert.  
; Die Nachricht wird mit einem Endstück [[Padding (Informatik)|erweitert]], das die Länge der ursprünglichen Nachricht codiert.  
* Dann wird sie in 512&nbsp;Bit lange Blöcke geteilt, welche nacheinander verarbeitet werden.  
* Dann wird sie in 512&nbsp;Bit lange Blöcke geteilt, welche nacheinander verarbeitet werden.  
* Dazu wird ein interner Datenblock von 160&nbsp;Bit mittels einer [[Blockverschlüsselung]] verschlüsselt, mit dem Nachrichtenblock als Schlüssel.  
* Dazu wird ein interner Datenblock von 160&nbsp;Bit mittels einer [[Blockverschlüsselung]] verschlüsselt, mit dem Nachrichtenblock als Schlüssel.  
Zeile 23: Zeile 24:
* Der so berechnete Datenblock wird nun mit dem nächsten Nachrichtenblock verschlüsselt oder nach dem Einarbeiten des letzten Nachrichtenblocks als Hashwert ausgegeben.
* Der so berechnete Datenblock wird nun mit dem nächsten Nachrichtenblock verschlüsselt oder nach dem Einarbeiten des letzten Nachrichtenblocks als Hashwert ausgegeben.


== Installation ==
=== SHA-1 ===
== Anwendungen ==
=== Fehlerbehebung ===
== Syntax ==
=== Optionen ===
=== Parameter ===
=== Umgebungsvariablen ===
=== Exit-Status ===
== Konfiguration ==
=== Dateien ===
== Sicherheit ==
== Dokumentation ==
=== RFC ===
=== Man-Pages ===
=== Info-Pages ===
== Siehe auch ==
== Links ==
=== Projekt-Homepage ===
=== Weblinks ===
=== Einzelnachweise ===
<references />
== Testfragen ==
<div class="toccolours mw-collapsible mw-collapsed">
''Testfrage 1''
<div class="mw-collapsible-content">'''Antwort1'''</div>
</div>
<div class="toccolours mw-collapsible mw-collapsed">
''Testfrage 2''
<div class="mw-collapsible-content">'''Antwort2'''</div>
</div>
<div class="toccolours mw-collapsible mw-collapsed">
''Testfrage 3''
<div class="mw-collapsible-content">'''Antwort3'''</div>
</div>
<div class="toccolours mw-collapsible mw-collapsed">
''Testfrage 4''
<div class="mw-collapsible-content">'''Antwort4'''</div>
</div>
<div class="toccolours mw-collapsible mw-collapsed">
''Testfrage 5''
<div class="mw-collapsible-content">'''Antwort5'''</div>
</div>
 
[[Kategorie:Entwurf]]
 
= Wikipedia =
== SHA-1 ==
[[Datei:SHA-1.svg|mini|Aufbau einer Runde von SHA-0 und SHA-1]]
[[Datei:SHA-1.svg|mini|Aufbau einer Runde von SHA-0 und SHA-1]]


Der ursprüngliche SHA wurde wegen eines „Konstruktionsfehlers“ schon 1995 korrigiert und spielte deswegen in der Praxis kaum eine Rolle.  
Der ursprüngliche SHA wurde wegen eines „Konstruktionsfehlers“ schon 1995 korrigiert und spielte deswegen in der Praxis kaum eine Rolle.
* Er ist heute als '''SHA-0''' bekannt, die korrigierte Variante als '''SHA-1'''.
* Er ist heute als '''SHA-0''' bekannt, die korrigierte Variante als '''SHA-1'''.


Die Korrektur besteht nur in einem kleinen Detail ([[Schieberegister|Rotation]] eines Datenwortes in der Schlüsseleinteilung), nicht jedoch in der Anzahl der durchlaufenen Runden oder sonstiger Maßnahmen, die unmittelbar eine wesentlich höhere Sicherheit erwarten lassen.  
Die Korrektur besteht nur in einem kleinen Detail ([[Schieberegister|Rotation]] eines Datenwortes in der Schlüsseleinteilung), nicht jedoch in der Anzahl der durchlaufenen Runden oder sonstiger Maßnahmen, die unmittelbar eine wesentlich höhere Sicherheit erwarten lassen.
* Die [[Kryptoanalyse]] bestätigt jedoch, dass die Rotation die Berechnung von Kollisionen erheblich erschwert.
* Die [[Kryptoanalyse]] bestätigt jedoch, dass die Rotation die Berechnung von Kollisionen erheblich erschwert.


=== Schwächen ===
==== Schwächen ====
Am 15. Februar 2005 meldete der [[Kryptographie]]experte [[Bruce Schneier]] in seinem [[Blog]]<ref>{{Internetquelle| autor=[[Bruce Schneier]]| url=http://www.schneier.com/blog/archives/2005/02/sha1_broken.html| sprache=en| titel=SHA-1 Broken| datum=2005-02-15| zugriff=2011-12-10}}</ref>, dass die Wissenschaftler Xiaoyun Wang, Yiqun Lisa Yin und Hongbo Yu von [[Shandong University]] in China erfolgreich SHA-1 gebrochen hätten.  
Am 15. Februar 2005 meldete der [[Kryptographie]]experte [[Bruce Schneier]] in seinem [[Blog]]<ref>{{Internetquelle| autor=[[Bruce Schneier]]| url=http://www.schneier.com/blog/archives/2005/02/sha1_broken.html| sprache=en| titel=SHA-1 Broken| datum=2005-02-15| zugriff=2011-12-10}}</ref>, dass die Wissenschaftler Xiaoyun Wang, Yiqun Lisa Yin und Hongbo Yu von [[Shandong University]] in China erfolgreich SHA-1 gebrochen hätten.
* Ihnen war es gelungen, den Aufwand zur [[Kollisionsangriff|Kollisionsberechnung]] von 2<sup>80</sup> auf 2<sup>69</sup> zu verringern.<ref>{{Literatur | Autor=Xiaoyun Wang, Yiqun Lisa Yin und Hongbo Yu | Titel=Finding Collisions in the Full SHA-1 | Sammelwerk=CRYPTO | Jahr=2005 | Seiten=17-36 | Online=[http://people.csail.mit.edu/yiqun/SHA1AttackProceedingVersion.pdf PDF]}}</ref> 2<sup>69</sup> Berechnungen könnten eventuell mit Hochleistungsrechnern durchgeführt werden.
* Ihnen war es gelungen, den Aufwand zur [[Kollisionsangriff|Kollisionsberechnung]] von 2<sup>80</sup> auf 2<sup>69</sup> zu verringern.<ref>{{Literatur | Autor=Xiaoyun Wang, Yiqun Lisa Yin und Hongbo Yu | Titel=Finding Collisions in the Full SHA-1 | Sammelwerk=CRYPTO | Jahr=2005 | Seiten=17-36 | Online=[http://people.csail.mit.edu/yiqun/SHA1AttackProceedingVersion.pdf PDF]}}</ref> 2<sup>69</sup> Berechnungen könnten eventuell mit Hochleistungsrechnern durchgeführt werden.


Kurze Zeit später, am 17. August 2005, wurde von Xiaoyun Wang, [[Andrew Yao]] und [[Frances Yao]] auf der Konferenz [[CRYPTO (Veranstaltung)|CRYPTO 2005]] ein weiterer, effizienterer Kollisionsangriff auf SHA-1 vorgestellt, welcher den Berechnungsaufwand auf 2<sup>63</sup> reduziert.
Kurze Zeit später, am 17. August 2005, wurde von Xiaoyun Wang, [[Andrew Yao]] und [[Frances Yao]] auf der Konferenz [[CRYPTO (Veranstaltung)|CRYPTO 2005]] ein weiterer, effizienterer Kollisionsangriff auf SHA-1 vorgestellt, welcher den Berechnungsaufwand auf 2<sup>63</sup> reduziert.


Im August 2006 wurde auf der CRYPTO 2006 ein weit schwerwiegenderer Angriff gegen SHA-1 präsentiert.  
Im August 2006 wurde auf der CRYPTO 2006 ein weit schwerwiegenderer Angriff gegen SHA-1 präsentiert.
* Dabei sind bis zu 25 % der gefälschten Nachricht frei wählbar.  
* Dabei sind bis zu 25 % der gefälschten Nachricht frei wählbar.
* Bei bisherigen [[Kollisionsangriff]]en wurden die so genannten Hash-Zwillinge nur mit sinnlosen Buchstabenkombinationen des Klartextes gebildet.  
* Bei bisherigen [[Kollisionsangriff]]en wurden die so genannten Hash-Zwillinge nur mit sinnlosen Buchstabenkombinationen des Klartextes gebildet.
* Diese waren leicht erkennbar.
* Diese waren leicht erkennbar.


Ein kritisches Angriffsszenario erfordert, dass Angreifer eine zweite, in Teilen sinnvolle Variante eines Dokuments erzeugen, die den gleichen SHA-1-Wert und damit die gleiche Signatur ergibt.  
Ein kritisches Angriffsszenario erfordert, dass Angreifer eine zweite, in Teilen sinnvolle Variante eines Dokuments erzeugen, die den gleichen SHA-1-Wert und damit die gleiche Signatur ergibt.
* Die beim Angriff verbleibenden 75 % sinnloser Zeichen (also Datenmüll) können vor ungeschulten Betrachtern ggf. technisch verborgen werden.  
* Die beim Angriff verbleibenden 75 % sinnloser Zeichen (also Datenmüll) können vor ungeschulten Betrachtern ggf. technisch verborgen werden.
* Der Angreifer kann behaupten, die gefälschte Variante sei anstatt der originalen Variante signiert worden.
* Der Angreifer kann behaupten, die gefälschte Variante sei anstatt der originalen Variante signiert worden.


Im Oktober 2015 veröffentlichten Marc Stevens, Pierre Karpman und Thomas Peyrin eine Freestart-Kollision für die Kompressionsfunktion von SHA1.  
Im Oktober 2015 veröffentlichten Marc Stevens, Pierre Karpman und Thomas Peyrin eine Freestart-Kollision für die Kompressionsfunktion von SHA1.
* Damit waren bis dahin geltende Abschätzungen, wann es zu welchen Kosten möglich ist, für SHA-1 aufgrund steigender Rechenleistung Chosen-Prefix-Kollisionen zur Fälschung von TLS-Zertifikaten zu finden, hinfällig.<ref>https://sites.google.com/site/itstheshappening/</ref><ref name="Schneier-SHA1">https://www.schneier.com/blog/archives/2015/10/sha-1_freestart.html</ref> Sie empfahlen, von SHA-1 baldmöglichst zu SHA-2 oder SHA-3 überzugehen.
* Damit waren bis dahin geltende Abschätzungen, wann es zu welchen Kosten möglich ist, für SHA-1 aufgrund steigender Rechenleistung Chosen-Prefix-Kollisionen zur Fälschung von TLS-Zertifikaten zu finden, hinfällig.<ref>https://sites.google.com/site/itstheshappening/</ref><ref name="Schneier-SHA1">https://www.schneier.com/blog/archives/2015/10/sha-1_freestart.html</ref> Sie empfahlen, von SHA-1 baldmöglichst zu SHA-2 oder SHA-3 überzugehen.


Im Februar 2017 veröffentlichten Google-Mitarbeiter eine erste Kollision von SHA-1.  
Im Februar 2017 veröffentlichten Google-Mitarbeiter eine erste Kollision von SHA-1.
* Sie erzeugten zwei verschiedene funktionierende [[PDF-Datei]]en mit gleichem SHA-1-Prüfwert unter enormem Aufwand.  
* Sie erzeugten zwei verschiedene funktionierende [[PDF-Datei]]en mit gleichem SHA-1-Prüfwert unter enormem Aufwand.
* Eine einzelne CPU hätte etwa 6500 Jahre dafür benötigt.<ref>Marc Stevens, Elie Bursztein, Pierre Karpman, Ange Albertini, Yarik Markov: [https://shattered.io/static/shattered.pdf The first collision for full SHA-1], shattered.io</ref><br>
* Eine einzelne CPU hätte etwa 6500 Jahre dafür benötigt.<ref>Marc Stevens, Elie Bursztein, Pierre Karpman, Ange Albertini, Yarik Markov: [https://shattered.io/static/shattered.pdf The first collision for full SHA-1], shattered.io</ref><br>
Im Jahre 2019 benötigten öffentlich bekannte Chosen-Prefix-Angriffe 2<sup>66,9</sup> bis 2<sup>69,4</sup> SHA-1-Berechnungen, um Kollisionen zu finden.  
Im Jahre 2019 benötigten öffentlich bekannte Chosen-Prefix-Angriffe 2<sup>66,9</sup> bis 2<sup>69,4</sup> SHA-1-Berechnungen, um Kollisionen zu finden.
* Das entsprach im Jahre 2017 100 GPU-Jahren Rechenkapazität.<ref>G. Leurent, T. Peyrin: [https://eprint.iacr.org/2019/459.pdf From Collisions to Chosen-Prefix Collisions. Application to Full SHA-1], Inria</ref>
* Das entsprach im Jahre 2017 100 GPU-Jahren Rechenkapazität.<ref>G. Leurent, T. Peyrin: [https://eprint.iacr.org/2019/459.pdf From Collisions to Chosen-Prefix Collisions. Application to Full SHA-1], Inria</ref>


=== Empfehlungen ===
==== Empfehlungen ====
Als Reaktion auf die bekanntgewordenen Angriffe gegen SHA-1 hielt das [[National Institute of Standards and Technology]] (NIST) im Oktober 2005 einen Workshop ab, in dem der aktuelle Stand kryptologischer Hashfunktionen diskutiert wurde.  
Als Reaktion auf die bekanntgewordenen Angriffe gegen SHA-1 hielt das [[National Institute of Standards and Technology]] (NIST) im Oktober 2005 einen Workshop ab, in dem der aktuelle Stand kryptologischer Hashfunktionen diskutiert wurde.
* NIST empfiehlt den Übergang von SHA-1 zu Hashfunktionen der SHA-2-Familie (SHA-224, SHA-256, SHA-384, SHA-512).  
* NIST empfiehlt den Übergang von SHA-1 zu Hashfunktionen der SHA-2-Familie (SHA-224, SHA-256, SHA-384, SHA-512).
* Langfristig sollen diese durch den neuen Standard [[SHA-3]] ersetzt werden.  
* Langfristig sollen diese durch den neuen Standard [[SHA-3]] ersetzt werden.
* Im Oktober 2015 empfahl Bruce Schneier zu SHA-3 überzugehen.<ref name="Schneier-SHA1" />
* Im Oktober 2015 empfahl Bruce Schneier zu SHA-3 überzugehen.<ref name="Schneier-SHA1" />


=== Beispiel-Hashes ===
==== Beispiel-Hashes ====
  SHA1("'''F'''ranz jagt im komplett verwahrlosten Taxi quer durch Bayern")
  SHA1("'''F'''ranz jagt im komplett verwahrlosten Taxi quer durch Bayern")
   = 68ac906495480a3404beee4874ed853a037a7a8f
   = 68ac906495480a3404beee4874ed853a037a7a8f
Zeile 117: Zeile 72:
   = 89fdde0b28373dc4f361cfb810b35342cc2c3232
   = 89fdde0b28373dc4f361cfb810b35342cc2c3232


Eine kleine Änderung der Nachricht erzeugt also einen komplett anderen Hash.  
Eine kleine Änderung der Nachricht erzeugt also einen komplett anderen Hash.
* Diese Eigenschaft wird in der [[Kryptographie]] auch als [[Lawineneffekt (Kryptographie)|Lawineneffekt]] bezeichnet.
* Diese Eigenschaft wird in der [[Kryptographie]] auch als [[Lawineneffekt (Kryptographie)|Lawineneffekt]] bezeichnet.


Zeile 125: Zeile 80:
   = da39a3ee5e6b4b0d3255bfef95601890afd80709
   = da39a3ee5e6b4b0d3255bfef95601890afd80709


=== Pseudocode ===
=== SHA-2 ===
Es folgt der [[Pseudocode]] für den SHA-1.
[[SHA-2]]
 
<span style="color:green;">// ''Beachte: Alle Variablen sind vorzeichenlose 32-Bit-Werte und''
// ''verhalten sich bei Berechnungen [[Kongruenz (Zahlentheorie)|kongruent (≡)]] modulo 2^32''</span>
 
<span style="color:green;">// ''Initialisiere die Variablen:''</span>
'''var''' ''int'' h0 := 0x67452301
'''var''' ''int'' h1 := 0xEFCDAB89
'''var''' ''int'' h2 := 0x98BADCFE
'''var''' ''int'' h3 := 0x10325476
'''var''' ''int'' h4 := 0xC3D2E1F0
 
<span style="color:green;">// ''Vorbereitung der Nachricht 'message':''</span>
'''var''' ''int'' message_laenge := bit_length(message)
'''erweitere''' message '''um''' bit "1"
'''erweitere''' message '''um''' bits "0" '''bis''' Länge von message in bits [[Kongruenz (Zahlentheorie)|≡]] 448 (mod 512)
'''erweitere''' message '''um''' message_laenge als ''64-Bit [[Big endian|big-endian]] Integer''
 
<span style="color:green;">// ''Verarbeite die Nachricht in aufeinander folgenden 512-Bit-Blöcken:''</span>
'''für alle''' ''512-Bit'' Block '''von''' message
    unterteile Block in 16 32-bit [[Big endian|big-endian]] Worte w(i), 0 ≤ i ≤ 15
 
    <span style="color:green;">// ''Erweitere die 16 32-Bit-Worte auf 80 32-Bit-Worte:''</span>
    '''für alle''' i '''von''' 16 '''bis''' 79
        w(i) := (w(i-3) '''xor''' w(i-8) '''xor''' w(i-14) '''xor''' w(i-16)) '''leftrotate''' 1
 
    <span style="color:green;">// ''Initialisiere den Hash-Wert für diesen Block:''</span>
    '''var''' ''int'' a := h0
    '''var''' ''int'' b := h1
    '''var''' ''int'' c := h2
    '''var''' ''int'' d := h3
    '''var''' ''int'' e := h4
 
    <span style="color:green;">// ''Hauptschleife:''</span>
    '''für alle''' i '''von''' 0 '''bis''' 79
        '''wenn''' 0 ≤ i ≤ 19 '''dann'''
            f := (b '''and''' c) '''or''' (('''not''' b) '''and''' d)
            k := 0x5A827999
        '''sonst wenn''' 20 ≤ i ≤ 39 '''dann'''
            f := b '''xor''' c '''xor''' d
            k := 0x6ED9EBA1
        '''sonst wenn''' 40 ≤ i ≤ 59 '''dann'''
            f := (b '''and''' c) '''or''' (b '''and''' d) '''or''' (c '''and''' d)
            k := 0x8F1BBCDC
        '''sonst wenn''' 60 ≤ i ≤ 79 '''dann'''
            f := b '''xor''' c '''xor''' d
            k := 0xCA62C1D6
        '''wenn_ende'''
 
        temp := (a '''leftrotate''' 5) + f + e + k + w(i)
        e := d
        d := c
        c := b '''leftrotate''' 30
        b := a
        a := temp
 
    <span style="color:green;">// ''Addiere den Hash-Wert des Blocks zur Summe der vorherigen Hashes:''</span>
    h0 := h0 + a
    h1 := h1 + b
    h2 := h2 + c
    h3 := h3 + d
    h4 := h4 + e
 
digest = hash = h0 '''append''' h1 '''append''' h2 '''append''' h3 '''append''' h4 <span style="color:green;">//''(Darstellung als [[Big endian|big-endian]])''</span>
 
''Beachte: Anstatt der Original-Formulierung aus dem FIPS PUB 180-1 können alternativ auch folgende Formulierungen verwendet werden:''
(0 ≤ i ≤ 19): f := d '''xor''' (b '''and''' (c '''xor''' d)) <span style="color:green;">''(Alternative)''</span>
 
(40 ≤ i ≤ 59): f := (b '''and''' c) '''or''' (d '''and''' (b '''or''' c)) <span style="color:green;">''(Alternative 1)''</span>
(40 ≤ i ≤ 59): f := (b '''and''' c) '''or''' (d '''and''' (b '''xor''' c)) <span style="color:green;">''(Alternative 2)''</span>
(40 ≤ i ≤ 59): f := (b '''and''' c) + (d '''and''' (b '''xor''' c)) <span style="color:green;">''(Alternative 3)''</span>
(40 ≤ i ≤ 59): f := (b '''and''' c) '''xor''' (d '''and''' (b '''xor''' c)) <span style="color:green;">''(Alternative 4)''</span>
 
== SHA-2 ==
{{Hauptartikel|SHA-2}}


Das [[National Institute of Standards and Technology|NIST]] hat vier weitere Algorithmen veröffentlicht, die größere Hash-Werte erzeugen.  
Das [[National Institute of Standards and Technology|NIST]] hat vier weitere Algorithmen veröffentlicht, die größere Hash-Werte erzeugen.
* Es handelt sich dabei um den SHA-224, SHA-256, SHA-384 und SHA-512, wobei die angefügte Zahl jeweils die Länge des Hash-Werts (in Bit) angibt.  
* Es handelt sich dabei um den SHA-224, SHA-256, SHA-384 und SHA-512, wobei die angefügte Zahl jeweils die Länge des Hash-Werts (in Bit) angibt.
* Später kamen noch die Versionen SHA-512/256 und SHA-512/224 hinzu.  
* Später kamen noch die Versionen SHA-512/256 und SHA-512/224 hinzu.
* Diese Weiterentwicklungen werden häufig unter der Bezeichnung SHA-2 zusammengefasst.  
* Diese Weiterentwicklungen werden häufig unter der Bezeichnung SHA-2 zusammengefasst.
* Sie sind nach dem gleichen Konstruktionsprinzip aufgebaut wie SHA-1, man hat nur den internen Datenblock auf 256 bzw. 512&nbsp;Bit vergrößert und die [[Blockverschlüsselung]] modifiziert, auf der die Kompressionsfunktion basiert.
* Sie sind nach dem gleichen Konstruktionsprinzip aufgebaut wie SHA-1, man hat nur den internen Datenblock auf 256 bzw. 512&nbsp;Bit vergrößert und die [[Blockverschlüsselung]] modifiziert, auf der die Kompressionsfunktion basiert.


Von den Algorithmen SHA-1 und SHA-256 hat man die Blockverschlüsselung [[SHACAL]] abgeleitet.  
Von den Algorithmen SHA-1 und SHA-256 hat man die Blockverschlüsselung [[SHACAL]] abgeleitet.
* Diese besteht im Wesentlichen in der internen Blockverschlüsselung von SHA-1 bzw.  
* Diese besteht im Wesentlichen in der internen Blockverschlüsselung von SHA-1 bzw.
* SHA-256, die hier für sich allein genutzt wird.
* SHA-256, die hier für sich allein genutzt wird.


== SHA-3 ==
=== SHA-3 ===
{{Hauptartikel|SHA-3}}
[[SHA-3]]


Weil man im Jahr 2004 grundlegende Schwächen der Merkle-Damgård-Konstruktion entdeckte, suchte das NIST nach einer neuen Hashfunktion, die wesentlich zukunftssicherer als SHA-2 sein sollte.  
Weil man im Jahr 2004 grundlegende Schwächen der Merkle-Damgård-Konstruktion entdeckte, suchte das NIST nach einer neuen Hashfunktion, die wesentlich zukunftssicherer als SHA-2 sein sollte.
* Es rief dazu zu einem Wettbewerb auf, wie zuvor bereits für den [[Advanced Encryption Standard]] (AES).  
* Es rief dazu zu einem Wettbewerb auf, wie zuvor bereits für den [[Advanced Encryption Standard]] (AES).
* Die Wahl fiel im Oktober 2012 auf [[Keccak]], die dann im August 2015 unter der Bezeichnung SHA-3 in verschiedenen Varianten standardisiert wurde.  
* Die Wahl fiel im Oktober 2012 auf [[Keccak]], die dann im August 2015 unter der Bezeichnung SHA-3 in verschiedenen Varianten standardisiert wurde.
* SHA-3 ist grundlegend anders als SHA-2 aufgebaut, nämlich als sogenannte ''Sponge-Konstruktion''.
* SHA-3 ist grundlegend anders als SHA-2 aufgebaut, nämlich als sogenannte ''Sponge-Konstruktion''.


== Spezifikationen ==
<noinclude>
* RFC 3174, US Secure Hash Algorithm 1 (SHA1) (September 2001)
== Anhang ==
* RFC 4634, US Secure Hash Algorithms (SHA and HMAC-SHA) (Juli 2006)
=== Siehe auch ===
* RFC 6234, US Secure Hash Algorithms (SHA and SHA-based HMAC and HKDF) (Mai 2011)
{{Special:PrefixIndex/{{BASEPAGENAME}}}}
 
----
== Siehe auch ==
* [[Zyklische Redundanzprüfung]] (ZRP, engl. CRC)
* [[Zyklische Redundanzprüfung]] (ZRP, engl. CRC)
* [[Prüfsumme]]
* [[Prüfsumme]]
Zeile 233: Zeile 113:
* [[Message-Digest Algorithm 5|MD5]]
* [[Message-Digest Algorithm 5|MD5]]


== Weblinks ==
==== Links ====
* [http://csrc.nist.gov/publications/fips/fips180-4/fips-180-4.pdf FIPS PUB 180-4] Secure Hash Standard (PDF; 369&nbsp;kB)
===== Projekt =====
* [http://www.z1-web.de/Webmaster-Tools_SHA1-Passwort-Generator SHA1-Passwort-Generator] Online-Konverter zur Generierung von SHA1-Hashwerten aus normalem Text
===== Weblinks =====
* [https://www.psw-group.de/blog/sha-1-wird-verabschiedet-sha-2-startet-das-muessen-sie-wissen/1665 SHA-1 wird verabschiedet, SHA-2 startet (Update: SHA-3 wird Standard)] IT-Security, von Christian Heutger, 6. August 2015.
# https://de.wikipedia.org/wiki/Secure_Hash_Algorithm
# [http://csrc.nist.gov/publications/fips/fips180-4/fips-180-4.pdf FIPS PUB 180-4] Secure Hash Standard (PDF; 369&nbsp;kB)
# [http://www.z1-web.de/Webmaster-Tools_SHA1-Passwort-Generator SHA1-Passwort-Generator] Online-Konverter zur Generierung von SHA1-Hashwerten aus normalem Text
# [https://www.psw-group.de/blog/sha-1-wird-verabschiedet-sha-2-startet-das-muessen-sie-wissen/1665 SHA-1 wird verabschiedet, SHA-2 startet (Update: SHA-3 wird Standard)] IT-Security, von Christian Heutger, 6. August 2015.


=== Zu den Schwächen von SHA ===
==== Zu den Schwächen von SHA ====
* [[Arjen Lenstra]]: [http://infoscience.epfl.ch/record/164540/files/NPDF-33.pdf ''Further progress in hashing cryptanalysis''], 26. Februar 2005 (englisch, PDF; 89&nbsp;kB)
* [[Arjen Lenstra]]: [http://infoscience.epfl.ch/record/164540/files/NPDF-33.pdf ''Further progress in hashing cryptanalysis''], 26. Februar 2005 (englisch, PDF; 89&nbsp;kB)
* Xiaoyun Wang, Yiqun Lisa Yin, Hongbo Yu: [http://cryptome.org/wang_sha1_v2.zip ''Finding Collisions in the Full SHA-1''] (englisch, PDF; [[ZIP-Dateiformat|ZIP]]; 190&nbsp;kB)
* Xiaoyun Wang, Yiqun Lisa Yin, Hongbo Yu: [http://cryptome.org/wang_sha1_v2.zip ''Finding Collisions in the Full SHA-1''] (englisch, PDF; [[ZIP-Dateiformat|ZIP]]; 190&nbsp;kB)
* [https://www.heise.de/security/meldung/Zweifel-an-der-Notwendigkeit-des-Kryptostandards-SHA3-1497267.html Zweifel an der Notwendigkeit des Kryptostandards SHA3] heise online 30. März 2012
* [https://www.heise.de/security/meldung/Zweifel-an-der-Notwendigkeit-des-Kryptostandards-SHA3-1497267.html Zweifel an der Notwendigkeit des Kryptostandards SHA3] heise online 30. März 2012


== Einzelnachweise ==
[[Kategorie:SHA]]
<references />


[[Kategorie:Kryptographische Hashfunktion]]
</noinclude>

Aktuelle Version vom 2. März 2024, 10:57 Uhr

Secure Hash Algorithm (SHA) - Standardisierte kryptologischer Hashfunktionen

Beschreibung

Secure Hash Algorithm (kurz SHA, für sicherer Hash-Algorithmus) sind eine Gruppe standardisierter kryptologischer Hashfunktionen
  • Diese dienen zur Berechnung eines Prüfwerts für beliebige digitale Daten (Nachrichten) und sind unter anderem die Grundlage zur Erstellung einer digitalen Signatur.
Der Prüfwert wird verwendet, um die Integrität einer Nachricht zu sichern.
  • Wenn zwei Nachrichten den gleichen Prüfwert ergeben, soll die Gleichheit der Nachrichten nach normalem Ermessen garantiert sein, unbeschadet gezielter Manipulationsversuche an den Nachrichten.
  • Darum fordert man von einer kryptologischen Hashfunktion die Eigenschaft der Kollisionssicherheit: es soll praktisch unmöglich sein, zwei verschiedene Nachrichten mit dem gleichen Prüfwert zu erzeugen.

Versionen

SHA/SHA-0

Das National Institute of Standards and Technology (NIST) entwickelte zusammen mit der National Security Agency (NSA) eine Hash-Funktion als Bestandteil des Digital Signature Algorithms (DSA) für den Digital Signature Standard (DSS).
  • Die Funktion wurde 1993 veröffentlicht.
  • Diese als Secure Hash Standard (SHS) bezeichnete Norm spezifiziert den sicheren Hash-Algorithmus (SHA) mit einem Hash-Wert von 160 Bit Länge für beliebige digitale Daten von maximal 264 − 1 Bit (≈ 2 Exbibyte) Länge.
SHA ist wie die von Ronald L. Rivest entwickelten MD4 und MD5 eine Merkle-Damgård-Konstruktion mit Davies-Meyer-Kompressionsfunktion, und die Kompressionsfunktion ist auch ähnlich wie bei diesen konstruiert.
  • Mit seinem längeren Hash-Wert von 160 Bit gegenüber 128 Bit bei MD4 und MD5 ist SHA aber widerstandsfähiger gegen Brute-Force-Angriffe zum Auffinden von Kollisionen.
Die Nachricht wird mit einem Endstück erweitert, das die Länge der ursprünglichen Nachricht codiert.
  • Dann wird sie in 512 Bit lange Blöcke geteilt, welche nacheinander verarbeitet werden.
  • Dazu wird ein interner Datenblock von 160 Bit mittels einer Blockverschlüsselung verschlüsselt, mit dem Nachrichtenblock als Schlüssel.
  • Zum Schlüsseltext wird dann der Klartext wortweise modulo addiert.
  • Der so berechnete Datenblock wird nun mit dem nächsten Nachrichtenblock verschlüsselt oder nach dem Einarbeiten des letzten Nachrichtenblocks als Hashwert ausgegeben.

SHA-1

Aufbau einer Runde von SHA-0 und SHA-1

Der ursprüngliche SHA wurde wegen eines „Konstruktionsfehlers“ schon 1995 korrigiert und spielte deswegen in der Praxis kaum eine Rolle.

  • Er ist heute als SHA-0 bekannt, die korrigierte Variante als SHA-1.

Die Korrektur besteht nur in einem kleinen Detail (Rotation eines Datenwortes in der Schlüsseleinteilung), nicht jedoch in der Anzahl der durchlaufenen Runden oder sonstiger Maßnahmen, die unmittelbar eine wesentlich höhere Sicherheit erwarten lassen.

  • Die Kryptoanalyse bestätigt jedoch, dass die Rotation die Berechnung von Kollisionen erheblich erschwert.

Schwächen

Am 15. Februar 2005 meldete der Kryptographieexperte Bruce Schneier in seinem Blog[1], dass die Wissenschaftler Xiaoyun Wang, Yiqun Lisa Yin und Hongbo Yu von Shandong University in China erfolgreich SHA-1 gebrochen hätten.

  • Ihnen war es gelungen, den Aufwand zur Kollisionsberechnung von 280 auf 269 zu verringern.[2] 269 Berechnungen könnten eventuell mit Hochleistungsrechnern durchgeführt werden.

Kurze Zeit später, am 17. August 2005, wurde von Xiaoyun Wang, Andrew Yao und Frances Yao auf der Konferenz CRYPTO 2005 ein weiterer, effizienterer Kollisionsangriff auf SHA-1 vorgestellt, welcher den Berechnungsaufwand auf 263 reduziert.

Im August 2006 wurde auf der CRYPTO 2006 ein weit schwerwiegenderer Angriff gegen SHA-1 präsentiert.

  • Dabei sind bis zu 25 % der gefälschten Nachricht frei wählbar.
  • Bei bisherigen Kollisionsangriffen wurden die so genannten Hash-Zwillinge nur mit sinnlosen Buchstabenkombinationen des Klartextes gebildet.
  • Diese waren leicht erkennbar.

Ein kritisches Angriffsszenario erfordert, dass Angreifer eine zweite, in Teilen sinnvolle Variante eines Dokuments erzeugen, die den gleichen SHA-1-Wert und damit die gleiche Signatur ergibt.

  • Die beim Angriff verbleibenden 75 % sinnloser Zeichen (also Datenmüll) können vor ungeschulten Betrachtern ggf. technisch verborgen werden.
  • Der Angreifer kann behaupten, die gefälschte Variante sei anstatt der originalen Variante signiert worden.

Im Oktober 2015 veröffentlichten Marc Stevens, Pierre Karpman und Thomas Peyrin eine Freestart-Kollision für die Kompressionsfunktion von SHA1.

  • Damit waren bis dahin geltende Abschätzungen, wann es zu welchen Kosten möglich ist, für SHA-1 aufgrund steigender Rechenleistung Chosen-Prefix-Kollisionen zur Fälschung von TLS-Zertifikaten zu finden, hinfällig.[3][4] Sie empfahlen, von SHA-1 baldmöglichst zu SHA-2 oder SHA-3 überzugehen.

Im Februar 2017 veröffentlichten Google-Mitarbeiter eine erste Kollision von SHA-1.

  • Sie erzeugten zwei verschiedene funktionierende PDF-Dateien mit gleichem SHA-1-Prüfwert unter enormem Aufwand.
  • Eine einzelne CPU hätte etwa 6500 Jahre dafür benötigt.[5]

Im Jahre 2019 benötigten öffentlich bekannte Chosen-Prefix-Angriffe 266,9 bis 269,4 SHA-1-Berechnungen, um Kollisionen zu finden.

  • Das entsprach im Jahre 2017 100 GPU-Jahren Rechenkapazität.[6]

Empfehlungen

Als Reaktion auf die bekanntgewordenen Angriffe gegen SHA-1 hielt das National Institute of Standards and Technology (NIST) im Oktober 2005 einen Workshop ab, in dem der aktuelle Stand kryptologischer Hashfunktionen diskutiert wurde.

  • NIST empfiehlt den Übergang von SHA-1 zu Hashfunktionen der SHA-2-Familie (SHA-224, SHA-256, SHA-384, SHA-512).
  • Langfristig sollen diese durch den neuen Standard SHA-3 ersetzt werden.
  • Im Oktober 2015 empfahl Bruce Schneier zu SHA-3 überzugehen.[4]

Beispiel-Hashes

SHA1("Franz jagt im komplett verwahrlosten Taxi quer durch Bayern")
 = 68ac906495480a3404beee4874ed853a037a7a8f

Ein Tippfehler (G statt F) ändert den Text um nur ein Bit (ASCII-Code 0x47 statt 0x46):

SHA1("Granz jagt im komplett verwahrlosten Taxi quer durch Bayern")
 = 89fdde0b28373dc4f361cfb810b35342cc2c3232

Eine kleine Änderung der Nachricht erzeugt also einen komplett anderen Hash.

Der Hash eines Strings der Länge Null ist:

SHA1("")
 = da39a3ee5e6b4b0d3255bfef95601890afd80709

SHA-2

SHA-2

Das NIST hat vier weitere Algorithmen veröffentlicht, die größere Hash-Werte erzeugen.

  • Es handelt sich dabei um den SHA-224, SHA-256, SHA-384 und SHA-512, wobei die angefügte Zahl jeweils die Länge des Hash-Werts (in Bit) angibt.
  • Später kamen noch die Versionen SHA-512/256 und SHA-512/224 hinzu.
  • Diese Weiterentwicklungen werden häufig unter der Bezeichnung SHA-2 zusammengefasst.
  • Sie sind nach dem gleichen Konstruktionsprinzip aufgebaut wie SHA-1, man hat nur den internen Datenblock auf 256 bzw. 512 Bit vergrößert und die Blockverschlüsselung modifiziert, auf der die Kompressionsfunktion basiert.

Von den Algorithmen SHA-1 und SHA-256 hat man die Blockverschlüsselung SHACAL abgeleitet.

  • Diese besteht im Wesentlichen in der internen Blockverschlüsselung von SHA-1 bzw.
  • SHA-256, die hier für sich allein genutzt wird.

SHA-3

SHA-3

Weil man im Jahr 2004 grundlegende Schwächen der Merkle-Damgård-Konstruktion entdeckte, suchte das NIST nach einer neuen Hashfunktion, die wesentlich zukunftssicherer als SHA-2 sein sollte.

  • Es rief dazu zu einem Wettbewerb auf, wie zuvor bereits für den Advanced Encryption Standard (AES).
  • Die Wahl fiel im Oktober 2012 auf Keccak, die dann im August 2015 unter der Bezeichnung SHA-3 in verschiedenen Varianten standardisiert wurde.
  • SHA-3 ist grundlegend anders als SHA-2 aufgebaut, nämlich als sogenannte Sponge-Konstruktion.


Anhang

Siehe auch


Links

Projekt
Weblinks
  1. https://de.wikipedia.org/wiki/Secure_Hash_Algorithm
  2. FIPS PUB 180-4 Secure Hash Standard (PDF; 369 kB)
  3. SHA1-Passwort-Generator Online-Konverter zur Generierung von SHA1-Hashwerten aus normalem Text
  4. SHA-1 wird verabschiedet, SHA-2 startet (Update: SHA-3 wird Standard) IT-Security, von Christian Heutger, 6. August 2015.

Zu den Schwächen von SHA