Jsencryptテスト

秘密鍵

公開鍵

入力

出力


公開鍵で暗号化したデータは秘密鍵で復号できないらしい

上記テストで秘密鍵で暗号→公開鍵で復号するとfalseになる。
なんで? と思って配布元サイトを見に行ったらこう書いてあった。
Eventhough the methods are called setPublicKey and setPrivateKey, remember that they are only alias to setKey, so you can pass them both a private or a public openssl key, just remember that setting a public key allows you to only encrypt.
(注:コード上のコメントから引用。コメント記号は除去。下線を追加。)

下線部分に「公開鍵をセットした場合、暗号化だけができる」とある。
RSAって公開鍵で暗号したものを秘密鍵で復号、秘密鍵で暗号したものを公開鍵で復号できなかったっけ? ともって調べてみたら次のようなことらしい。

RSAは上記ができる。
しかし、一般的に公開鍵暗号で「秘密鍵で暗号したものを公開鍵で復号」はできない。
「秘密鍵で暗号したものを公開鍵で復号」として署名として扱うのは間違い(らしい)。署名は元に戻すことができないことが重要(できると偽造可能になってしまう)のでHASH関数のようなものを使う。
RSAは秘密鍵を使って署名にも使えるけど、署名を復号できるのはまずいのでそういう操作は許さない、ということだと理解。