Cramer-Shoup-Kryptosystem

Aus testwiki
Version vom 9. Februar 2025, 20:44 Uhr von imported>Jellofi (growthexperiments-addlink-summary-summary:2|0|0)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Zur Navigation springen Zur Suche springen

Das Cramer-Shoup-Kryptosystem ist ein von Ronald Cramer und Victor Shoup entwickeltes asymmetrisches Kryptosystem, das als eine Erweiterung des Elgamal-Verschlüsselungsverfahrens aufgefasst werden kann.[1] Es war das erste praktikable Verschlüsselungsverfahren, das im Standardmodell (ohne Zufallsorakel) gegen adaptive Chosen-Ciphertext-Angriffe sicher war. Die Sicherheit des Verfahrens beruht auf der Schwierigkeit des Decisional-Diffie-Hellman-Problems.

Das Verfahren

Wie alle asymmetrischen Verschlüsselungen besteht auch das Cramer-Shoup-Verfahren aus drei Algorithmen.

Schlüsselerzeugung

  • Zuerst wählt man eine (hier multiplikativ geschriebene) zyklische Gruppe G von Primordnung q und in dieser zwei Erzeuger g1,g2. Zusätzlich muss noch eine kryptologische Hashfunktion H festgelegt werden. Diese Werte sind öffentliche Parameter und können von mehreren Benutzern gleichzeitig genutzt werden.
  • Dann werden als geheimer Schlüssel zufällige x1,x2,y1,y2,zq gewählt.
  • Aus diesen wird der öffentliche Schlüssel c=g1x1g2x2,d=g1y1g2y2,h=g1z berechnet.

Verschlüsselung

Um eine Nachricht mG mit dem öffentlichen Schlüssel (c,d,h) zu verschlüsseln geht man wie folgt vor:

  • Es wird ein zufälliges rq gewählt.
  • u1=g1r,u2=g2r
  • e=hrm Das ist die Verschlüsselung der Nachricht wie bei ElGamal.
  • α=H(u1,u2,e), wobei H eine universal-one-way Hashfunktion oder eine kollisionsresistente Hashfunktion ist.
  • v=crdrα. Dieses Element stellt sicher, dass ein Angreifer nicht Teile des Chiffrats benutzen kann um weitere Chiffrate zu erzeugen und sichert so die für die Sicherheit notwendige Nicht-Verformbarkeit

Das Chiffrat besteht dann aus (u1,u2,e,v).

Entschlüsselung

Um ein Chiffrat (u1,u2,e,v) mit dem geheimen Schlüssel (x1,x2,y1,y2,z) zu entschlüsseln führt man zwei Schritte durch.

  • Zuerst berechnet man α=H(u1,u2,e) und überprüft ob u1x1u2x2(u1y1u2y2)α=v. Falls das nicht der Fall ist, wird die Entschlüsselung abgebrochen und eine Fehlermeldung ausgegeben.
  • Falls nicht, berechnet man den Klartext m=e/(u1z).

Korrektheit

Die Korrektheit des Verfahrens folgt aus

u1z=g1rz=hr und m=e/hr.

Instanziierung

Als Sicherheitsniveau wählen wir die Standardlänge für generische Anwendungen von 128 bit.[2] Daraus ergibt sich eine Ausgabelänge von 256 bit für die Hashfunktion.[2] SHA-256 kann als kollisionsresistent angenommen werden.[3]

Man braucht eine Gruppe, in welcher das Decisional-Diffie-Hellman-Problem schwierig zu berechnen ist, wie etwa p*. Dazu wählt man eine Primzahl p mit einer Länge von 3248 bit, so dass die Gruppe eine multiplikative Untergruppe von Primordnung q hat, wobei q eine Länge von 256 bit haben sollte[2]. Das heißt, dass q|(p1) gelten muss. Aus der Wahl der Parameter ergibt sich eine Länge von 5256=1280 bit für den geheimen Schlüssel, und 33248=9744 bit für den öffentlichen Schlüssel. Ein Chiffrat ist 43248=12992 bit lang.

Einzelnachweise