Hash-Funktionen
Digitale Signaturen sind sehr mächtig, allerdings ist die Nachrichtenlänge begrenzt. Bsp. RSA mit 2048 Bit. Wir könnten natürlich die Nachricht in n Teile schneiden und diese ebenfalls signieren, doch dafür ist der Algorithmus zu langsam und die Größe des Gesamtpaketes würde extrem ansteigen. Ferner erlaubt eine Signatur über Teilblöcke Manipulationen der einzelnen Teilblöcke (ersetzten, löschen).
Wir benötigen also eine Möglichkeit Daten unabhängig von ihrer Größe mit einer Signatur fester Länge zu versehen. Diese können wir mit Hash-Funktionen erreichen.
Basisprotokoll: Digitale Signaturen mit Hash-Funktionen.
| Alice | Bob | |
| erstellt Kpublic und Kprivate | ||
| Bob überträgt Kpublic | ||
|
berechnet hash( x ) = z sigKprivate ( z ) = y |
||
| Bob überträgt (x, y) | ||
|
berechnet hash ( x ) = z verKpublic( z, y) |
Eigenschaften von Hash-Funktionen
- Hash-Funktionen sind Schlüssellos.
- Der Input kann beliebig lang sein.
- Der Output hat eine feste Länge, z.B. 160 Bit
- Soll sehr effizient sein.
Sicherheitseingenschaften
mögliche Angriffe
Preimage
Hash-Funktionen müssen Einweglösungen sein. Wenn z gegeben ist muss es unmöglich sein x zu berechnen.
second preimage / schwache Kollisionsresistenz
Genauso darf es dem Angreifer nicht möglich sein zu einem gegeben x1 ein zweites x2 zu finden das den gleichen Hashwert wie x1 hat. Dies wird auch schwache Kollisionsresistenz genannt
starke Kollisionsresistenz
Um die Sicherheitsanforderungen weiter zu erhöhen darf es einem Angreifer auch nicht möglich sein zwei beliebige Nachrichten zu finden die den gleichen Hashwert haben. Unter anderem ist die Ausgangslänge entscheidend wie schwer es ist eine Kollision zu finden, allgemein gelten 80 Bit lange Hashs als ausreichend.
Aktualisiert (Freitag, den 06. August 2010 um 23:15 Uhr)