IT-Security Teil 15: Hash-Verfahren, Zeitstempel, Zufall
IT-Security Teil 15: Hash-Verfahren, Zeitstempel, Zufall
IT-Security Teil 15: Hash-Verfahren, Zeitstempel, Zufall
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
<strong>IT</strong>-<strong>Security</strong><br />
<strong>Teil</strong> <strong>15</strong>: <strong>Hash</strong>-<strong>Verfahren</strong>, <strong>Zeitstempel</strong>, <strong>Zufall</strong><br />
<strong>IT</strong>Sec – SS 2013 - <strong>Teil</strong> <strong>15</strong>/<strong>Hash</strong>-<strong>Verfahren</strong>, <strong>Zeitstempel</strong>, <strong>Zufall</strong> 28.05.13 1
Übersicht<br />
• <strong>Hash</strong>-Funktionen<br />
• (Pseudo-)<strong>Zufall</strong>sgeneratoren<br />
• <strong>Verfahren</strong> für <strong>Zeitstempel</strong><br />
<strong>IT</strong>Sec – SS 2013 - <strong>Teil</strong> <strong>15</strong>/<strong>Hash</strong>-<strong>Verfahren</strong>, <strong>Zeitstempel</strong>, <strong>Zufall</strong><br />
2
Authentifizierung von Nachrichten I<br />
• Authentifizierung von Nachrichten = Prüfung, ob eine Nachricht<br />
in der vorliegenden Form von einer bestimmten Identität<br />
stammt, d.h.<br />
Inhalt und Herkunft werden geprüft.<br />
• Modifikationserkennungswert = Modification Detection Code =<br />
MDC = <strong>Hash</strong>-Wert (Fingerabdruck) von Nachrichten<br />
• Nachrichtenauthentifizierungswerte = Message Authentication<br />
Code = MAC = <strong>Hash</strong>-Wert (Fingerabdruck) von Nachrichten,<br />
wobei ein geheimer Schlüssel verwendet wird.<br />
• Mit einem MAC lässt sich die Integrität sowie die Herkunft einer<br />
Nachricht nachweisen, mit MDC nur die Integrität.<br />
<strong>IT</strong>Sec – SS 2013 - <strong>Teil</strong> <strong>15</strong>/<strong>Hash</strong>-<strong>Verfahren</strong>, <strong>Zeitstempel</strong>, <strong>Zufall</strong><br />
3
Authentifizierung von Nachrichten II<br />
Sender<br />
Empfänger<br />
(1)<br />
Nachricht<br />
Nachricht<br />
Nachricht<br />
H<br />
H<br />
Key<br />
Key<br />
= ?<br />
E<br />
D<br />
(2)<br />
Nachricht<br />
Nachricht<br />
Nachricht<br />
H<br />
H<br />
Secret-Key<br />
Public-Key<br />
= ?<br />
E<br />
D<br />
<strong>IT</strong>Sec – SS 2013 - <strong>Teil</strong> <strong>15</strong>/<strong>Hash</strong>-<strong>Verfahren</strong>, <strong>Zeitstempel</strong>, <strong>Zufall</strong><br />
4
Authentifizierung von Nachrichten III<br />
Sender<br />
Empfänger<br />
(3)<br />
H<br />
Nachricht<br />
Nachricht<br />
Nachricht<br />
H<br />
= ?<br />
Dies ist eine Variante, bei der ein geheimer <strong>Teil</strong> der Nachricht beim<br />
Erzeugen des <strong>Hash</strong>-Wertes hinzugefügt wird.<br />
Dieser <strong>Teil</strong> wird natürlich nicht übertragen.<br />
<strong>IT</strong>Sec – SS 2013 - <strong>Teil</strong> <strong>15</strong>/<strong>Hash</strong>-<strong>Verfahren</strong>, <strong>Zeitstempel</strong>, <strong>Zufall</strong><br />
5
Bemerkungen<br />
• Zum 1. <strong>Verfahren</strong> (1)<br />
Es wird ein gemeinsames Geheimnis (key) auf beiden Seiten zur<br />
Verschlüsselung des <strong>Hash</strong>wertes benutzt.<br />
Dies ist der symmetrischen Verschlüsselung sehr ähnlich.<br />
• Zum 2. <strong>Verfahren</strong> (2)<br />
Es wird das Prinzip der elektronischen Unterschrift (Signatur)<br />
angewandt.<br />
• Zum 3. <strong>Verfahren</strong> (3)<br />
Es wird an die Nachricht ein Geheimnis, das beide Seiten kennen<br />
müssen, angehängt und den <strong>Hash</strong> über beide <strong>Teil</strong>e gebildet.<br />
<strong>IT</strong>Sec – SS 2013 - <strong>Teil</strong> <strong>15</strong>/<strong>Hash</strong>-<strong>Verfahren</strong>, <strong>Zeitstempel</strong>, <strong>Zufall</strong><br />
6
Definition <strong>Hash</strong>-Funktion I<br />
• <strong>Hash</strong>-Funktion = Funktion h(x), für die folgendes gilt:<br />
– Kompression: Abbildung eines beliebigen Bitstrings auf einen<br />
Ausgabewert mit einer festen in der Regel kurzen Länge.<br />
Dieser ist der <strong>Hash</strong>-Wert.<br />
– Einfachheit: Für jeden Eingabewert x lasst sich die Funktion h(x) mit<br />
geringem Aufwand berechnen.<br />
• Beispiele:<br />
– Berechnung des Paritätsbits: Rechnernetze<br />
– Cyclic Redundancy Check (CRC): Rechnernetze, Plattenblöcke<br />
– Indizierung von Tabellen einer relationalen Datenbank<br />
– Zugriff auf Symboltabellen innerhalb von Compilern<br />
<strong>IT</strong>Sec – SS 2013 - <strong>Teil</strong> <strong>15</strong>/<strong>Hash</strong>-<strong>Verfahren</strong>, <strong>Zeitstempel</strong>, <strong>Zufall</strong><br />
7
Definition <strong>Hash</strong>-Funktion II<br />
• Kryptographische <strong>Hash</strong>-Funktion = <strong>Hash</strong>-Funktion h(x), für die<br />
zusätzlich noch folgendes gilt:<br />
– Unbestimmbarkeit von Urbildern:<br />
Nur mit erheblichen Aufwand ist das x für ein gegebenes y bei<br />
y=h(x) zu bestimmen.<br />
– Unbestimmbarkeit eines weiteren Urbildes:<br />
Nur mit erheblichen Aufwand ist für ein gegebenes x ein weiteres x'<br />
zu bestimmen, wobei h(x)=h(x') gilt.<br />
– Kollisionsfreiheit (Collision Resistance):<br />
Nur mit erheblichen Aufwand sind zwei beliebige x und x' zu<br />
bestimmen, wobei h(x)=h(x') gilt.<br />
Siehe dazu: http://de.wikipedia.org/wiki/Kryptologische_<strong>Hash</strong>funktion<br />
<strong>IT</strong>Sec – SS 2013 - <strong>Teil</strong> <strong>15</strong>/<strong>Hash</strong>-<strong>Verfahren</strong>, <strong>Zeitstempel</strong>, <strong>Zufall</strong><br />
8
Bemerkungen<br />
• Kollision = Eine Kollision liegt vor, wenn derselbe <strong>Hash</strong>-Wert<br />
anhand verschiedener Urbilder erzeugt werden kann.<br />
• Da das Urbild x (fast) immer größer ist als der <strong>Hash</strong>-Wert, z.B.<br />
160 bit, sind Kollisionen prinzipiell nie zu vermeiden:<br />
Beispiel: Block von 1 kbyte: 2 1024*8 Bit-Kombinationen werden auf<br />
2 160 Möglichkeiten abgebildet.<br />
• Praktisch haben Kollisionen nur in wenigen Fällen Relevanz, da<br />
menschlich lesbare Texte, z. B. Verträge, nur eine sehr kleine<br />
<strong>Teil</strong>menge aller Bitkombinationen benutzen.<br />
Aber: Durch Einfügen/Entfernen von Blanks o.ä. lässt sich<br />
"derselbe" Vertrag variieren, so dass zwei verschiedene Verträge<br />
denselben <strong>Hash</strong>-Wert ergeben könnten.<br />
<strong>IT</strong>Sec – SS 2013 - <strong>Teil</strong> <strong>15</strong>/<strong>Hash</strong>-<strong>Verfahren</strong>, <strong>Zeitstempel</strong>, <strong>Zufall</strong><br />
9
Struktur der <strong>Hash</strong>-Funktionen<br />
Nachricht<br />
Länge l<br />
M<br />
Länge anfügen und auf<br />
ganzzahliges Vielfaches<br />
einer Blocklänge ergänzen<br />
Blöcke<br />
mit b Bits<br />
M<br />
l<br />
Initialisierungsvektor<br />
(i.d.R. vorgegeben)<br />
b<br />
n<br />
f<br />
b<br />
n<br />
f<br />
n<br />
....<br />
Blockweise in Stücken von b Bits wird die Nachricht<br />
jeweils mit dem vorherigen Wert verknüpft.<br />
Der letzte Wert der Funktion f ist der <strong>Hash</strong>-Wert.<br />
<strong>IT</strong>Sec – SS 2013 - <strong>Teil</strong> <strong>15</strong>/<strong>Hash</strong>-<strong>Verfahren</strong>, <strong>Zeitstempel</strong>, <strong>Zufall</strong><br />
10
Ergänzungen<br />
• f() ist eine Kompressionsfunktion.<br />
• Bitlänge des <strong>Hash</strong>-Wertes sollte mindestens 160 bit sein.<br />
• Implementiert werden diese Funktionen, indem ein Register mit<br />
der <strong>Hash</strong>-Wertlänge (mind. 160 bit) in Schleifen (Runden)<br />
blockweise verknüpft wird:<br />
Nachricht M<br />
Initialisierung<br />
Register<br />
<strong>Hash</strong>-Wert<br />
....<br />
Funktion f<br />
....<br />
<strong>IT</strong>Sec – SS 2013 - <strong>Teil</strong> <strong>15</strong>/<strong>Hash</strong>-<strong>Verfahren</strong>, <strong>Zeitstempel</strong>, <strong>Zufall</strong><br />
11
Geburtstagsangriff I<br />
• Wie viele Personen müssen sich in einem Raum befinden, dass<br />
zwei Personen mit 50%iger Wahrscheinlichkeit am selben Tag<br />
Geburtstag haben?<br />
Antwort: 23<br />
• Allgemeiner:<br />
Wie viele Elemente müssen aus einer Menge mit n Elementen<br />
ausgewählt werden, damit mit einer Wahr-scheinlichkeit 0,5<br />
zwei identische gefunden werden?<br />
Antwort: Ca. Wurzel von n<br />
• Anders: Wie viele Texte müssen zufällig erstellt werden, damit<br />
diese mit 50%iger Wahrscheinlichkeit denselben <strong>Hash</strong>-Wert<br />
besitzen?<br />
Bei einer <strong>Hash</strong>-Wertlänge von 160 bit: 2 80 , was als nicht<br />
realisierbar gilt.<br />
<strong>IT</strong>Sec – SS 2013 - <strong>Teil</strong> <strong>15</strong>/<strong>Hash</strong>-<strong>Verfahren</strong>, <strong>Zeitstempel</strong>, <strong>Zufall</strong><br />
12
Wie verläuft der Geburtstagsangriff?<br />
1. Es gibt zwei Nachrichten m 1 und m 2 , wobei m 1 für den Angreifer<br />
schlecht und m 2 gut ist.<br />
2. Der Angreifer variiert m 1 und m 2 - z. B. Einfügen von Blanks<br />
oder Zeichen, die mit einem nachfolgenden Backspace<br />
unsichtbar gemacht werden o.ä. - und bestimmt die <strong>Hash</strong>-<br />
Werte.<br />
3. Nach durchschnittlich 2 r/2 Versuchen, wobei r die Länge des<br />
<strong>Hash</strong>-Wertes ist, hat der Angreifer zwei Variationen m 1 ' und m 2 ',<br />
gefunden, die denselben <strong>Hash</strong>-Wert besitzen.<br />
4. Nun lässt der Angreifer m 1 ' unterschreiben.<br />
5. Der Angreifer tauscht den unterschriebenen Text m 1 ' mit dem<br />
anderen Text m 2 ' aus....<br />
<strong>IT</strong>Sec – SS 2013 - <strong>Teil</strong> <strong>15</strong>/<strong>Hash</strong>-<strong>Verfahren</strong>, <strong>Zeitstempel</strong>, <strong>Zufall</strong><br />
13
Geburtstagsangriff II<br />
Was lehrt uns das?<br />
Der Unterschreibende sollte vor der Leistung der Unterschrift<br />
den Text kosmetisch, z.B. durch willkürliches Einfügen von<br />
Blanks verändern.<br />
Das Besagte bezog sich auf ASCII-Texte (siehe Backspace etc.).<br />
Mit Textsystemen ist es noch schlimmer, da auf der Binärfile-Ebene<br />
"unsichtbar" Daten eingefügt werden können...<br />
<strong>IT</strong>Sec – SS 2013 - <strong>Teil</strong> <strong>15</strong>/<strong>Hash</strong>-<strong>Verfahren</strong>, <strong>Zeitstempel</strong>, <strong>Zufall</strong><br />
14
Einfache <strong>Hash</strong>-Funktionen<br />
• Einfachstes <strong>Verfahren</strong>:<br />
– H(m) = b 1 XOR b 2 XOR ... XOR b n<br />
Blockweises Exclusiv-Oder aller Blöcke der Nachricht m<br />
– Ergebnis: Einfache longitudinale Parität<br />
– Nicht besonders sicher bzw. wirksam<br />
– Anwendungsbeispiel: Feststellung von Bitkippern<br />
• Verbesserung:<br />
1. <strong>Hash</strong>-Register:=0<br />
2. Für jeden n-bit-Block:<br />
• Verschiebung der <strong>Hash</strong>-Registers um 1 Bit nach links<br />
• Register:= Register XOR Block<br />
Hohes Maß an Erkennung von Bitkippern<br />
• Probleme beider <strong>Verfahren</strong>: Es lässt sich leicht eine andere<br />
Nachricht mit demselben <strong>Hash</strong>-Wert generieren.<br />
<strong>IT</strong>Sec – SS 2013 - <strong>Teil</strong> <strong>15</strong>/<strong>Hash</strong>-<strong>Verfahren</strong>, <strong>Zeitstempel</strong>, <strong>Zufall</strong><br />
<strong>15</strong>
Message Digest 5 (MD5) I<br />
• Entwickelt von Ron Rivest<br />
• Nachfolger von MD4<br />
• <strong>Hash</strong>-Wert: 128 bit für Blöcke von 512 bit Länge<br />
• Vorbereitung:<br />
– Ein Bit mit Wert 1 wird an die Nachricht m angehängt.<br />
– Dann so viele 0-Bits, bis die Länge ein Vielfaches zu 448 mod 512<br />
ist<br />
– Anfügen der Länge von m als 64-bit-Längenfeld<br />
– Vier Register á 32 bit werden initialisiert:<br />
A:= 0x01 23 45 67, B:= 0x89 AB CD EF<br />
C:= 0xFE DC BA 98, D:= 0x76 54 32 10<br />
(niederwertige Bits am Ende)<br />
<strong>IT</strong>Sec – SS 2013 - <strong>Teil</strong> <strong>15</strong>/<strong>Hash</strong>-<strong>Verfahren</strong>, <strong>Zeitstempel</strong>, <strong>Zufall</strong><br />
16
Message Digest 5 (MD5) II<br />
A B C D<br />
+<br />
g<br />
<strong>Teil</strong>e des<br />
aktuellen<br />
Blocks<br />
Werte aus<br />
Tabelle<br />
Shift-Bit-<br />
Anzahl aus<br />
Tabelle<br />
+<br />
+<br />
CLS<br />
A B C D<br />
• Jeder Block wird in 4 Runden mit jeweils 128 bit verarbeitet.<br />
• Jede Runde besteht auch 16 <strong>Teil</strong>schritten, in denen Tabellen-gesteuert<br />
zyklisch nach Links (CLS) geschoben und mit Werten aus einer Tabelle<br />
XOR wird<br />
• g ist ist eine rundenspezifische Funktion.<br />
• <strong>Hash</strong>-Wert ist am Ende der Wert in den Registern A bis D.<br />
<strong>IT</strong>Sec – SS 2013 - <strong>Teil</strong> <strong>15</strong>/<strong>Hash</strong>-<strong>Verfahren</strong>, <strong>Zeitstempel</strong>, <strong>Zufall</strong><br />
17
Sicherheit von MD5<br />
• 1996: Angriff realisiert, der eine Kollision auf einen <strong>Teil</strong> von MD5<br />
erzeugte<br />
• Trotzdem Misstrauen:<br />
Eingeschränkte Verwendung wird empfohlen<br />
• <strong>Hash</strong>-Länge von 128 bit wird als zu kurz angesehen.<br />
<strong>IT</strong>Sec – SS 2013 - <strong>Teil</strong> <strong>15</strong>/<strong>Hash</strong>-<strong>Verfahren</strong>, <strong>Zeitstempel</strong>, <strong>Zufall</strong><br />
18
Secure <strong>Hash</strong> Algorithm 1 (SHA-1)<br />
• National Institute of Standards (NIST) zusammen mit NSA<br />
– 1. Version: 1993 genormt, SHA<br />
– 2. Version: 1995, SHA-1<br />
• Name des Standards: Secure <strong>Hash</strong> Standard (SHS)<br />
SHA ist der Name des Algorithmus<br />
• Maximale Länge der Nachricht 2 64 bit<br />
• <strong>Hash</strong>-Wert: 160 bit<br />
• Blocklänge der Eingabe: 512 bit<br />
• Message Digest = MD = <strong>Hash</strong>-Wert einer kryptographischen<br />
<strong>Hash</strong>-Funktion<br />
<strong>IT</strong>Sec – SS 2013 - <strong>Teil</strong> <strong>15</strong>/<strong>Hash</strong>-<strong>Verfahren</strong>, <strong>Zeitstempel</strong>, <strong>Zufall</strong><br />
19
SHA-1 I<br />
Länge l<br />
Nachricht 100...0<br />
l<br />
512<br />
Initial<br />
Vector<br />
(160 bit)<br />
H H H H ....<br />
• Die Nachricht wird durch Auffüllen mit einer 1 gefolgt von 0 sowie<br />
Ergänzung der Nachrichtenlänge (64 bit) auf ein Vielfaches von 512 bit<br />
gebracht.<br />
• Der Message Digest-Puffer (MD-Puffer) besteht aus 5 Registern a 32<br />
bit. Vorbelegung: A:= 0x67 45 23 01, B:= 0xEF CD AB 89,<br />
C:= 0x98 BA DV EF, D:=10 32 54 76, E:=C3 D2 E1 F0<br />
<strong>IT</strong>Sec – SS 2013 - <strong>Teil</strong> <strong>15</strong>/<strong>Hash</strong>-<strong>Verfahren</strong>, <strong>Zeitstempel</strong>, <strong>Zufall</strong><br />
20
SHA-1 II<br />
A B C D E<br />
F<br />
+<br />
CLS<br />
+<br />
CLS<br />
+<br />
W<br />
<strong>Teil</strong>e des<br />
aktuellen<br />
Blocks<br />
+<br />
Werte aus<br />
Tabelle<br />
A B C D E<br />
• Jeder Block wird in 4 Runden á 20 Schritten bearbeitet.<br />
• Der Inhalt der 5 Register nach dem letzten Schritt ist der <strong>Hash</strong>-Wert.<br />
<strong>IT</strong>Sec – SS 2013 - <strong>Teil</strong> <strong>15</strong>/<strong>Hash</strong>-<strong>Verfahren</strong>, <strong>Zeitstempel</strong>, <strong>Zufall</strong><br />
21
Sicherheit von SHA-1<br />
• Die Entwurfskriterien von SHA-1 wurden bisher nicht<br />
veröffentlicht, so dass die Kryptoanalyse schwieriger ist.<br />
• Bis heute sind keine bedeutenden Angriffe bekannt.<br />
• Aufwand, um zwei Nachrichten mit demselben <strong>Hash</strong>-Wert<br />
erzeugen: 2 80 Operationen<br />
• Aufwand zu einer gegebenen Nachricht und dem <strong>Hash</strong>-Wert eine<br />
andere mit demselben <strong>Hash</strong>-Wert zu finden: 2 160 Operationen<br />
• SHA-1 ist ca. 25% langsamer als MD5, was dem längeren <strong>Hash</strong>-<br />
Wert entspricht.<br />
• RSA Labs empfiehlt SHA-1 für Anwendungen mit<br />
Kollisionsfreiheit.<br />
<strong>IT</strong>Sec – SS 2013 - <strong>Teil</strong> <strong>15</strong>/<strong>Hash</strong>-<strong>Verfahren</strong>, <strong>Zeitstempel</strong>, <strong>Zufall</strong><br />
22
Key-<strong>Hash</strong> (HMAC)<br />
• Reine <strong>Hash</strong>-Funktionen wie SHA-1 können allein nicht als MAC<br />
(Message Authentication Code) benutzt werden, da kein<br />
geheimer Schlüssel verwendet wird.<br />
• Das HMAC-<strong>Verfahren</strong> ist in RFC 2104 (Keyed-<strong>Hash</strong>ing for<br />
Message Authentication) 1997 definiert.<br />
• Entwurfsziele:<br />
– Unveränderter Gebrauch verfügbarer <strong>Hash</strong>-Funktionen<br />
– Ersetzbarkeit durch andere <strong>Hash</strong>-Funktionen<br />
– Einfache Verwendung von Schlüsseln<br />
• HMAC behandelt die <strong>Hash</strong>-Funktionen wie Black Boxes, d.h. es<br />
wird vom konkreten <strong>Hash</strong>-<strong>Verfahren</strong> abstrahiert.<br />
Siehe:<br />
http://tools.ietf.org/html/rfc2104<br />
http://de.wikipedia.org/wiki/Keyed-<strong>Hash</strong>_Message_Authentication_Code<br />
<strong>IT</strong>Sec – SS 2013 - <strong>Teil</strong> <strong>15</strong>/<strong>Hash</strong>-<strong>Verfahren</strong>, <strong>Zeitstempel</strong>, <strong>Zufall</strong><br />
23
Prinzip des HMAC-<strong>Verfahren</strong>s<br />
Konstante<br />
(wiederholtes 0x36)<br />
ipad<br />
+<br />
K + Linke Seite des<br />
geheimen Schlüssels<br />
Salt y 0 y 1 y 2 ... y n<br />
Initialisierungsvektor<br />
<strong>Hash</strong><br />
Konstante<br />
(wiederholtes 0x5C)<br />
opad<br />
+<br />
K +<br />
Auf Blocklänge<br />
auffüllen<br />
Salt<br />
Initialisierungsvektor<br />
<strong>Hash</strong><br />
HMAC<br />
<strong>IT</strong>Sec – SS 2013 - <strong>Teil</strong> <strong>15</strong>/<strong>Hash</strong>-<strong>Verfahren</strong>, <strong>Zeitstempel</strong>, <strong>Zufall</strong><br />
24
Bemerkungen<br />
• Salt = Salz = Begriff für ein für den Angreifer notwendiges, aber<br />
nicht bestimmbares Element<br />
"Um dem Angreifer die Suppe zu versalzen"<br />
• ipod/opod sind zwei im <strong>Verfahren</strong> festgelegte Konstanten.<br />
• K + ist der aufbereitete geheime Schlüssel K, wobei dem<br />
Schlüssel so viele Nullen angehängt werden, damit er die<br />
Blocklänge hat.<br />
Von diesem K + wird die linke Hälfte genommen, da ja in der<br />
rechten Hälfte nur Nullen vorhanden sind.<br />
• Es ist zu beachten, dass HMAC ein allgemeines <strong>Verfahren</strong> ist,<br />
dass keine bestimmten Schlüssellängen bzw. Blocklängen<br />
verlangt; daher sind in speziellen Fällen Anpassungen an die<br />
erforderlichen Längen nötig.<br />
<strong>IT</strong>Sec – SS 2013 - <strong>Teil</strong> <strong>15</strong>/<strong>Hash</strong>-<strong>Verfahren</strong>, <strong>Zeitstempel</strong>, <strong>Zufall</strong><br />
25
<strong>Zufall</strong>sgeneratoren<br />
• <strong>Zufall</strong>sbitgenerator = Random Bit Generator = Gerät oder<br />
<strong>Verfahren</strong>, das eine Sequenz statistisch unabhängiger und gleich<br />
verteilter Bitfolgen erzeugt.<br />
• Pseudozufallsbitgenerator = PZBG = Pseudo Random Number<br />
Generator = Gerät oder <strong>Verfahren</strong>, das einen deterministischen<br />
Algorithmus realisiert, als Eingabe eine zufällige Bitfolge der<br />
Länge k (Seed) erhält und eine Bitfolge der Länge l produziert,<br />
die den Eindruck der Zufälligkeit erweckt.<br />
• Seed = möglichst zufälliger Startwert eines PZBG<br />
<strong>IT</strong>Sec – SS 2013 - <strong>Teil</strong> <strong>15</strong>/<strong>Hash</strong>-<strong>Verfahren</strong>, <strong>Zeitstempel</strong>, <strong>Zufall</strong><br />
26
Drei Beispiele I<br />
<strong>Verfahren</strong> 1 (Linearer Kongruenzgenerator):<br />
• Parameter: a (Multiplikator), b (Inkrement) und q (Modul)<br />
• Startwert y 0<br />
• Produziert die Bitfolge y 1 , y 2 , y 3 etc.<br />
y i = (a*y i-1 + b) MOD q<br />
Generator hat bei guter Wahl von a, b und m die maximale<br />
Periodenlänge von m.<br />
Vorteil: Schnelligkeit<br />
<strong>IT</strong>Sec – SS 2013 - <strong>Teil</strong> <strong>15</strong>/<strong>Hash</strong>-<strong>Verfahren</strong>, <strong>Zeitstempel</strong>, <strong>Zufall</strong><br />
27
Drei Beispiele II<br />
<strong>Verfahren</strong> 2 (Quadratischer Kongruenzgenerator):<br />
• Parameter: a, b, c und q<br />
• Startwert y 0 , produziert die Bitfolge y 1 , y 2 , y 3 etc.<br />
y i = (a*y 2 i-1+ b*y i-1 + b) MOD q<br />
<strong>Verfahren</strong> 3 (Kubischer Kongruenzgenerator):<br />
• Parameter: a, b, c, d und q<br />
• Startwert y 0 , produziert die Bitfolge y 1 , y 2 , y 3 etc.<br />
y i = (a*y 3 i-1+ b*y 2 i-1+ c*y i-1 + d) MOD q<br />
Kryptographisch unbrauchbar, da auch ohne Kenntnis der Werte<br />
für a,... y aus der Reihe beobachteter Werte y i<br />
, y i+1<br />
,..., y i+j<br />
die folgenden korrekten Werte bestimmt werden können.<br />
M.a.W. alle drei <strong>Verfahren</strong> sind "geknackt".<br />
<strong>IT</strong>Sec – SS 2013 - <strong>Teil</strong> <strong>15</strong>/<strong>Hash</strong>-<strong>Verfahren</strong>, <strong>Zeitstempel</strong>, <strong>Zufall</strong><br />
28
Weitere Bedingung<br />
• Ein Pseudozufallsbitgenerator(PZBG) besteht den Next Bit Test,<br />
wenn kein Algorithmus mit polynominalen Aufwand existiert, der<br />
mit der Eingabe der ersten vom PZBG erzeugten m Bits als<br />
Ausgabe das (m+1)ste Bit mit einer Wahrscheinlichkeit größer<br />
als 0,5 vorhersagen kann.<br />
• Ein PZBG besteht den Next Bit Test, wenn er alle statistischen<br />
Tests besteht.<br />
• Ein PZBG wird kryptographisch genannt, wenn er den Next Bit<br />
Test besteht.<br />
<strong>IT</strong>Sec – SS 2013 - <strong>Teil</strong> <strong>15</strong>/<strong>Hash</strong>-<strong>Verfahren</strong>, <strong>Zeitstempel</strong>, <strong>Zufall</strong><br />
29
Beispiel für Korrekturverfahren<br />
Wenn ein PZBG nicht gleich verteilte, aber unkorrelierte<br />
Bitfolgen erzeugt:<br />
1. Bitfolge wird in Paare aufgeteilt.<br />
2. Alle 00- und 11-Paare werden verworfen.<br />
3. Jedes 01-Paar wird durch eine 1 ersetzt.<br />
4. Jedes 10-Paar wird durch eine 0 ersetzt.<br />
Wenn keine Korrelation vorliegt, erzeugt dieses <strong>Verfahren</strong><br />
unkorrelierte und gleich verteilte Bitfolgen.<br />
<strong>IT</strong>Sec – SS 2013 - <strong>Teil</strong> <strong>15</strong>/<strong>Hash</strong>-<strong>Verfahren</strong>, <strong>Zeitstempel</strong>, <strong>Zufall</strong><br />
30
Kryptographisch sicheres <strong>Verfahren</strong> (ANSI X9.17)<br />
int RandomX917(Bits s, int m, Bits key) {<br />
Bits q, x[];<br />
int i;<br />
x= malloc(m*sizeof(Bits));<br />
q= 3DES(key,TimeStamp);<br />
for (i=0;i
Erzeugung von (echten) <strong>Zufall</strong>szahlen I<br />
• Beobachtung der Zeitspanne zwischen Emissionen beim radioaktiven<br />
Zerfall (Zeitraum, in dem sich statistisch die Zeitspannen gleichen)<br />
• Messung thermischen Rauschens, z. B. von einer Diode.<br />
• Messung der Ladungsdifferenz zweier eng benachbarter Halbleiter<br />
• Messung der Zugriffszeiten auf Blöcke auf einer Platte<br />
• Messung der Zeitdifferenzen von Tastatureingaben<br />
• Analyse von Audio-/Videodaten von einer stark belebten Kreuzung<br />
Diese Rohdaten müssen in der Regel noch nachbearbeitet werden.<br />
<strong>IT</strong>Sec – SS 2013 - <strong>Teil</strong> <strong>15</strong>/<strong>Hash</strong>-<strong>Verfahren</strong>, <strong>Zeitstempel</strong>, <strong>Zufall</strong><br />
32
Erzeugung von (echten) <strong>Zufall</strong>szahlen II<br />
Es ist recht schwierig, an einem Computer, der ein deterministischer<br />
Automat ist, echten <strong>Zufall</strong> ohne Zusatzgeräte zu<br />
erzeugen.<br />
Ein gutes <strong>Verfahren</strong> kombiniert verschiedene Methoden:<br />
– Analyse der Tastatureingaben<br />
– Analyse von Mausbewegungen<br />
– Uhrzeit auf ms genau<br />
– Positionierungszeiten der Platte<br />
– Analyse von Transfers auf dem LAN<br />
Es werden von diesen Daten immer die niederwertigsten Bits<br />
benutzt.<br />
Diese Daten werden dann kombiniert und bilden einen<br />
<strong>Zufall</strong>swert, der eventuell als Seed eines Pseudozufallszahlengenerators<br />
benutzt wird.<br />
<strong>IT</strong>Sec – SS 2013 - <strong>Teil</strong> <strong>15</strong>/<strong>Hash</strong>-<strong>Verfahren</strong>, <strong>Zeitstempel</strong>, <strong>Zufall</strong><br />
33
<strong>Zeitstempel</strong>-<strong>Verfahren</strong> I<br />
Es wird eine vertrauenswürdige Partei TTP angenommen.<br />
<strong>Verfahren</strong> 1:<br />
1. A übermittelt der TTP eine Kopie des Dokuments.<br />
2. TTP zeichnet das Datum und Uhrzeit des Dokumentenempfangs auf<br />
und speichert es in einer Datenbank.<br />
3. TTP behält Kopie des Dokuments.<br />
• Zur Prüfung wendet sich B mit dem Dokument an TTP und lässt<br />
sich den Zeitpunkt sagen.<br />
• Nachteile<br />
• TTP kennt das unverschlüsseltes Dokument.<br />
• TTP muss sehr große Datenbank haben.<br />
• Fehleranfälligkeit der Übertragung (und Speicherung)<br />
• Parteien A und B können betrügerisch zusammenarbeiten<br />
<strong>IT</strong>Sec – SS 2013 - <strong>Teil</strong> <strong>15</strong>/<strong>Hash</strong>-<strong>Verfahren</strong>, <strong>Zeitstempel</strong>, <strong>Zufall</strong><br />
34
<strong>Zeitstempel</strong>-<strong>Verfahren</strong> II<br />
<strong>Verfahren</strong> 2:<br />
1. A erzeugt einen <strong>Hash</strong>-Wert des Dokuments .<br />
2. A übermittelt TTP den <strong>Hash</strong>-Wert.<br />
3. TTP fügt Datum und Uhrzeit an den <strong>Hash</strong>-Wert.<br />
4. TTP unterschreibt das Ganze.<br />
5. TTP übermittelt A unterschriebenen <strong>Hash</strong>-Wert mit <strong>Zeitstempel</strong><br />
• Zur Prüfung prüft B <strong>Zeitstempel</strong> und <strong>Hash</strong>-Wert sowie<br />
Unterschrift von TTP.<br />
Partei A<br />
Partei TTP<br />
Secret-Key<br />
Nachricht<br />
H<br />
Zeit<br />
H<br />
E<br />
Zeit<br />
<strong>IT</strong>Sec – SS 2013 - <strong>Teil</strong> <strong>15</strong>/<strong>Hash</strong>-<strong>Verfahren</strong>, <strong>Zeitstempel</strong>, <strong>Zufall</strong><br />
35
<strong>Zeitstempel</strong>-<strong>Verfahren</strong> III<br />
• <strong>Verfahren</strong> 2 löst alle Probleme bis auf das, dass A und B<br />
betrügerisch (hinsichtlich des Zeitpunkts) zusammenarbeiten<br />
können.<br />
<strong>Verfahren</strong> 3:<br />
• Idee: Verknüpfung mit an andere Identitäten ausgegebene<br />
<strong>Zeitstempel</strong><br />
• Dieses <strong>Verfahren</strong> verknüpft den <strong>Zeitstempel</strong> mit dem direkt davor<br />
ausgegebenen sowie (rekursiv) mit dem eventuell vorhandenen<br />
nächsten <strong>Zeitstempel</strong>.<br />
• Es wird eine Kette von <strong>Zeitstempel</strong>n, wobei per Unterschrift die<br />
jeweils benachbarten verknüpft werden.<br />
• Wird ein <strong>Zeitstempel</strong> angezweifelt, müssen die <strong>Zeitstempel</strong> der<br />
Identitäten I n-1 und I n+1 , also der benachbarten Stempel geprüft<br />
werden.<br />
Werden auch diese Stempel angezweifelt, so müssen die nächsten<br />
Nachbarn in der Kette geprüft werden: I n-2 und I n+2 usw.<br />
<strong>IT</strong>Sec – SS 2013 - <strong>Teil</strong> <strong>15</strong>/<strong>Hash</strong>-<strong>Verfahren</strong>, <strong>Zeitstempel</strong>, <strong>Zufall</strong><br />
36
<strong>Zeitstempel</strong>-<strong>Verfahren</strong> IV<br />
• Die zufällige Auswahl der Partner verhindert Betrug.<br />
• Je größer die Korruption in der Gesellschaft ist, desto größer<br />
muss k gewählt werden.<br />
Bemerkungen<br />
• Veröffentlichen von <strong>Zeitstempel</strong>n z. B. in Zeitungen erhöht die<br />
Sicherheit.<br />
• Die letzten zwei <strong>Verfahren</strong> (2 und 3) sind patentiert.<br />
<strong>IT</strong>Sec – SS 2013 - <strong>Teil</strong> <strong>15</strong>/<strong>Hash</strong>-<strong>Verfahren</strong>, <strong>Zeitstempel</strong>, <strong>Zufall</strong><br />
37
Nach dieser Anstrengung etwas Entspannung....<br />
<strong>IT</strong>Sec – SS 2013 - <strong>Teil</strong> <strong>15</strong>/<strong>Hash</strong>-<strong>Verfahren</strong>, <strong>Zeitstempel</strong>, <strong>Zufall</strong><br />
38