Final touch

This commit is contained in:
2022-01-30 22:55:48 +01:00
parent 07fbd3d655
commit 5a26fe5940

View File

@ -6,18 +6,18 @@ Wir sollen die Nachricht trotzdem entschlüsseln.
## Lösung ## Lösung
### Brechen des privaten Schlüssels ### Brechen des öffentlichen Schlüssels
Geben ist der öffentliche Schlüssel Geben ist der öffentliche Schlüssel
``` ```python
e = 313949 In [1]: e = 313949
n = 965225095240772501 ...: n = 965225095240772501
``` ```
Der Modulo `n` wurde schon von auf [FactorDB](http://factordb.com/index.php?query=965225095240772501) faktorisiert. Der Modulo `n` wurde schon von auf [FactorDB](http://factordb.com/index.php?query=965225095240772501) faktorisiert.
Das gibt uns die Primzahlen Das gibt uns die Primzahlen
``` ```python
p = 982458689 In [2]: p = 982458689
q = 982458709 ...: q = 982458709
``` ```
Wir können `φ(n)` und damit den geheimen Teil des privaten Schlüsseln d berechnen, Wir können `φ(n)` und damit den geheimen Teil des privaten Schlüsseln d berechnen,
mit dem die RSA-Eigenschaft gilt: mit dem die RSA-Eigenschaft gilt:
@ -28,13 +28,12 @@ Dafür nehmen wir den erweiterten euklidischen Algorithmus und lösen
``` ```
e*d + φ(n)*y = 1 e*d + φ(n)*y = 1
``` ```
wobei `(1, d, y) = euclid(e, φ(n))` gilt. wobei
Wir erhalten `d` mittels [`modmath.py`](modmath.py):
``` ```
In [1]: e = 313949 ...: n = 965225095240772501 (1, d, y) = euclid(e, φ(n))
``` gilt.
In [2]: p = 982458689 ...: q = 982458709 Wir erhalten `d` mittels [`modmath.py`](modmath.py):
```python
In [3]: phi = (p-1) * (q-1) In [3]: phi = (p-1) * (q-1)
In [4]: d = modinv(e, phi) In [4]: d = modinv(e, phi)
@ -50,14 +49,14 @@ Hier brachen wir nur die RSA-Gleichung zum entschlüsseln anwenden:
m = c^d mod n m = c^d mod n
``` ```
Im Code müssen wir das nur für je 8 Byte des RSA-Teils machen: Im Code müssen wir das nur für je 8 Byte des RSA-Teils machen:
``` ```python
In [1]: c = [0x0215305e729ca8d3, 0x0cf8673b18795e9d, 0x02d9612fd611b485, 0x0b0c776db41af05f] In [1]: c = [0x0215305e729ca8d3, 0x0cf8673b18795e9d, 0x02d9612fd611b485, 0x0b0c776db41af05f]
In [2]: [hex(pow(x, d, n)) for x in c] In [2]: [hex(pow(x, d, n)) for x in c]
Out[2]: ['0x6b644b4f', '0x3245664b', '0x3068306e', '0x7a6f7563'] Out[2]: ['0x6b644b4f', '0x3245664b', '0x3068306e', '0x7a6f7563']
``` ```
Damit haben wir den AES-Schlüssel: Damit haben wir den AES-Schlüssel:
``` ```python
In [1]: k = 0x6b644b4f3245664b3068306e7a6f7563 In [1]: k = 0x6b644b4f3245664b3068306e7a6f7563
``` ```
@ -65,7 +64,7 @@ In [1]: k = 0x6b644b4f3245664b3068306e7a6f7563
Hier wird nur noch entsprechend des gegebenen Formats entschlüsselt Hier wird nur noch entsprechend des gegebenen Formats entschlüsselt
``` ```python
In [1]: with open('data.bin', 'rb') as f: In [1]: with open('data.bin', 'rb') as f:
...: _, content = f.read().split(b'|') ...: _, content = f.read().split(b'|')
...: ...:
@ -84,7 +83,7 @@ In [7]: with open("decrypt.bin", "wb") as f:
...: f.write(dec) ...: f.write(dec)
``` ```
Mit dem Programm [`file`](https://manpage.me/?q=file) können wir dann herausfinden, Mit dem Programm [`file`](https://manpage.me/?q=file) können wir dann herausfinden,
was man für eine Nachricht das ist: was für eine Nachricht das ist:
```bash ```bash
$ file decrypt.bin $ file decrypt.bin
decrypt.bin: ASCII text, with very long lines (5552), with no line terminators decrypt.bin: ASCII text, with very long lines (5552), with no line terminators