2017-06-12 2 views
0

Ich versuche, einen RSA-Code in Python3.6 für Bildungszwecke zu schreiben.RSA-Signatur erstellen und übertragen

Der Nachrichtenverschlüsselungsteil ist abgeschlossen. Ich muss jetzt eine digitale Signatur für die Nachricht erstellen, die, wie ich verstehe, nur eine große Ganzzahl ist, die mit dem privaten Schlüssel des Absenders verschlüsselt wurde (bitte korrigiere mich, wenn ich falsch liege). Welche Größe sollte die Ganzzahl dafür sein? Und werden die verschlüsselte Nachricht und die Signatur als Paar übertragen oder sollten sie irgendwie zu einer einzigen Ganzzahl verbunden sein?

Antwort

1

Eine signierte Nachricht ist nicht verschlüsselt. Es sollte oder sollte sich nicht ändern, wenn Sie es unterschreiben. Stattdessen wird es gehashed und der Hash wird mit dem privaten Schlüssel "verschlüsselt" (dies ist tatsächlich die Entschlüsselungsprozedur, jedoch mit aufgefülltem Padding).

Der Empfänger benötigt vier Dinge:

  1. öffentlichen Schlüssel
  2. Ursprüngliche unveränderte Nachricht
  3. Signatur
  4. Wissen darüber, wie all dies dargestellt ist, und verbunden: Codierung des öffentlichen Schlüssels, Codierung die Nachricht, Codierung der Signatur und des tatsächlichen Signaturschemas, das verwendet wurde (RSA/DSA/EdDSA/SPHINCS/etc. mit einer bestimmten Hashfunktion und einem Auffüllschema)

Mathematisch gesehen ist die RSA-Signatur eine einzelne große Ganzzahl, aber wenn Sie sie übertragen wollen, müssen Sie sie irgendwie kodieren. Sie können die vollständige Spezifikation in RFC 8017 finden. Wenn Sie RSA zum Signieren verwenden möchten, sollten Sie RSASSA-PSS oder einfach PSS verwenden, das ein Padding-Schema angibt, das als sicher gilt. Implementieren Sie es nicht selbst, wenn Sie es in der Produktion verwenden möchten.

Verwandte Themen