PDF Kryptologie
PDF Kryptologie
PDF Kryptologie
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
<strong>Kryptologie</strong> – Eine verschlüsselte Wissenschaft 56<br />
35 + 1756 = 1791 mod 10 = 1<br />
5 + 6 = 1<br />
Diese Rechenregel lässt sich auf die beiden Punktrechnungsarten (Addition & Multiplikation)<br />
anwenden. Nicht jedoch auf Division oder Subtraktion. Der Grund dafür liegt<br />
in der Tatsache, dass die Einerstelle bei einer Rechenoperation verantwortlich ist für die<br />
Einerstelle des Ergebnisses und alle weiteren Stellen. Die Zehnerstelle (zB eines Summanden)<br />
kann jedoch nicht die Einerstelle des Ergebnisses beeinflussen. Nur bei Subtraktion<br />
und Division ist dies schon der Fall.<br />
4.9 Potenzieren und Reste berechnen<br />
4.9.1 Square and Multiply in python<br />
”Square and Multiply” ist ein wunderbares Verfahren. Es ist mathematischer Optimierungsalgorithmus,<br />
um den Modulo einer potenzierten Zahl zu berechnen. Als ich vor<br />
einem mathematischen Problem 5 stand, schrieb ich eine gewöhnliche Anwendung,die<br />
a c mod m berechnet. Der Algorithmus benötigt 3 Minuten zur Lösung des Problems.<br />
Als ich Square and Multiply anwand, verkürzte sich die Laufzeit auf 7 Sekunden. Das<br />
liegt daran, dass bei einem normalen Verfahren, der Computer für a c (a·(c − 1)) Multiplikationen<br />
durchführen muss. Bei SaM reduziert es sich auf die Anzahl der Stellen der<br />
Binärzahl von c. Im Vergleich bedeutet dies bei der Rechnung 12334 8402 herkömmlich<br />
8402 Schritte und mit SaM nur 14 Schritte.<br />
In modernen Programmiersprachen wie python ist SaM bereits eingebaut (in der Funktion<br />
pow()). SaM vereinfacht das Potenzieren, indem der Exponent mit den Potenzrechenregeln<br />
zerlegt wird. Es gibt verschiedene Varianten. Normalerweise arbeitet man mit<br />
der binären Exponentation. Der folgende Programmcode kommt ohne Binärzahlen aus.<br />
a = 12334<br />
c = 8402<br />
m = 13<br />
r e s = 1<br />
while c != 0 :<br />
while c % 2 == 0 :<br />
c = c / 2<br />
a = ( a ∗∗2) % m<br />
c = c − 1<br />
r e s = ( r e s ∗ a ) % m<br />
5 http://projecteuler.net