Ich habe Alices öffentlichen Schlüssel. Ich möchte Alice eine RSA-verschlüsselte Nachricht senden. Wie kann ich das mit dem openssl
Befehl machen?
Die Nachricht lautet:
Hallo Alice! Bitte bringen Sie malacpörkölt zum Abendessen mit!
Ich habe Alices öffentlichen Schlüssel. Ich möchte Alice eine RSA-verschlüsselte Nachricht senden. Wie kann ich das mit dem openssl
Befehl machen?
Die Nachricht lautet:
Hallo Alice! Bitte bringen Sie malacpörkölt zum Abendessen mit!
Antworten:
Suchen Sie im openssl-Handbuch ( openssl
Manpage) nach RSA
und Sie werden sehen, dass der Befehl für die RSA-Verschlüsselung lautet rsautl
. Lesen Sie dann die rsautl
Manpage , um die Syntax zu sehen.
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 Prokotolen 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 meist eine Übung ist. In der Praxis würden Sie ein Tool wie gpg verwenden (das RSA verwendet, die Nachricht jedoch nicht direkt verschlüsselt).
openssl
Befehlszeilentool ist eine Mischung aus verschiedenen Befehlen. Einige, vor allem solche, die Zertifikate manipulieren, können nützlich sein, sind jedoch schwer korrekt zu verwenden, da ihre Syntax und Parameter eigenartig sind. Einige davon rsautl
sind zwar in Ordnung, bieten jedoch keine nützliche Funktionalität, sondern stellen lediglich unformatierte kryptografische Grundelemente zur Verfügung. Beispielsweise wird die RSA-Verschlüsselung so gut wie nur zum Verschlüsseln eines symmetrischen Schlüssels für die Hybridverschlüsselung verwendet. Manche enc
sind sehr schwer sicher zu benutzen und die Welt wäre besser dran, wenn es sie nicht gäbe.
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 zum Verschlüsseln einer beliebigen Zeichenfolge ausgelegt, sondern ein Algorithmus, der eine ganze Zahl verschlüsselt. Insbesondere eine Ganzzahl von 0 bis n-1, wobei n der Modulwert aus dem öffentlichen Schlüssel ist. Wenn Sie von einem 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üsselchiffre wie DES oder AES verwendet wird. 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 decodieren. Der vollständige Standard für RSA heißt PKCS # 1
Außerdem 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 einen Betriebsmodus wie CBC oder CTR verwenden. Diese Modi geben an, 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 spiegeln, wenn keine Integrität oder Authentizität auf den Datenstrom angewendet wird. Ein Angreifer kann leicht erraten, dass es sich bei einer SSL-Verbindung zu Port 443 wahrscheinlich um eine Webseitenanforderung handelt, die mit beginnt, GET /
und er könnte die Bitänderung in umkehren, PUT /
ohne den Rest der Verschlüsselung zu beeinträchtigen. Ein einfacher Ansatz für die Integrität besteht darin, am Ende eine MD5- oder SHA-1-Summe anzuhängen, die jedoch nur Datenintegrität und nicht Datenauthentizität bietet. Jeder, der den Datenstrom vollständig kennt, kann eine korrekte Summe generieren. Ein sichererer Ansatz ist die Verwendung eines verschlüsselten Hashs wie HMAC Dies erfordert die Kenntnis eines geheimen Schlüssels, um Datenauthentizität und -integrität zu erzeugen.
Beachten Sie, dass Sie im Folgenden angeben können, welchen Algorithmus Sie möchten, seien es die aufgelisteten oder RSA (obwohl mir der genaue Name für RSA von OpenSSL nicht bekannt ist).
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 keine RSA in meinen Optionen - zumindest mit diesem Namen.
Wie verschlüssele ich eine S / MIME-Nachricht?
Angenommen, 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 Standard-RC2-40-Verschlüsselung zu erhalten, müssen Sie nur openssl mitteilen, 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 E-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 <you@youraddress.com>' \
-to 'Her Fullname <her@heraddress.com>' \
-subject 'My encrypted reply' |\
sendmail her@heraddress.com
Wie signiere ich eine S / MIME-Nachricht?
Wenn Sie nicht die gesamte Nachricht verschlüsseln müssen, sie jedoch signieren möchten, damit Ihr Empfänger von der Integrität der Nachricht überzeugt ist, ä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 <you@youraddress.com>' \
-to 'Her Fullname <her@heraddress.com>' \
-subject 'My signed reply' |\
sendmail her@heraddress.com
(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!
openssl enc
da enc
es nur für die symmetrische Verschlüsselung vorgesehen ist. Ja, die Optionen von openssl sind nicht sehr gut organisiert. Asymmetrisches Algorithmen haben ihre eigenen Befehle: rsa
/ dsa
/ dh
auf Tasten zu manipulieren, rsautl
/ dsautl
zum Verschlüsseln / Entschlüsseln / Verifizieren / Zeichen und genrsa
/ gendsa
/ gendh
um Schlüssel zu erzeugen.
openssl
?