260 likes | 339 Views
Kryptosysteme, Digitale Signaturen, Keymanagement. Digitale Signaturen Jürgen Ecker. Inhalt. Einführung RSA-Signaturen PKCS #1 ISO 9796 ElGamal-Signaturen DSS. Klassifikation. Digitale Signaturen mit message recovery
E N D
Kryptosysteme,Digitale Signaturen, Keymanagement Digitale SignaturenJürgen Ecker
Inhalt • Einführung • RSA-Signaturen • PKCS #1 • ISO 9796 • ElGamal-Signaturen • DSS
Klassifikation • Digitale Signaturen mit message recovery • Aus der Signatur kann die signierte Nachricht ermittelt werden, diese braucht nicht zusätzlich gesendet zu werden. • Digitale Signaturen ohne message recovery • Die signierte Nachricht ist zweiteilig, die Nachricht wird zusätzlich zur Signatur benötigt, um die Unterschrift überprüfen zu können. • Randomisierte Signaturschemata • Die Signatur hängt außer von der Nachricht und vom Schlüssel auch noch von einem zufälligen Parameter ab. • Deterministische Signaturschemata • Die Signatur hängt nur von der Nachricht und vom Schlüssel ab.
RSA-Signaturen mit message recovery • Setup: • Wähle RSA Schlüsselpaar (n,e), (n,d) • Wähle eine Redundanzfunktion R, die Nachrichten zu Zahlen zwischen 1 und n-1 macht (vorerst beliebig). • Signieren von m: • berechne m´ = R(m) Redundanz hinzufügen • berechne s = (m´)d mod n Signieren • Verifizieren von s: • berechne m´ = se mod n Signatur öffnen • prüfe, ob m´ in R(M) liegt Redundanz prüfen • berechne m = R-1(m´) message recovery
RSA-Signaturen mit message recovery • Zur Redundanzfunktion • Die Redundanzfunktion ist so zu wählen, dass es praktisch unmöglich ist, ohne den private key eine Signatur s zu erzeugen, so dass se mod n in R(M) liegt, d.h. die geforderte Redundanz besitzt. • Beispiel: Die Funktionswerte von R sind immer von der Form xx
RSA Signaturen in der Praxis: ISO/IEC 9796 • Eigenschaften • für PK Signaturschemata, • die aus k-Bit Nachrichten k-Bit Signaturen erzeugen • zum Signieren von Nachrichten begrenzter Länge • keine Hashfunktion benötigt • message recovery
ISO/IEC 9796: Notation Beispiel: k=1024, d=150, z=19, r=3, t=64
ISO/IEC 9796: Signieren Message • Auffüllen (padding):an die Nachricht m werden links 0 bis 7 Nullen angehängt, damit die Bitlänge ein Vielfaches von 8 wird. Man erhält die z-Byte Nachricht Auffüllen MP = mzmz-1… m2m1 Signatur
ISO/IEC 9796: Signieren Message • Erweiterung (extension)MP wird so oft links an MP angehängt, bis die so entstehende Bytefolge aus t Bytes besteht. Gegebenenfalls werden beim letzten Mal nur mehr die ersten paar Bytes von rechts verwendet. Man erhält die t-Byte Nachricht Auffüllen Erweiterung ME = MEtMEt-1 … ME2ME1 MP = mzmz-1… m2m1 Signatur
ISO/IEC 9796: Signieren Message • Redundanz • Verwendet wird eine Shadow-Funktion S • S(ab) = π(a)π(b) • man erhält die 2t-Byte-Folge • zuletzt wird das Byte S(MEz) durch rS(MEz) ersetzt. Auffüllen Erweiterung Redundanz MR = S(MEt)MEtS(MEt-1)MEt-1... S(ME1)ME1 ME = MEtMEt-1 … ME2ME1 Signatur
ISO/IEC 9796: Signieren Message • Truncatingman nimmt die k-1 rechten Bits von MR und fügt links eine 1 an. • Forcingmit dem Rabin-Signaturverfahren lassen sich nur Nachrichten signieren, die modulo 16 kongruent zu 6 sind, daher ersetzt man das letzte Byte ab durch b0110. • man erhält eine k-Bit Nachricht IR Auffüllen Erweiterung Redundanz Truncating/forcing MR = S(MEt)MEtS(MEt-1)MEt-1... S(ME1)ME1 Signatur
ISO/IEC 9796: Signieren Message • SignaturerstellungDie Nachricht IR wird signiert, man erhält eine k-Bit-Signatur s. Auffüllen Erweiterung Redundanz Truncating/forcing Signaturerstellung Signatur
ISO/IEC 9796: Verifizieren • Signatur öffnenDie Signatur s wird geöffnet und geprüft, ob die Nachricht IR´ mit 1 beginnt und mit 0110 endet.Andernfalls wird die Signatur zurückgewiesen. Signatur Signatur öffnen zurückweisen akzeptieren
ISO/IEC 9796: Verifizieren • Message recovery • Seien X die rechten k-1 Bits von IR´ • Seien abc0110 die rechten 4 Nibbles von X. • Stimmt das Format nicht, zurückweisen. • Ersetze abc0110 durch abπ-1(a)c. • Füge zwischen 0 und 15 Nullbits links an X an, um eine Bytefolge der Länge 2t zu erhalten Signatur Signatur öffnen message recovery zurückweisen akzeptieren
ISO/IEC 9796: Verifizieren • Ermittlung von z und r: • Aus MR´ = MR´2tMR´2t-1…MR´2MR´1 berechnet man für alle 1≤i≤t MR´2iS(MR´2i-1) • Sind alle Ergebnisse gleich 0 wird die Signatur zurückgewiesen. • Sonst ist z der kleinste Wert, so dass MR´2zS(MR´2z-1) ≠ 0. • Dann ist r = (MR´2zS(MR´2z-1)) mod 16. Liegt r nicht zwischen 1 und 8, wird die Signatur zurückgewiesen. Signatur Signatur öffnen message recovery zurückweisen akzeptieren
ISO/IEC 9796: Verifizieren • Ermittlung der ursprünglichen Nachricht • MP´i = MR´2i-1 für 1≤i≤z. • Sind die r-1 linken Bits von MP´ nicht gleich 0, so wird die Signatur zurückgewiesen. • Sonst besteht M´ aus den 8z-r+1 rechten Bits von MP´. Signatur Signatur öffnen message recovery zurückweisen akzeptieren
ISO/IEC 9796: Verifizieren • Redundanz prüfenDie Nachricht M´ wird (wie beim Signieren) den Schritten Auffüllen, Erweitern, Redundanz unterworfen, ist das Ergebnis nicht MR´, so wird die Signatur zurückgewiesen. Signatur Signatur öffnen message recovery Redundanz prüfen zurückweisen akzeptieren
RSA-Signaturen ohne message recovery • PKCS • Public Key Cryptography Standards • RSA Laboratories • ab 1991 • PKCS #1 • RSA Cryptography Standard • andere: • #3: DH-Key Agreement Standard • #6: Extended-Certificate Syntax Standard • #12: Personal Information Exchange Syntax Standard • #13: Elliptic Curve Cryptography Standard • …
PKCS #1: Signieren und Verifizieren • HashingNachricht wird mit MD2 oder MD5 gehasht • CodierungHashwert und Hashfunktionsidentifikator werden ASN.1- und anschließend BER-codiert. Nachricht Hashing Codierung Signatur
PKCS #1: Signieren und Verifizieren • Formatierung • D Bytestring mit |D| ≤ k-11. • BT (Blocktyp) ist 00 oder 01, empfohlen wird BT=01. • PS (padding string) ist Bytestring mit |PS| = k-3-|D|; ist BT=00, dann sind alle Bytes von PS gleich 00,ist BT=01, dann sind alle Bytes von PS gleich FF. • EB = 00BTPS00D. Nachricht Hashing Codierung Blockformatierung Bytestring2Integer RSA Integer2Bytestring Signatur
PKCS #1: Signieren und Verifizieren • Parsenprüfen, ob der Bytestring von der Form 00BTPS00D ist, wobei • D Bytestring mit |D| ≤ k-11. • BT (Blocktyp) ist 00 oder 01 • PS (padding string) ist Bytestring mit |PS| = k-3-|D|; ist BT=00, dann sind alle Bytes von PS gleich 00,ist BT=01, dann sind alle Bytes von PS gleich FF. Signatur Bytestring2Integer RSA Integer2Bytestring Parsen zurückweisen akzeptieren
PKCS #1: Signieren und Verifizieren • DecodierungBER-decodieren, Hashwert und Hashfunktionsidentifikator auslesen. Falls nicht decodierbar oder sinnlos, Signatur zurückweisen. Signatur Bytestring2Integer RSA Integer2Bytestring • HashingHashwert mit Hashfunktion gemäß Identifikator berechnen und vergleichen. Gegebenenfalls Signatur zurückweisen. Parsen Decodierung zurückweisen Hashing + Vergleich akzeptieren
DSS • Digital Signature Standard • DSA (Digital Signature Algorithm) • FIPS 186 • Variante des ElGamal-Signaturschemata • verwendete Hashfunktion ist SHA-1
DSS: Schlüsselerzeugung • Wähle q, so dass 2159 < q < 2160. • Wähle t, so dass 0 ≤ t < 8. Wähle t=8. • Wähle p prim, so dass gilt 2511+64t < p < 2512+64t und q | p-1. • Wähle ein Element g der Ordnung q in Zp*. • Wähle a zufällig, so dass 1 < a < q-1. • Berechne A = ga mod p. • Public key ist (p,q,g,A), secret key ist a.
DSS: Signieren und Verifizieren • Signieren: • Wähle k zufällig, so dass 1 < k < q. • Berechne r = (gk mod p) mod q. • Berechne s = k-1(h(m)+ar) mod q. • Signatur ist (r,s). • Verifizieren: • Prüfe 0 < r < q und 0 < s < q. • Berechne x = s-1.h(m) mod qund y = r.s-1 mod q. • Prüfe r = (gx .Ay mod p) mod q.