2016-04-21 4 views
1

Ich bin kein Mathematiker (und ich bitte um Vergebung für das, was ich in diesem Beitrag sage!), Aber soweit ich weiß, die RSA-Verschlüsselung und Entschlüsselung sollte der gleiche Vorgang sein: M^e mod nWas ist der Unterschied zwischen openssl RSA_private_decrypt und RSA_private_encrypt?

wo M ist was ich entschlüsseln/verschlüsseln will, e ist der Exponent und n ist das Modul (privat in meinem Fall).

Die Bestätigung hierfür ist die folgende: Wenn ich ein Klartext zu „Zeichen“ will, muss ich die gleiche Signatur erhalten, wenn ich eine der folgenden Operationen durchführen:

RSA_private_encrypt(plain_text.size(), &plain_text[0], &encrypted[0], rsa.get(), RSA_NO_PADDING); 

RSA_private_decrypt(plain_text.size(), &plain_text[0], &decrypted[0], rsa.get(), RSA_NO_PADDING); 

Meine Frage ist: die RSA_private_encrypt Dokumentation gibt an, dass "flen weniger als RSA_size (rsa) - 11 für die auf PKCS # 1 v1.5 basierenden Füllmethoden, weniger als RSA_size (rsa) - 41 für RSA_PKCS1_OAEP_PADDING und genau RSA_size (rsa) für RSA_NO_PADDING" sein muss. Wenn die Operation die gleiche ist, warum habe ich diese Einschränkung nur im Verschlüsselungsfall? In der Tat, wenn ich versuche, einen Klartext kürzer als RSA_SIZE (1024 in meinem Fall) zu verwenden, ist die Entschlüsselungsoperation erfolgreich, während die Verschlüsselung fehlschlägt.

Bitte beachten Sie, dass ich Padding nicht verwende (und ich weiß, das ist unsicher).

Antwort

1

RSA_private_encrypt says:

RSA_private_encrypt() signiert die Flen Bytes aus (in der Regel eine Nachricht mit einem Algorithmus-Identifizierer digest) mit dem privaten Schlüssel unter Verwendung von RSA- und speichern die Signatur in zu. muss auf RSA_size (RSA) Bytes des Speichers zeigen.

Während RSA_private_decrypt says:

RSA_private_decrypt() entschlüsselt das Flen Bytes aus dem privaten Schlüssel unter Verwendung von RSA- und speichert in den Klartext zu. muss auf einen Speicherbereich zeigen, der groß genug ist, um die entschlüsselten Daten zu speichern (die kleiner als RSA_size (rsa) ist). Padding ist der Füllmodus, der zum Verschlüsseln der Daten verwendet wurde.

Die von Ihnen zitierte Stelle ist für RSA_public_encrypt in der Dokumentation gemeint.


Wenn keine Polsterung verwendet wird, dann RSA_private_encryptRSA_private_decrypt und werden im gleichen Arbeitsgang zur Folge. Wenn Sie Polsterung angeben, dann RSA_private_encrypt Polsterung an die gegebenen Daten hinzufügen, wird vor modulare Potenzierung und RSA_private_decrypt werden versuchen, padding zu entfernen nach modularer Potenzierung, wo modulare Potenzierung bedeutet die RSA-Operation xc mod n wo x die angegebenen Daten und c immer der private Exponent für private Schlüsseloperationen.

+0

PHP hätte diese nie aufdecken sollen ... Schlechte Sicherheitstechnik .... Der Unterzeichner sollte immer das Dokument erhalten, die Formatierung der Nachricht anwenden und den Hash selbst berechnen. – jww

Verwandte Themen