RSA アルゴリズムによる暗号化関数は公開鍵を用いた暗号を行うために用意しています。
RSA アルゴリズムには以下の特徴があります。
公開鍵暗号方式は共通鍵暗号方式に比して鍵の配送に関するリスクが低いというメリットがありますが、 他の暗号方式と比較して処理速度が遅いというデメリットがあります。 そのため暗号化したいデータは他の暗号方式で暗号化し、 その暗号化に用いた鍵をRSAで暗号化して配送するという方法を採るのが一般的です。
RSA暗号方式の性質として以下のようなものがあります。
秘密鍵が流出すると暗号解読も署名偽装も可能となり暗号による安全性は損なわれます。秘密鍵の管理には十分注意してください。
ブルートフォース攻撃に対しては鍵長を長くすれば防ぎやすくなりますが、その分暗号化のための処理速度が増大します。
main-in-the-middleを防ぐためには公開鍵の認証(証明書)が有効です。
詳細は、一般的な暗号の書籍を参照してください。
鍵は公開鍵・秘密鍵共にDER形式のものを使用します。鍵長に制限はありません。
暗号化文字列は鍵長よりも短いものである必要があります。(例えば1024bitの鍵長の場合は暗号化する文字列は1024bit未満である必要があります)
復号文字列はCRYPTOライブラリで暗号化したもの以外を用いる場合は以下の条件を全て満たすものを用います
ありません。
一例として、オープンソースのSSL ツールキットであるOpenSSLで暗号化に用いる公開・秘密鍵を作成する手順を以下に述べます。
1. RSA 秘密鍵を作成する
OpenSSLがインストールされている環境のコマンドラインで以下のコマンドを入力することで、PEM形式・鍵長 1024 bit の RSA 秘密鍵ファイル privkey.pem を作成します。
> openssl genrsa -out privkey.pem
万が一、privkey.pem が漏洩すると、誰もが暗号解読および暗号偽造ができるようになってしまいます。 秘密鍵の鍵ファイルは厳重に取り扱うようにしてください。
PEM形式の秘密鍵ができたらDER形式に変換します。
> openssl rsa -outform DER -in privkey.pem -out privkey.der
CRYPTO APIで秘密鍵を指定するときは、この privkey.der の中身をC言語の u8 の配列に変換して指定します。 なお、privkey.der も秘密鍵のため privkey.pem 同様厳重に取り扱うようにしてください。
2. RSA 公開鍵を作成する
以下のコマンドでDER形式の公開鍵を作成します。
> openssl rsa -pubout -inform DER -in privkey.der -outform DER -out pubkey.der
CRYPTO APIで公開鍵を指定するときは、この pubkey.der の中身をC言語の u8 の配列に変換して指定します。
3. 鍵の動作確認をする
作成した秘密・公開鍵のペアが正しく機能するかを確認します。
まず、鍵長のよりも短い文字列長の文字列を記載したテキストファイル (test.txt) を用意し、公開鍵で暗号化して test.txt.enc に変換します。
> openssl rsautl -encrypt -in test.txt -out test.txt.enc -pubin -keyform DER -inkey pubkey.der
作成した秘密・公開鍵のペアが正しく機能するかを確認します。
次に、test.txt.enc を秘密鍵で復号して test.txt.dec に変換します。
> openssl rsautl -decrypt -in test.txt.enc -out test.txt.dec -keyform DER -inkey privkey.der
test.txt と test.txt.dec の中身が一致していたら鍵は正しく動作することが確認できます。
2008/03/27 初版