Zahlentheoretische Algorithmen der KryptografieChinesischer Restsatz | |
Herr A. hat in diesem Jahr einen runden Geburtstag gefeiert; gleichzeitig hat er auch ein volles Jahrsiebt vollendet. Wie alt ist Herr A. geworden? Die Antwort – 70 Jahre – ist nicht schwer zu erraten. Herr L. dagegen hat das letzte volle Jahrsiebt vor 2 Jahren vollendet; sein letzter runder Geburtstag liegt bereits 8 Jahre zurück. Wie alt ist Herr L.?
Interessant ist, dass tatsächlich auch das Alter x von Herrn L. durch diese beiden Angaben eindeutig festliegt, jedenfalls wenn man von einem realistischen Alter eines Menschen ausgeht, nämlich
Jahre.
Die Zahl x ergibt bei ganzzahliger Division durch 7 den Rest 2 und bei ganzzahliger Division durch 10 den Rest 8. Welche Zahl ist x?
Die Zahl x lässt sich also darstellen als
x = s·7 + 2 = t·10 + 8
oder allgemein
x = s·m + a = t·n + b
Anders ausgedrückt gilt
x
a (mod m) und
x
b (mod n).
Die Zahlen m und n werden in diesem Zusammenhang als Moduln bezeichnet, die Zahlen a und b als die zugehörigen Reste.
Der sogenannte chinesische Restsatz sagt aus, dass wenn die Moduln m und n teilerfremd sind, es modulo m·n eine eindeutige Lösung x gibt.
Da m und n teilerfremd sind, lässt sich der größte gemeinsame Teiler 1 darstellen als
1 = u·m + v·n
Die Koeffizienten u und v sind hier nicht eindeutig bestimmt, sondern es gibt viele Werte für u und v, die die Gleichung erfüllen. Der erweiterte euklidische Algorithmus berechnet aus m und n den größten gemeinsamen Teiler sowie jeweils einen möglichen Wert für u und v.
Multiplikation mit (b-a) ergibt
b-a = (b-a)·u·m + (b-a)·v·n
Durch Umordnen ergibt sich
(b-a)·u·m + a = -(b-a)·v·n + b
Damit sind die gesuchten Koeffizienten s und t für m und n gefunden. Somit ist
x = (b-a)·u·m + a
eine mögliche Lösung.
Gesucht ist jedoch die eindeutige Lösung modulo m·n. Um den Wert von x modulo m·n zu berechnen, genügt es, das Produkt (b-a)·u modulo n zu reduzieren, denn es ist
(b-a)·u mod n · m + a
< (b-a)·u mod n · m + m (da a < m)
= ((b-a)·u mod n + 1) · m
((n-1) + 1 ) · m
= n · m
Somit ist
x = (b-a)·u mod n · m + a
die gesuchte, eindeutig bestimmte Zahl.
Der chinesische Restsatz lässt sich allgemein für k teilerfremde Moduln und zugehörige Reste formulieren.
Satz: (Chinesischer Restsatz)
Gegeben sind k
teilerfremde Moduln q0, ..., qk-1 und zugehörige Reste r0, ..., rk-1. Die Zahl x, die jeweils modulo qi den Rest ri ergibt, ist modulo des Produktes aller qi eindeutig bestimmt.
Die folgende rekursive Funktion chineseRemainder erhält als Parameter eine Liste q von Moduln und eine Liste r von zugehörigen Resten. Wenn diese Listen nur aus jeweils einem Element bestehen, gibt die Funktion diese Elemente zurück. Ansonsten berechnet sie rekursiv zuerst die Zahl a modulo m, die sich nach dem chinesischen Restsatz aus der ersten Hälfte der qi und ri ergibt, und dann die Zahl b modulo n, die sich aus der zweiten Hälfte der qi und ri ergibt. Die Produkte m und n sind teilerfremd, da alle qi untereinander teilerfremd sind. Mithilfe des erweiterten euklidischen Algorithmus extgcd wird der Wert u berechnet; die Werte g und v werden nicht verwendet. Aus m und n sowie den zugehörigen Resten a und b lässt sich dann nach dem oben angegebenen Verfahren die Lösung x berechnen. Die Funktion gibt außer dieser Lösung x auch den zugehörigen Modul m·n zurück.
Es folgt die Implementierung in der Programmiersprache Python. Es wird wiederum von der Möglichkeit der Tupel-Wertzuweisung Gebrauch gemacht (so liefert etwa die Funktion extgcd ein Tupel von drei Werten). Die Notation q[:k] bezeichnet einen Ausschnitt (slice) aus der Liste q vom Beginn bis zum Index k (ausschließlich). In ähnlicher Weise bezeichnet q[k:] einen Ausschnitt vom Index k (einschließlich) bis zum Ende der Liste.
| Chinesischer-Restsatz-Algorithmus | ||
| Eingabe: | Liste q von teilerfremden Moduln, Liste r von Resten | |
| Ausgabe: | Produkt der Moduln, Zahl x nach dem chinesischen Restsatz | |
| Methode: |
| |
Der Vorteil dieser Implementierung nach dem Divide-and-Conquer-Prinzip
besteht darin, dass in den unteren Rekursionsebenen viele Berechnungen mit kleinen Zahlen stattfinden und erst in den oberen Rekursionsebenen wenige Berechnungen mit großen Zahlen.
| [AHU 74] | A.V. Aho, J.E. Hopcroft, J.D. Ullman: The Design and Analysis of Computer Algorithms. Addison-Wesley (1974) | |
| [CLRS 01] | T.H. Cormen, C.E. Leiserson, R.L. Rivest, C. Stein: Introduction to Algorithms. 2. Auflage, The MIT Press (2001) | |
Weiter mit: [Faktorisierung: Quadratisches Sieb] oder ![]() |
|
|
|
Informatik in Flensburg studieren...
Neues Studienangebot
Wir bieten Ihnen ein praxisorientiertes Informatik-Studium mit Schwerpunkt auf modernsten Webtechnologien.
Sehen Sie sich einmal den Studienplan an.
Ihr Abschluss
nach 7 Semestern:
Bachelor of Science
Weitere Informatik-Studienangebote an der Fachhochschule Flensburg:
Medieninformatik Medieninformatik
Informations- und Kommunikationstechnik