回答:
ではOpenSSLのマニュアル(openssl
manページ)を検索RSA
し、あなたは、RSA暗号化のためのコマンドがあることがわかりますrsautl
。次に、rsautl
manページを読んで構文を確認します。
echo 'Hi Alice! Please bring malacpörkölt for dinner!' |
openssl rsautl -encrypt -pubin -inkey alice.pub >message.encrypted
デフォルトのパディング方式は、元のPKCS#1 v1.5(多くのプロコトールで使用されています)です。opensslは、OAEP(現在推奨)およびraw暗号化(特別な状況でのみ有用)もサポートしています。
opensslを直接使用することは、ほとんどが演習であることに注意してください。実際には、gpgなどのツールを使用します(RSAを使用しますが、メッセージを直接暗号化するわけではありません)。
openssl
コマンドラインツールは、異なるコマンドが混在しています。証明書を操作するもののほとんどは有用ですが、構文とパラメーターが風変わりであるため、正しく使用するのは困難です。などrsautl
は問題ありませんが、有用な機能を提供せず、生の暗号化プリミティブを公開するだけです。たとえば、RSA暗号化は、ハイブリッド暗号化の対称キーの暗号化にのみ使用されます。などの一部は、enc
安全に使用するのが非常に難しく、それらが存在しなければ世界はより良くなるでしょう。
最初に、適切な暗号化が必要な場合は、GnuPGをご覧ください。しかし、実験して、それがどのように機能するかを学びたいだけなら、RSAが何であるかを理解する必要があります。RSAは任意の文字列を暗号化するようには設計されていません。整数を暗号化するアルゴリズムです。具体的には、0〜n-1の整数。nは公開キーのモジュラス値です。1024ビットのRSAキーについて説明すると、モジュラスをバイナリで保存するには1024ビットが必要です。これが理由の1つです。RSAは、DESやAESのような対称キー暗号と組み合わせて使用されます。AES用にランダムな256ビットキーを生成し、1024ビットRSA公開キーでそのキーを暗号化できます。その後、秘密鍵にアクセスする誰でも対称鍵を抽出し、AESでメッセージをデコードできます。RSAの完全な標準はPKCS#1と呼ばれます
さらに、DESとAESはブロック暗号です。特定のサイズのブロック内のデータのみを暗号化します。DESは64ビットブロックを使用し、AESは128ビットブロックを使用します。複数のブロックを暗号化するには、CBCやCTRなどの動作モードを使用する必要があります。これらのモードは、ブロックモード暗号を使用してビットストリームを暗号化する方法を指定します。
最後に、受信したデータを確認することが重要です。攻撃者は転送中のデータを読み取ることができない場合がありますが、データストリームに整合性または信頼性が適用されていない場合、検出せずにビットを反転させることができます。攻撃者は、ポート443へのSSL接続がおそらくWebページのリクエストであるGET /
と簡単に推測できPUT /
、暗号化の残りの部分を妨げることなくビットを変更することができます。整合性への簡単なアプローチは、最後にMD5またはSHA-1の合計を追加することですが、それはデータの信頼性ではなく、データの整合性のみを提供します。データストリームの完全な知識を持っている人は正しい合計を生成できます。より安全なアプローチは、HMACのようなキー付きハッシュを使用することです 生成するには秘密鍵の知識が必要です。これにより、整合性に加えてデータの信頼性が提供されます。
以下では、リストされているアルゴリズムでもRSAでも、必要なアルゴリズムを指定できることに注意してください(OpenSSLがRSAに使用する正確な名前はわかりません)
「openssl enc -help」を使用して、システムでサポートされている暗号のリストを取得し、それを引数として渡します。たとえば、「-aes256」
私のシステムでは、オプションにRSAがないことに注意してください-少なくともその名前では。
S / MIMEメッセージを暗号化するにはどうすればよいですか?
誰かがあなたに彼女の公開証明書を送信し、彼女へのメッセージを暗号化するように頼んだとしましょう。彼女の証明書をher-cert.pemとして保存しました。返信をmy-message.txtとして保存しました。
デフォルトの(かなり弱いものの)RC2-40暗号化を取得するには、メッセージと証明書の場所をopensslに伝えます。
openssl smime her-cert.pem -encrypt -in my-message.txt
リモートコルレスに堅牢なSSLツールキットがあることを確信している場合は、Triple DESのような強力な暗号化アルゴリズムを指定できます。
openssl smime her-cert.pem -encrypt -des3 -in my-message.txt
デフォルトでは、メールヘッダーを含む暗号化されたメッセージは標準出力に送信されます。-outオプションまたはシェルを使用して、ファイルにリダイレクトします。または、はるかに複雑な出力をsendmailに直接パイプします。
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
S / MIMEメッセージに署名するにはどうすればよいですか?
メッセージ全体を暗号化する必要はないが、受信者にメッセージの整合性を保証できるように署名する場合、レシピは暗号化の場合と同様です。主な違いは、受信者の証明書では何も署名できないため、独自のキーと証明書が必要なことです。
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
(http://www.madboa.com/geek/openssl/から)
(...これらのすべてのバックスラッシュ-エスケープされた改行であるはずです。ここの編集ボックスに問題なく表示されるため、何が起こっているのかわかりません!
openssl enc
ため、RSAは見つかりませんenc
でした。ええ、opensslのオプションはあまり整理されていません。非対称アルゴリズムは、独自のコマンドを持っている:rsa
/ dsa
/ dh
キーを操作するために、rsautl
/ dsautl
に暗号化/復号化/検証/記号、およびgenrsa
/ gendsa
/ gendh
キーを生成します。
openssl
ですか?