RSAとOpenSSLを使用してメッセージ/テキストを暗号化する方法は?

RSAとOpenSSLを使用してメッセージ/テキストを暗号化する方法は?

私はアリスの公開鍵を持っています。 RSA暗号化されたメッセージをAliceに送信したいと思います。コマンドを使用してこれをどのようにopenssl実行できますか?

メッセージは次のとおりです。

こんにちはアリス!夕食にMalapörköltを入手!

答え1

内部にopenssl マニュアルopensslmanページ)、検索するとRSARSA暗号化コマンドがであることがわかりますrsautl。それでは読んでください。rsautlマニュアルページ構文を確認してください。

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(現在推奨)と元の暗号化(特殊な場合にのみ便利です)もサポートしています。

opensslを直接使用するのはほとんど練習です。実際には、次のようなものを使用できますGPG(RSAを使用しますが、メッセージを直接暗号化しません。)

答え2

まず、良い暗号化が必要な場合は、次の点を見てください。GnuPG。しかし、実験をしていて、それがどのように機能するかを理解したい場合は、何を知る必要がありますか?RSAはい。 RSAは、任意の文字列を暗号化するように設計されているのではなく、整数を暗号化するアルゴリズムです。具体的には、0とn-1の間の整数です。ここで、nは公開鍵のモジュラス値です。 1024ビットRSAキーについて話すことは、モジュラスをバイナリ形式で保存するために1024ビットが必要であることを意味します。これが、RSA が対称鍵パスワードで使用される理由の 1 つです。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の合計を追加することです。ただし、これはデータの信頼性ではなくデータの整合性のみを提供します。データフローの完全な知識を持つ人は誰でも正確な合計を生成できます。より安全な方法は、このようなキーハッシュを使用することです。はまかこれには、生成されたキーに関する知識が必要なため、整合性に加えてデータの信頼性も提供されます。

答え3

以下では、リストされているアルゴリズムでもRSAでも、必要なアルゴリズムを指定できます(OpenSSLがRSAに使用する正確な名前はわかりません)。

システムでサポートされているパスワードのリストを取得するには、「openssl enc -help」を使用してパラメータに渡します。例: "-aes256"

私のシステムは私のオプションにRSAを持っていません。少なくともその名前ではありません。


S / MIMEメッセージを暗号化する方法は?

誰かがあなたに公開証明書を送信し、彼女に送信するいくつかのメッセージを暗号化するように依頼しているとします。彼女の証明書をher-cert.pemとして保存しました。答えをmy-message.txtとして保存しました。

デフォルト(やや弱いですが)RC2-40暗号化を取得するには、opensslにメッセージと証明書がある場所を教えてください。

openssl smime her-cert.pem -encrypted-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 <[email protected]>' \
   -to 'Her Fullname <[email protected]>' \
   -subject 'My encrypted reply' |\
 sendmail [email protected]

S / MIMEメッセージに署名する方法は?

メッセージ全体を暗号化する必要はありませんが、受信者がメッセージの整合性を確認できるように署名したい場合、アプローチは暗号化に似ています。主な違いは、受信者の証明書では何も署名できないため、独自の鍵と証明書が必要であることです。

 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]

(からhttp://www.madboa.com/geek/openssl/)

(う…逆スラッシュがすべてエスケープされた改行文字でなければなりません。編集ボックスにうまく表示されるので何が起こっているのかわかりません!

関連情報