06.11.2013 Aufrufe

PDF Kryptologie

PDF Kryptologie

PDF Kryptologie

MEHR ANZEIGEN
WENIGER ANZEIGEN

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

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!