Bei der Untersuchung einiger RSA-Verschlüsselungs- / Entschlüsselungsmethoden habe ich folgenden Artikel gefunden: Ein Beispiel für den RSA-Algorithmus
Dies ist erforderlich, um diese Nachricht zu entschlüsseln
Das Gesamtergebnis von ist so groß, dass es für eine 64-Bit / 32-Bit-Maschine meines Erachtens keinen so großen Wert in einem Register enthalten kann. Wie schafft es der Computer ohne Überlauf?
Diese Frage war eine Super User Frage der Woche .
Lesen Sie den Blog - Eintrag , um weitere Informationen oder tragen zu dem Blog selbst
computer-architecture
Kit Ho
quelle
quelle
Antworten:
Da die Ganzzahlmoduloperation ein Ringhomomorphismus ( Wikipedia ) von ℤ -> ℤ / nℤ ist,
Sie können dies selbst mit ein wenig einfacher Algebra überprüfen. (Beachten Sie, dass das Finale
mod
auf der rechten Seite aufgrund der Definition der Multiplikation in einem modularen Ring angezeigt wird.)Computer verwenden diesen Trick, um Exponentiale in modularen Ringen zu berechnen, ohne eine große Anzahl von Ziffern berechnen zu müssen.
In algorithmischer Form
Sie können dies verwenden, um
(855^2753) mod 3233
mit nur 16-Bit-Registern zu rechnen , wenn Sie möchten.Die Werte von X und N in RSA sind jedoch viel größer, zu groß, um in ein Register zu passen. Ein Modul ist typischerweise 1024-4096 Bits lang! Sie können also von einem Computer die Multiplikation auf die "lange" Strecke ausführen lassen, genauso wie wir die Multiplikation von Hand ausführen. Nur anstelle der Ziffern 0-9 verwendet der Computer "Wörter" 0-2 16 -1 oder ähnliches. (Mit nur 16 Bit können wir zwei 16-Bit-Zahlen multiplizieren und das vollständige 32-Bit-Ergebnis erhalten, ohne auf die Assemblersprache zurückgreifen zu müssen. In der Assemblersprache ist es normalerweise sehr einfach, das vollständige 64-Bit-Ergebnis zu erhalten, oder für einen 64-Bit-Computer , das vollständige 128-Bit-Ergebnis.)
Dies multipliziert X mit Y in einer Zeitspanne, die ungefähr der Anzahl der Wörter in X multipliziert mit der Anzahl der Wörter in Y entspricht. Dies wird als O (N 2 ) -Zeit bezeichnet. Wenn Sie sich den obigen Algorithmus anschauen und auseinander nehmen, ist es die gleiche "lange Multiplikation", die sie in der Schule unterrichten. Sie haben keine auf 10 Stellen gespeicherten Zeittabellen, aber Sie können dennoch 1.926.348 x 8.192.004 multiplizieren, wenn Sie sich hinsetzen und es herausarbeiten.
Lange Multiplikation:
Tatsächlich gibt es einige schnellere Algorithmen zum Multiplizieren ( Wikipedia ), wie die schnelle Fourier-Methode von Strassen, und einige einfachere Methoden, die zusätzliche Addition und Subtraktion, aber weniger Multiplikation ausführen und so insgesamt schneller enden. Numerische Bibliotheken wie GMP können verschiedene Algorithmen basierend auf der Größe der Zahlen auswählen: Die Fourier-Transformation ist für die größten Zahlen nur die schnellste, kleinere Zahlen verwenden einfachere Algorithmen.
quelle
mod N
am Ende des chinesischen Restsatzes fehlt ein Extra . ((16 mod 5)
(4 mod 5) * (4 mod 5)
mod
ist das überflüssig.(X * Y) mod N = (X mod N) * (Y mod N) mod N
ist wahr, aber es hat nichts mit dem chinesischen Restsatz zu tun.Die einfache Antwort ist, dass sie es nicht können, nicht alleine. Nimmt man das Konzept einer X-Bit-Maschine, so gibt es eine begrenzte Anzahl von Zahlen, die durch eine begrenzte Anzahl von Bits dargestellt werden können, genauso wie es eine begrenzte Anzahl von Zahlen gibt, die durch 2 Ziffern in dargestellt werden können das Dezimalsystem.
Davon abgesehen ist die Computerdarstellung von sehr großen Zahlen ein großer Bestandteil des Gebiets der Kryptographie. Es gibt viele Möglichkeiten, sehr große Zahlen in einem Computer darzustellen, von denen jede so unterschiedlich ist wie die andere.
Jede dieser Methoden hat unterschiedliche Vor- und Nachteile, und obwohl ich hier nicht alle Methoden auflisten kann / kann, werde ich eine sehr einfache vorstellen.
Angenommen, eine Ganzzahl kann nur Werte von 0 bis 99 enthalten. Wie könnte man die Zahl 100 darstellen? Das mag zunächst unmöglich erscheinen, aber das liegt daran, dass wir nur eine einzige Variable betrachten. Wenn ich eine ganze Zahl genannt hatte
units
und man riefhundreds
, konnte ich leicht 100 darstellen:hundreds = 1; units = 0;
. Ich könnte leicht eine größere Anzahl, wie 9223 darstellen:hundreds = 92; units = 23
.Obwohl dies eine einfache Methode ist, kann man argumentieren, dass sie sehr ineffizient ist. Wie die meisten Algorithmen, die die Grenzen dessen, was ein Computer kann, überschreiten, ist es normalerweise ein Tauziehen zwischen Leistung (repräsentieren große Zahlen) und Effizienz (schnelles Abrufen / Speichern). Wie ich bereits sagte, gibt es viele Möglichkeiten, große Zahlen in Computern darzustellen. finde einfach eine methode und experimentiere damit!
Ich hoffe das hat deine Frage beantwortet!
Weitere Lektüre:Dieser und dieser Artikel sind möglicherweise nützlich, um weitere Informationen zu erhalten.
quelle
Die Art und Weise, wie dies getan werden kann (es gibt viel schnellere Wege, die wiederholtes Quadrieren und dergleichen beinhalten), ist durch Multiplizieren und nach jeder Multiplikation den Modul zu nehmen. Solange das Quadrat des Moduls kleiner als 2 ^ 32 (oder 2 ^ 64) ist, wird dies niemals einen Überlauf haben.
quelle
So wie du es kannst.
Ich gehe davon aus, dass Sie nicht sofort wissen, was 342 * 189 ist. Aber Sie kennen die folgenden Fakten:
Wenn Sie diese einfachen Fakten kennen und eine Manipulationstechnik gelernt haben, können Sie rechnen, wie Sie es sonst nicht könnten.
Aus dem gleichen Grund kann ein Computer, der nicht mehr als 64 Bit Mathematik gleichzeitig verarbeiten kann, größere Probleme leicht in kleinere Teile aufteilen, diese kleineren Teile erledigen und sie wieder zusammensetzen, um die Antwort auf die größeren vorher zu bilden unbeantwortbares Problem.
quelle
In Bezug auf Addition und Subtraktion haben viele CPUs ein "Übertragsbit", das gesetzt wird, wenn die arithmetische Operation übergelaufen ist. Wenn das Speichern eines Ergebnisses 8 Bytes erfordert und die CPU 32 Bits umfasst (was 4 8-Bit-Bytes entspricht), kann sie zwei Additionsoperationen ausführen, zuerst für das "niedrige Wort" und dann für das "hohe Wort". mit dem Tragebit, das sich um den Überlauf kümmert. Das Übertragsbit muss zuerst gelöscht werden. Dies ist ein Grund, warum höhere Bit-CPUs die Leistung erhöhen, weil dies nicht so viel getan werden muss.
Das liegt natürlich an meiner begrenzten Assembler-Erfahrung mit 8-Bit-CPUs. Ich weiß nicht, wie das Übertragsbit bei modernen CPUs mit Multiplikations- und Divisionsbefehlen funktioniert. Nicht von Intel stammende RISC-CPUs können sich auch anders verhalten.
Ich weiß nicht viel über Gleitkomma-Mathematik, aber im Grunde genommen repräsentieren die Bytes eine feste Anzahl von Stellen, aber keine bestimmten Stellen. Deshalb wird es "Gleitkomma" genannt. So würde beispielsweise die Nummer 34459234 ungefähr den gleichen Speicherplatz belegen wie 3.4459234 oder 3.4459234E + 20 (das sind 3.4459234 x 10 ^ 20).
quelle