読者です 読者をやめる 読者になる 読者になる

なんかてきとうに

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

お勉強

Linuxのお勉強(OpenSSLを使ってみる)

セキュリティがらみをなんとなく。

 

とりあえずはじめにOpenSSLを。

ダウンロードとかインストールは適当に。

OpenSSLで出来ること

このくらい?

 

OpenSSLで作成できる公開鍵&秘密鍵のペアについて

RSA鍵とDSA鍵が作れる。

RSA鍵は暗号化、署名ともに出来る。

DSA鍵は署名のみできる。

RSA秘密鍵の生成

RSA鍵の生成は

openssl genrsa 2048 -out rsa.key

みたいな感じ。 2048は鍵長。鍵長を指定しないと標準値が使われます。

標準は512bitとか1024bitとかですが

最近だと 2048bit以上が推奨なのかな?わかりません。

-out に続けて作成する鍵のファイル名。

-out が無いと標準出力に鍵が出力されます。

それをコピーしてテキストファイルに貼り付けても良いし、

openssl genrsa 2048 > rsa.key

こんな感じでリダイレクトを使ってファイルに書き出すのも良い気がする。

DSA秘密鍵の生成

DSA鍵の生成は

DSAPARAM というパラメータを作成して、そのパラメータを使って作成するので

まずパラメータの作成から

openssl dsaparam -out dsa.param 2048

みたいな感じ。

-out に続けて生成するパラメータのファイル名。

2048はbit数。

openssl dsaparam 2048 > dsa.param

こんな感じでリダイレクトを使ってファイルに書き出すのも。

そんなこんなで パラメータが出来たらいよいよ鍵の作成

openssl gendsa -out dsa.key dsa.param

こんな感じ。

-out に続けて作成する鍵のファイル名。

dsa.paramで作成したパラメータを指定。

openssl gendsa dsa.param > dsa.key

これもこんな感じでリダイレクトを使って出力できますね。

 

鍵の暗号化

ちなみに、このままだと秘密鍵は特に暗号化もされていませんので、

ファイルが盗まれたら即使われてしまいます。

そこで、鍵にパスワードを利用した暗号化を施すこともできます。

鍵を作成するときに

openssl genrsa -aes256 2048

openssl gendsa -aes256 dsa.param

とかやると作成する鍵を暗号化できます。

このコマンドを実行するとパスフレーズ(パスワード)を聞かれますので

2回同じパスワードを入力してください。

すると、次からこの鍵を使うときにパスワードが要求されるようになります。

でも、鍵ファイルが盗まれたら素直に破棄して作り直しましょう。

ここでは暗号化に AES256 を使っていますが

  • des,des3
  • idea
  • seed
  • aes128,aes192,aes256
  • camellia128,camellia192,camellia256

あたりが使えます。(OpenSSLのバージョンによって違うかも)

 openssl dsa -in dsa.key -aes256 -out dsa-crypt.key

openssl rsa -in rsa.key -aes256 -out rsa-crypt.key

みたいなことをするとパスワードがないキーにパスワードを設定したり

パスワードを更新することができます。

公開鍵の作成

公開鍵の作成は、先ほど作成した秘密鍵を使って

openssl rsa -in rsa.key -pubout -out rsa.pub

openssl dsa -in dsa.key -pubout -out dsa.pub

で出来ます。

これも-in -out はリダイレクトを使えるので

openssl rsa -pubout < rsa.key > rsa.pub

openssl dsa -pubout < dsa.key > dsa.pub

みたいな書き方もできます。

実際は公開鍵ではなく、公開鍵証明書を利用するケースが多い気がしますね。

RSA鍵を利用した暗号化/復号化

RSA鍵では任意のデータを暗号化/復号化できます。

公開鍵で暗号化、秘密鍵で復号化します。

openssl rsautl -encrypt -pubin -inkey rsa.pub -in normaldata -out encryptdata

こんな感じで暗号化

openssl rsautl -decrypt -inkey rsa.key -in encryptdata -out decryptdata

こんな感じで復号化

rsa.pub と rsa.key は公開鍵&秘密鍵 のペアです。

normaldata と decryptdata は同じもののはずです。

RSA鍵を利用した暗号化/復号化2

上記とは逆に

秘密鍵で暗号化、公開鍵で複合化をします。

openssl rsautl -sign -inkey rsa.key -in normaldata -out cryptdata

こんな感じで暗号化。

openssl rsautl -verify -pubin -inkey rsa.pub -in cryptdata -out decryptda

こんな感じで復号化。

normaldata と decryptdata は同じもののはずです。

ハッシュ値を使った署名/検証

RSA鍵、DSA鍵どちらでもできます。

openssl dgst -md5 -sign -inkey rsa.key -in normaldata -out normaldata.sign

openssl dgst -md5 -sign -inkey dsa.key -in normaldata -out normaldata.sign

こんな感じで署名作成

openssl dgst -md5 -verify -pubin -inkey rsa.pub -signature normaldata.sign -in normaldata

openssl dgst -md5 -verify -pubin -inkey dsa.pub -signature normaldata.sign -in normaldata

こんな感じで署名検証

ここでも-in -out はリダイレクトを使っても良いです。

ここでは-md5MD5ハッシュを使う設定にしていますが

署名に使えるハッシュは

というところみたいです。