diff --git a/weak-hybrid-encryption/README.md b/weak-hybrid-encryption/README.md index 57d7e64..b5ca91e 100644 --- a/weak-hybrid-encryption/README.md +++ b/weak-hybrid-encryption/README.md @@ -6,18 +6,18 @@ Wir sollen die Nachricht trotzdem entschlüsseln. ## Lösung -### Brechen des privaten Schlüssels +### Brechen des öffentlichen Schlüssels Geben ist der öffentliche Schlüssel -``` -e = 313949 -n = 965225095240772501 +```python +In [1]: e = 313949 + ...: n = 965225095240772501 ``` Der Modulo `n` wurde schon von auf [FactorDB](http://factordb.com/index.php?query=965225095240772501) faktorisiert. Das gibt uns die Primzahlen -``` -p = 982458689 -q = 982458709 +```python +In [2]: p = 982458689 + ...: q = 982458709 ``` Wir können `φ(n)` und damit den geheimen Teil des privaten Schlüsseln d berechnen, 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 ``` -wobei `(1, d, y) = euclid(e, φ(n))` gilt. -Wir erhalten `d` mittels [`modmath.py`](modmath.py): +wobei ``` -In [1]: e = 313949 ...: n = 965225095240772501 - -In [2]: p = 982458689 ...: q = 982458709 - +(1, d, y) = euclid(e, φ(n)) +``` gilt. +Wir erhalten `d` mittels [`modmath.py`](modmath.py): +```python In [3]: phi = (p-1) * (q-1) 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 ``` 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 [2]: [hex(pow(x, d, n)) for x in c] Out[2]: ['0x6b644b4f', '0x3245664b', '0x3068306e', '0x7a6f7563'] ``` Damit haben wir den AES-Schlüssel: -``` +```python In [1]: k = 0x6b644b4f3245664b3068306e7a6f7563 ``` @@ -65,7 +64,7 @@ In [1]: k = 0x6b644b4f3245664b3068306e7a6f7563 Hier wird nur noch entsprechend des gegebenen Formats entschlüsselt -``` +```python In [1]: with open('data.bin', 'rb') as f: ...: _, content = f.read().split(b'|') ...: @@ -84,7 +83,7 @@ In [7]: with open("decrypt.bin", "wb") as f: ...: f.write(dec) ``` 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 $ file decrypt.bin decrypt.bin: ASCII text, with very long lines (5552), with no line terminators