Opensslは、次のように小さなファイルのみを暗号化できます。
openssl rsautl -encrypt -pubin -inkey public_key.pem -in secret.txt -out secret.enc
opensslが見つかりましたここで提案エラー発生:
openssl smime -encrypt -aes-256-cbc -binary -in secret.txt -outform DER -out secret.txt.der public_key.pem
メール用なので、smimeを使用する必要はありませんが、それでもエラーが表示されます。
unable to load certificate
140222726453056:error:0909006C:PEM routines:get_name:no start line:crypto/pem/pem_lib.c:745:Expecting: TRUSTED CERTIFICATE
opensslが証明書の信頼について文句を言うのはなぜですか?それは私の仕事です。私はこれがPEMが別の形式であることを望んでいることを知っていますが、個人的にそうは思わないでしょう。
私が望むもの?
私は、bashを使用して公開PEMファイル(または他の公開鍵)を使用して強力な暗号化ですべてのファイルを暗号化し、プロジェクトの相手が秘密鍵を使用してファイルを復号化できるようにしたいと思います。 Powershellの基本ツールも利用できればと思いますが、これは大きな質問なので、Windowsでホストされている受信者がgitbashを使用するのを避けるためにこのツールを使用したかったのです。
gpgを使用できますが、パスワードを生成するキーを導入したくありません。
答え1
最初の問題は、大容量ファイルを暗号化するために非対称パスワードを使用したくないことです。とにかく速度が遅く、サイズが制限されているので、誰もそうしません。対称パスワード用のセッションキーを生成し、非対称パスワードでセッションキーを暗号化し、対称パスワードで大容量ファイルを暗号化し、一緒にパッケージ化するだけです。これがSSLとPGP/GPGが行うことです。
見つかったrsautilコマンドは、非対称エンコーディングを実行するための低レベルツールです。ただし、プロセス全体を完了するには、いくつかの追加コマンドが必要です。
2つの基本的な解決策があります。
- 証明書を生成するには、秘密鍵で公開鍵に署名します。これは
openssl smime
うまくいきます。 - GPGを使用してください。それがまさにそれが設計された理由です。説明した状況に基づいてこの方法をお勧めします。おそらく
gpg -se
、またはgpg -sea
電子メールを送信する場合です。 (これをしないでくださいgpg -c
。「パスワード生成キー」のようです。)
SSLまたはGPGを使用する場合は、両方の当事者が公開鍵と秘密鍵を生成し、秘密鍵で公開鍵に署名し、署名された公開鍵を相手に送信する必要があります。通常、関連する唯一のパスワードは、あなたのファイルを見ることができる人があなたのデータを復号化できないように秘密鍵を暗号化することです。
SSLとPGP / GPGの主な違いは認証モデルです。 SSLは「認証機関」を使用します。 PGP / GPGはAnneがBobのキーに署名し、BobがCarolのキーに署名する証明書チェーンを使用するため、AnneはCarolのキーがCarolのキーであることを信頼できます。
最後に、電子メールでファイルを送信した場合は、電子メールクライアントにSMIMEまたはPGPを統合できることを確認したい場合があります。