it-swarm.com.de

Wie verschlüssle ich Nachrichten / Text mit RSA & OpenSSL?

Ich habe Alices öffentlichen Schlüssel. Ich möchte Alice eine RSA-verschlüsselte Nachricht senden. Wie kann ich das mit dem Befehl openssl machen?

Die Nachricht lautet:

Hallo Alice! Bitte bringen Sie malacpörkölt zum Abendessen mit!

29
LanceBaynes

Suchen Sie in der Manpage openssl manual (openssl) nach RSA, und Sie werden sehen, dass der Befehl für die RSA-Verschlüsselung rsautl lautet. Lesen Sie dann die Manpage rsautl , um die Syntax anzuzeigen.

echo 'Hi Alice! Please bring malacpörkölt for dinner!' |
openssl rsautl -encrypt -pubin -inkey alice.pub >message.encrypted

Das Standard- Auffüllschema ist das ursprüngliche PKCS # 1 v1.5 (wird immer noch in vielen Procotolen verwendet). openssl unterstützt auch OAEP (jetzt empfohlen) und Raw-Verschlüsselung (nur unter besonderen Umständen nützlich).

Beachten Sie, dass die direkte Verwendung von openssl meistens eine Übung ist. In der Praxis würden Sie ein Tool wie gpg verwenden (das RSA verwendet, aber nicht direkt zum Verschlüsseln der Nachricht).

Wenn Sie nur eine gute Verschlüsselung wünschen, sollten Sie sich zunächst GnuPG ansehen. Aber wenn Sie experimentieren und nur lernen möchten, wie es funktioniert, müssen Sie verstehen, was RSA ist. RSA ist nicht dafür ausgelegt, eine beliebige Zeichenfolge zu verschlüsseln, sondern ein Algorithmus, der eine Ganzzahl verschlüsselt. Insbesondere eine Ganzzahl von 0 bis n-1, wobei n der Modulwert aus dem öffentlichen Schlüssel ist. Wenn Sie über einen RSA-Schlüssel mit 1024 Bit sprechen, bedeutet dies, dass 1024 Bit erforderlich sind, um den Modul binär zu speichern. Dies ist einer der Gründe, warum RSA in Kombination mit einer symmetrischen Schlüsselverschlüsselung wie DES oder AES . Sie können einen zufälligen 256-Bit-Schlüssel für AES generieren und diesen Schlüssel mit einem öffentlichen 1024-Bit-RSA-Schlüssel verschlüsseln. Dann kann jeder, der auf den privaten Schlüssel zugreift, den symmetrischen Schlüssel extrahieren und die Nachricht mit AES dekodieren. Der vollständige Standard für RSA heißt PKCS # 1

Darüber hinaus sind DES und AES Blockchiffren. Sie verschlüsseln nur Daten in Blöcken einer bestimmten Größe. DES verwendet 64-Bit-Blöcke und AES 128-Bit Blöcke. Um mehr als einen Block zu verschlüsseln, müssen Sie ein Mode of Operation wie CBC oder CTR verwenden. Diese Modi legen fest, wie ein Bitstrom mit einer Blockmodus-Verschlüsselung verschlüsselt wird.

Zuletzt ist es wichtig, die empfangenen Daten zu überprüfen. Während ein Angreifer möglicherweise nicht in der Lage ist, Daten während der Übertragung zu lesen, kann er möglicherweise Bits ohne Erkennung umdrehen, wenn keine Integrität oder Authentizität auf den Datenstrom angewendet wird. Ein Angreifer kann leicht erraten, dass eine SSL-Verbindung zu Port 443 wahrscheinlich eine Webseitenanforderung ist, die mit GET / Beginnt, und er könnte das Bit ändern, indem er es in PUT / Ändert, ohne den Rest der Verschlüsselung zu beeinträchtigen. Ein einfacher Ansatz zur Integrität besteht darin, am Ende eine MD5- oder SHA-1-Summe anzuhängen, die jedoch nur Datenintegrität und keine Datenauthentizität bietet. Jeder, der den Datenstrom vollständig kennt, kann eine korrekte Summe generieren. Ein sicherer Ansatz besteht darin, einen verschlüsselten Hash wie HMAC zu verwenden, der Kenntnisse über a erfordert zu generierender geheimer Schlüssel, der neben der Integrität auch Datenauthentizität bietet.

25
penguin359

Beachten Sie, dass Sie im Folgenden den gewünschten Algorithmus angeben können, sei es der aufgelistete oder der RSA-Algorithmus (obwohl ich den genauen Namen, den OpenSSL für RSA verwendet, nicht kenne).

verwenden Sie "openssl enc -help", um eine Liste der unterstützten Chiffren auf Ihrem System abzurufen, und übergeben Sie diese als Argument. zB "-aes256"

Hinweis auf meinem System Ich habe kein RSA in meinen Optionen - zumindest mit diesem Namen.


Wie verschlüssele ich eine S/MIME-Nachricht?

Nehmen wir an, jemand sendet Ihnen sein öffentliches Zertifikat und bittet Sie, eine Nachricht an sie zu verschlüsseln. Sie haben ihr Zertifikat als her-cert.pem gespeichert. Sie haben Ihre Antwort als my-message.txt gespeichert.

Um die standardmäßige - wenn auch ziemlich schwache - RC2-40-Verschlüsselung zu erhalten, teilen Sie openssl einfach mit, wo sich die Nachricht und das Zertifikat befinden.

openssl smime her-cert.pem -encrypt -in my-message.txt

Wenn Sie sich ziemlich sicher sind, dass Ihr Remote-Korrespondent über ein robustes SSL-Toolkit verfügt, können Sie einen stärkeren Verschlüsselungsalgorithmus wie Triple DES angeben:

openssl smime her-cert.pem -encrypt -des3 -in my-message.txt

Standardmäßig wird die verschlüsselte Nachricht einschließlich der Mail-Header an die Standardausgabe gesendet. Verwenden Sie die Option -out oder Ihre Shell, um sie in eine Datei umzuleiten. Oder, viel schwieriger, leiten Sie die Ausgabe direkt an sendmail weiter.

openssl smime her-cert.pem \
   -encrypt \
   -des3 \
   -in my-message.txt \
   -from 'Your Fullname <[email protected]>' \
   -to 'Her Fullname <[email protected]>' \
   -subject 'My encrypted reply' |\
 sendmail [email protected]

Wie signiere ich eine S/MIME-Nachricht?

Wenn Sie nicht die gesamte Nachricht verschlüsseln müssen, diese jedoch signieren möchten, damit Ihr Empfänger die Integrität der Nachricht sicherstellen kann, ähnelt das Rezept dem für die Verschlüsselung. Der Hauptunterschied besteht darin, dass Sie einen eigenen Schlüssel und ein eigenes Zertifikat benötigen, da Sie mit dem Zertifikat des Empfängers nichts signieren können.

 openssl smime \
   -sign \
   -signer /path/to/your-cert.pem \
   -in my-message.txt \
   -from 'Your Fullname <[email protected]>' \
   -to 'Her Fullname <[email protected]>' \
   -subject 'My signed reply' |\
 sendmail [email protected]

(von http://www.madboa.com/geek/openssl/ )

(ähm ... all diese Backslashes - das sollen Zeilenumbrüche sein. Ich bin mir nicht sicher, was los ist, da es hier in meinem Bearbeitungsfeld gut angezeigt wird!

5
draeath