diff --git a/20230601/ad-20230601.txt b/20230601/ad-20230601.txt new file mode 100644 index 0000000000000000000000000000000000000000..55b8ebbcfdc054029b1c52f53d327a0228675da0 --- /dev/null +++ b/20230601/ad-20230601.txt @@ -0,0 +1,78 @@ +letzte Woche: + - https://befragung.hs-bochum.de/evasys/online.php?pswd=EWEPU + - RSA-Ver- und Entschlüsselung, Debugging-Techniken + - Stundenplan-Algorithmus + +heute: + - RSA-Ver- und Entschlüsselung mit binärer Exponentiation + - Langzahl-Algorithmen + - 15:00 Uhr: Mobilitätsumfrage + Im Rahmen des Klimaschutzkonzeptes sowie des Nachhaltigkeitsberichtes wird über + die nächsten vier Wochen eine Umfrage zur Erfassung des Mobilitätsverhaltens + aller Hochschulangehörigen durchgeführt. Diese dient zum einen der Ermittlung + der Treibhausgasemissionen des Pendelverkehrs für die Treibhausgasbilanz der + Hochschule Bochum. Zum anderen soll die Bekanntheit und Nutzung bestehender + Mobilitätsangebote abgefragt werden, die die BO klimafreundlicher gestalten. + +RSA, 25.05.2023, 16:20:49 +~~~~~~~~~~~~~~~~~~~~~~~~~ +Schlüsselerzeugung: + - d durch Durchprobieren zu finden, hat O(n), ist also + genauso langsam wie das Knacken der Verschlüsselung. + - Der erweiterte euklidische Algorithmus hat O(log n). + +Verschlüsseln und Entschlüsseln: + - Modulo-Exponentiation: in Schleife fortwährend multiplizieren, + in jedem Durchlauf modulo N rechnen. + (Andernfalls gibt es einen Überlauf. m^e oder c^d sind + riesengroße Zahlen - erst recht, wenn m, e, c und d bereits + riesengroße Zahlen sind.) + (Beobachtung: Wenn m (oder c) durch 2 teilbar ist, kommt + bei der Potenz ab e = 64 (bzw. d = 64) zuverlässig 0 heraus. + Für Details siehe: rsa-04.txt) + - Diese Methode der Modulo-Exponentiation hat O(n), ist also + genauso langsam wie das Knacken der Verschlüsselung. + - Um RSA brauchbar zu machen, benötigen wir einen Algorithmus + für die Modulo-Exponentiation, der deutlich schneller ist + als O(n), am besten O(log n) oder schneller. + +Wie kann man Modulo-Exponentiation effizienter programmieren, +als in einer Schleife fortwährend zu multiplizieren? + +Ansatz: +Wie kann man Multiplikation effizienter programmieren, +als in einer Schleife fortwährend zu addieren? +--> schriftlich +--> Schriftliche Multiplikation hat O(?). + + 42 · 137 + -------- + 42 \ + 126 3 · 42 = 126 } 1 Schleifendurchlauf pro Ziffer + 294 7 · 42 = 294 / + -------- + 462 + +--> Schriftliche Multiplikation hat O(log n). + (log n = Anzahl der Ziffern) + +Dasselbe binär: + + 11 · 101 + -------- + 11 Multiplikation mit 0 oder 1 ist trivial. + 0 + 11 + -------- + 1111 + +Übertragung: +Wie kann man Modulo-Exponentiation effizienter programmieren, +als in einer Schleife fortwährend zu multiplizieren? +--> Aus Plus wird Mal, aus Mal wird Hoch, aus 0 wird 1 (neutrales Element). +--> "Binäre Exponentiation" --> Wikipedia + +Aufgabe: + (a) Gegeben zwei Zahlen b und e (vom Typ int). + Berechnen Sie b^3 mittels binärer Exponentiation. + (b) Dasselbe modulo einer dritten Zahl n (vom Typ int).