26.5 Lösungen |
|
Übung 1
Download: |
In einem 1024-bit-langem Block lassen
sich 21024 verschiedene "Zeichen" darstellen. Wir schätzen die
Anzahl der Stellen dieser Zahl (im Dezimalsystem) ab. Gilt 10k ≤ 21024 ≤ 10k+1 dann hat die Zahl zwischen k+1 und k+2 Stellen (führende Ziffer ≥ 1). Wir lösen: k log210 ≤ 1024 und damit k ≤ 1024 (lg2 / lg10) = 1024 lg2 ≈ 308,3 Die Zahl hat also 309 Stellen mit mindestens einer führenden 1. Die exakte Zahl 21024 ist
1797693134862315907729305190789024733617976978942306572734 Sie wurde mit einem kleinen Java-Programm berechnet. Das Programm gibt auch die Anzahl der Stellen aus, nämlich 309. Die Ergebnisse machen zweierlei deutlich:
|
Übung 2 Download Primzerlegung. java |
Eva hat eine Chance, die geheime
Botschaft c = 25 zu entschlüsseln, denn n = 391 ist eine kleine Zahl. Eva muss
die Primzahlen p und q finden, deren Produkt p.q den Wert
von n liefert. Bei n = 391 geht das noch relativ leicht. Eva benutzt dazu
ein Programm, das auch größere Zahlen in zwei Primfaktoren zerlegen kann,
falls dies überhaupt möglich ist. Es liefert die beiden Primzahlen
17 und 23. (Siehe dazu auch die Bemerkungen zum
Primzerlegungs-Programm) |
Download: DeCrypt.java |
Mit den beiden Primfaktoren hat Eva
auch die Zahl z = (p-1).(q-1) = 16.22 = 352. Jetzt
kann sie den Wert von d des privaten Schlüssels (n,d) berechnen. Denn es
gilt d = (k.z-1)/e, wobei der k-Wert so zu wählen ist, dass der Quotient
restfrei ist. Sie schreibt ein Programm in dem sie k bei 1 beginnen
lässt und
solange inkrementiert, bis der Rest des Quotienten 0 ist. So erhält d =
5 und damit den privaten Schlüssel, (n, d) = (391, 5). Mit
m = cd mod n = 255 mod 391 = 9 hat sie die Botschaft
entschlüsselt. |
Bemerkungen zum Primzerlegungs- Programm:
Download: |
Das Programm Primzerlegung kann auch
größere Primzahlprodukte untersuchen. Zum Testen kann man das Produkt
501561630838755901
zerlegen lassen. Es liefert die beiden Primzahlen
628171751
und 798446651.
Diese Primzahlen wurden übrigens erzeugt von einem kleinen Programm
Primzahlerzeuger.
Es erzeugt zwei Zufallszahlen definierter Länge (in bit), die
'möglicherweise' Primzahlen sind; d.h. es gibt keine Garantie, dass es
sich bei den beiden Zufallszahlen um Primzahlen handelt. Weiter wird das
Produkt der beiden Zahlen berechnet. Das Programm hatte z.B. zwei
Primzahlen und ihr Produkt geliefert
628171751 Die Zerlegung des Produktes mit dem Primzerleger-Programm (s. o.) bestätigt, dass es sich bei den Zufallszahlen tatsächlich um Primzahlen gehandelt hatte. Die Zerlegung benötigt geraume Zeit und das bei einem Produkt aus zwei nur 9-stelligen Primzahlen. Wie mit der Größe der Primzahlen die Chance in vernünftigen Zeiten eine Zerlegung und damit eine RSA-Entschlüsselung zu schaffen, schwinden, ist dadurch eindringlich demonstriert. Diese Aussage bleibt richtig, auch wenn man effektivere Algorithmen zum Zerlegen in Primfaktoren benutzt. |
Übung 3 |
Wenn wir immer vier ASCII-Zeichen
zu einer Dezimalzahl zusammenfassen, dann ist der so erzeugte, maximale
Wert 99999999. Demnach müssen wir n 9-stellig wählen. Die Primzahlen
können wir dann aus dem Bereich von 0 bis 15000 wählen. Die Klasse
Schluessel hat das folgende Aussehen. |
Download: Schluessel.java |
|
Die Methoden zum Erzeugen von
Primzahlen wurde in der Klasse
Mathgematik.java
implementiert, da sie auch für andere Projekte interessant sein kann.
Bemerkungen zur Implementierung befinden sich im Quelltext des
Downloads. |
|
Die Methode erzeugePrim(..) |
|
Die Methode
erzeugePrim(int
u, int o):
int
benutzt die Methode
prim(int
a): boolean ,
die ebenfalls in der Klasse Mathematik implementiert ist. Bemerkungen
zur Implementierung befinden sich wieder im Quelltext vom Download.Kommen wir zur Klasse
RSA32bitEnCrypt; sie besitzt nur eine Methode, nämlich das Verschlüsseln
eines übergebenen Originaltextes nach der Methode RSA mit Hilfe der
ebenfalls übergebenen öffentlichen Schlüssels. |
|
Download: RSA32bit EnCrypt.java |
|
Eine ausführliche Dokumentierung findet sich im Quelltextes des Downloads. | |
Download: RSA32bit DeCrypt.java |
|
Eine ausführliche Dokumentierung findet sich auch hier wieder im Quelltextes des Downloads. | |
alles Klassen der Lösung 3 | Mathematik.java, Schluessel.java, RSA32bitEnCrypt.java, RSA32bitDeCrypt.java, RSA32bitGUI.java. |
zu |
27 Steganografie 27.1 Was ist Steganografie? |
zur Startseite | www.pohlig.de (C) MPohlig 2006 |