web-dev-qa-db-ja.com

秘密鍵で暗号化した後、公開鍵で復号化するにはどうすればよいですか?

opensslコマンドラインを使用して対称鍵でファイルを暗号化し、次にその対称鍵をRSA公開鍵で暗号化しました。暗号化と復号化を少し試しましたが、RSA秘密キーで対称キーを誤って暗号化しました。暗号化はエラーなしで続行されました。

だから今私は対称鍵を解読してファイルにアクセスすることができません。公開鍵で復号化するopensslコマンドはありますか?


暗号化に使用したコマンドライン:

openssl rsautl -encrypt -inkey private_key.pem -in symmKey.key -out symmKey.enc

そして私が使用しようとした復号化のために:

openssl rsautl -decrypt -inkey public_key.pem -pubin -in symmKey.enc -out symmKey.key

また、symmKey.encwithを確認しようとしました:

openssl rsautl -verify -inkey public_key.pem -pubin -in symmKey.enc -out symmKey.key

しかし、次のエラーが発生します。

RSA operation error
    5968:error:0407008A:rsa routines:RSA_padding_check_PKCS1_type_1:invalid padding:crypto\rsa\rsa_pk1.c:67:
    5968:error:04067072:rsa routines:rsa_ossl_public_decrypt:padding check failed:crypto\rsa\rsa_ossl.c:586:`
2
reyho

実際には、秘密鍵で暗号化されていません。秘密鍵のエンコードには、秘密および公開鍵に必要な両方のコンポーネントが含まれています。 OpenSSLコマンドラインは、暗号化時にエンコードされた秘密キーの公開キーコンポーネントを選択できるほどスマートです。

したがって、秘密鍵を使用して簡単に復号化できます。

openssl rsautl -decrypt -inkey private_key.pem -in symmKey.enc -out symmKey.key

モジュラスはすでに秘密鍵に存在していることに注意してください。公開鍵は、モジュラスと公開指数で構成されます。公開指数は、通常、フェルマーの5番目の素数であるF4に設定され、値は0x010001(65537)です。そのため、便宜上、秘密鍵に簡単に保存できます。

1
Maarten Bodewes