Das Okamoto-Uchiyama-Kryptosystem ist ein semantisch sicherer, asymmetrischer Verschlüsselungsalgorithmus. Es wurde erstmals im Jahr 1998 von Tatsuaki Okamoto und Shigenori Uchiyama an der Eurocrypt, einer der größten jährlich stattfindenden Kryptographiekonferenzen, vorgestellt.[1] Das Verfahren ist additiv-homomorph, was bedeutet, dass durch die Multiplikation zweier Schlüsseltexte die Klartexte addiert werden. Es ist also nicht nötig, die Schlüsseltexte zu entschlüsseln, um auf den Klartexten operieren zu können.
Wie viele asymmetrische Verschlüsselungsverfahren arbeitet das Okamoto-Uchiyama-Kryptosystem in der Gruppe . Allerdings ist der verwendete Modul im Gegensatz zu anderen Verfahren, z. B. RSA, von der Form , wobei große Primzahlen sind. Das Verfahren ist homomorph und leidet daher unter den damit einhergehenden Problemen.
Erzeugung des öffentlichen und privaten Schlüssels
Zum Entschlüsseln definiert man zuerst die Funktion . Dann erhält man die ursprüngliche Nachricht folgendermaßen:
Man definiert .
Man setzt .
Im letzten Schritt ist zu beachten, dass die Division modulo durchgeführt werden muss, d. h., durch Multiplikation mit dem multiplikativ Inversen. Die Division in der Berechnung von wird über den ganzen Zahlen ausgeführt.
Unter der p-Untergruppen-Annahme kann gezeigt werden, dass das Verfahren semantisch sicher ist. Das Invertieren der Verschlüsselung ist bewiesenermaßen ebenso komplex wie das Faktorisieren des Moduls .
Wie bei allen homomorphen Verschlüsselungsverfahren kann ein Angreifer einen Schlüsseltext derart verändern, dass er zu einem mit dem ursprünglichen Klartext verwandten Klartext entschlüsselt wird. Sei zum Beispiel die Verschlüsselung eines unbekannten Wertes . Dann kann durch Multiplikation mit der verschlüsselte Wert sehr einfach um jeden beliebigen Wert verändert werden:
.
Auf ähnlich Weise kann man auch den unbekannten Klartext auch mit einem beliebigen Faktor multiplizieren, indem man den Schlüsseltext exponentiert:
.
Um hier allerdings ein vernünftiges Resultat zu erreichen (z. B., eine Verdoppelung des Klartextes), muss garantiert sein, dass gilt, bzw. sogar , damit der Empfänger aus der Entschlüsselung keine Rückschlüsse auf die Manipulation ziehen kann (alle korrekt verschlüsselten Klartexte dürfen laut Vorschrift ja höchstens Bits lang sein).
Die homomorphen Eigenschaften werden u. a. im Zusammenhang mit den folgenden Anwendungen ausgenützt.
E-Voting: Nachdem jeder Wahlberechtigte seine Stimme (im einfachsten Fall eine 1 für ja, eine 0 für nein) verschlüsselt und an die Wahlbehörde übermittelt hat, werden alle Schlüsseltexte multipliziert, und die resultierende Verschlüsselung enthält die Verschlüsselung der Gesamtanzahl an Ja-Stimmen. Durch Entschlüsseln erhält man nun das Wahlergebnis. Wichtig ist, dass die den ersten Schritt ausführende Partei keine Kenntnis des geheimen Schlüssels benötigt, wodurch keine einzelnen Stimmen entschlüsselt werden können.
Aufgrund der angeführten Homomorphieeigenschaften ist das Verfahren allerdings nicht IND-CCA sicher, d. h. nicht sicher unter gewählten Schlüsseltext-Angriffen. Jedes Verschlüsselungssystem, das diese Sicherheit besitzt müsste nämlich auch nicht-verformbar sein, eine Eigenschaft die zur Homomorphie im Widerspruch steht. In der Literatur findet man auch Transformationen, das System in eine IND-CCA sichere Variante zu transformieren.[2][3] Ob diese Transformationen angebracht sind oder nicht, ist von der jeweiligen Anwendung abhängig.
Zunächst werden zwei geheime Primzahlen gewählt, beispielsweise und . Beide haben in der Binärdarstellung 10 Bits, d. h., es ist . Damit ergibt sich weiters:
Die zufällige, passende Wahl von liefert
, wobei und gilt.
Der öffentliche Schlüssel ist damit gegeben durch:
In einem ersten Schritt muss der zu verschlüsselnde Text in Zahlen kleiner als übersetzt werden. Wir ersetzen dazu einfach jeden Buchstaben durch seine Position im Alphabet:
Wichtig ist hier, dass die Division ausgeführt wird. Wir berechnen daher mittels des erweiterten Euklidischen Algorithmus das multiplikative Inverse von modulo und erhalten damit . Damit ergibt sich die Entschlüsselung zu:
m1 = L(2896520711018 mod 1038361) * 502 mod 1019 = 15
m2 = 21
m3 = 11
Durch Invertierung der Substitutionsvorschrift kann man diese Werte nun wieder in Buchstaben übersetzen.