なんかてきとうに

わりと個人的な忘備録的ですよ。

お勉強

OpenSSLその3

使いそうなものをだらだらと並べてってみる。

rsa

openssl rsa [options]

みたいなやつ。

rsa鍵を管理するコマンドがあります。

options でよく使う気がするものは

  • -text これは鍵をテキスト形式で表示します。
    RSA鍵の生成方法を知っていれば個々の意味はわかると思います。

  • -pubin 入力を公開鍵にします。(標準では秘密鍵)

  • -pubout 公開鍵を出力します。
    秘密鍵から公開鍵を作りたいときに。

  • -check 鍵が壊れていないかチェックします。

  • -inform 入力鍵のタイプを指定します。(PEM|DER|NET)
    鍵のタイプを変換するときに使いますね。

  • -outform 出力鍵のタイプを指定します。(PEM|DER|NET)
    鍵のタイプを変換するときに使いますね。
    ちなみに、NETは Netscape Server や IIS の鍵ファイルで、RC4で暗号化します。
    あんまりセキュアじゃないので必要出ない限り使わないほうが良いということらしいです。

  • -des, -des3, -aes128, -aes256, -camellia128, -camellia256 など
    鍵を暗号化する(暗号化タイプを変える)のに使います。

  • -in, -out 入出力を標準入出力からファイルに変えます。

使用例

  • openssl rsa -inform PEM -outform DER -in key.pem -out key.der
    PEMキーをDERキーに変換

  • openssl rsa -aes256 -in key.pem -out key-crypt.pem
    秘密鍵をAES256bitで暗号化

  • openssl rsa -pugout -in key.pem -out pub.pem
    秘密鍵から公開鍵を作成

dsa

openssl dsa [options]

みたいなやつ。

rsa と違って-checkがありません。

また -inform -outformm で NETが使えません。

あとはrsaと変わりないかな。

rsautl

openssl rsautl [options]

みたいなやつ

rsa鍵で暗号化したり署名したりするもの。

  • -in, -out 入出力を標準入出力からファイルに変えます。
  • -inkey 使う鍵を指定します。
  • -pubin 使う鍵を秘密鍵ではなく公開鍵にします。
  • -certin 使う鍵を公開鍵証明書にします。
  • -keyform 鍵のタイプを指定します(標準はPEM)
  • -encrypt 公開鍵で暗号化します(-pubinと組み合わせ)
  • -decrypt 秘密鍵で復号化します。
  • -hexdump 16進数で出力します
  • -sign 秘密鍵で署名します。
  • -verify 公開鍵で署名をチェックします(-pubinと組み合わせ)

前回もちょっと言ったけれど、

-signと-verify は署名、チェックと書いているけれど

実際は暗号化と復号化。

なので一応、秘密鍵で暗号化すれば公開鍵を持っている人じゃないと復号できません。

ただ、公開鍵は公開されているものなので全体を暗号化する必要は無いので

署名した対象のハッシュを計算してそのハッシュ値に署名するのが普通。

ハッシュ計算は高速でRSAによる暗号化は低速なため、署名したい対象のサイズが大きくなるほどパフォーマンスに差がでます。

使用例

  • openssl rsautl -encrypt -pubin -inkey pub.pem -in normaltext -out cryptedtext

  • openssl rsautl -decrypt -inkey key.pem -in cryptedtext -out decryptedtext

  • openssl rsautl -sign -inkey key.pem -in normaltext -out signedtext

  • openssl rsautl -verify -certin -inkey cert.pem -in signedtext -out verifytext