home ホーム search 検索 -  login ログイン  | reload edit datainfo version cmd icon diff delete  | help ヘルプ

技術/Security/PKI,SSL,TLS/メモ02_OpenSSLとRSA

技術/Security/PKI,SSL,TLS/メモ02_OpenSSLとRSA

技術 / Security / PKI,SSL,TLS / メモ02_OpenSSLとRSA
id: 1059 所有者: msakamoto-sf    作成日: 2012-02-05 19:52:08
カテゴリ: SSL/TLS セキュリティ 

OpenSSLでRSA秘密鍵・公開鍵を作成し、署名したり署名を検証したりしてみました。

> openssl version
OpenSSL 0.9.8h 28 May 2008

古い・・・。大分前に以下のURLからインストールしたOpenSSL使ってます。


genrsaコマンド

genrsaコマンドでRSAに使う秘密鍵を生成する。

> openssl genrsa
Loading 'screen' into random state - done
Generating RSA private key, 512 bit long modulus
........++++++++++++
..++++++++++++
unable to write 'random state'
e is 65537 (0x10001)
-----BEGIN RSA PRIVATE KEY-----
MIIBOwIBAAJBAOCBzlG9MrPdUXWgGIMN8LooK4UAiT28aEZ69flortYuzzwXb47q
WTeQkrTVnbJzopYRRLDswWbfNukAA9hwSbcCAwEAAQJAGpcFKqUv5iGmTjoh7ROv
mTy8usnvd0JjT0Ws8Fc3reIwlrNX4ahsL9GqgFY7YMbZIeaXqAagXopZvpg5fuwo
cQIhAPXu0MKxH4nZYTBDeF4Dx2Iec8JcD8HOly7hZpWnWY29AiEA6bJ28MZMsfDT
BtIsP4RiLddV9Fws/2yoEC2HWpAm6oMCIQCoRPuvipNitUqLRE7SPNGqL93SiTz6
xUip+e0/zh43HQIgHT9Sl2uZ6aMkJfRjyUc+KlKK1Vw73XOxzOSFzhXAaRUCIQDy
lMdy/X4wxbDD6wfA0RCgqGGYiGooblFJucQREIhATA==
-----END RSA PRIVATE KEY-----

ビット数を指定する場合は最後に引数で指定:

> openssl genrsa 1024

ファイルに出力する:

> openssl genrsa -out testrsa01_sec.pem

AES256(CBC)で暗号化する:

> openssl genrsa -aes256 -out testrsa01_sec_aes256.pem
Loading 'screen' into random state - done
Generating RSA private key, 512 bit long modulus
.......++++++++++++
..++++++++++++
unable to write 'random state'
e is 65537 (0x10001)
Enter pass phrase for testrsa01_sec_aes256.pem:(パスフレーズ入力)
Verifying - Enter pass phrase for testrsa01_sec_aes256.pem:(パスフレーズ入力)

暗号化すると"Proc-Type"と"DEK-Info"が追加されました:

-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: AES-256-CBC,189...

c7f5hYcyY6c95ay73R8udIaPOBWGmukmYI46glvFOtUA2pnS2LYpiIAuvrk9obZP
...
-----END RSA PRIVATE KEY-----

rsaコマンド

RSAの暗号鍵から公開鍵を生成するのに使う。署名や暗号化処理にはrsautlコマンドを使う。

暗号化していない秘密鍵から:

> openssl rsa -pubout < testrsa01_sec.pem > testrsa01_pub.pem
writing RSA key

暗号化した秘密鍵から:

> openssl rsa -pubout < testrsa01_sec_aes256.pem > testrsa01_pub_aes256.pem
Enter pass phrase:
writing RSA key

デフォルトの出力形式はPEM形式となっている。

秘密鍵の暗号化を解除する:

> openssl rsa < testrsa01_sec_aes256.pem > testrsa01_sec_aes256_nopass.pem

暗号化されていない秘密鍵を暗号化する:

 > openssl rsa -aes256 < testrsa01_sec.pem
writing RSA key
Enter PEM pass phrase:(パスフレーズ入力)
Verifying - Enter PEM pass phrase:(パスフレーズ入力)
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: AES-256-CBC,6EDEE202C1D95242C7541CB66448CE74

vUPpCqLnGrrardKlcfRZVCIgRBw1bCnxchozP1A19Zr0bt9IhvmkYch3Cec7xSbO
jwMGF/ACeYtVHCdppuEcf6wKlpSiZivyfy04fvDZ4KWZltkNN6YsKtbUEJ0A7uwJ
iqUEccD6/sZelxylDzjkPsxoXO7xVWk/rW8EUFcI3l/Zf6uk9L3E1CRR3M8DUY1U
zqVfCWFrLo6sP6xJ6cMIh6w8b6EPMS/3ITMdF3ek+x77Cip4KZgAX0CcmdZpkjwy
EmSf9LWyAbDOVIjqJTAeOAG+JJgjZ8WDueCLbSzgBTUBFnA4qVwqTboMcSxYjgTF
ZI2vefASaV32lMMqE9Gv6HdibTlprqdgDVdy/GoPpxsShMKsOQKKgY2aumZb1pfL
13Meo2yhuGxpQm1Zim3+vjU5AJr86M8lBzzomiESwGQ=
-----END RSA PRIVATE KEY-----

rsautlコマンド

署名や暗号化処理を行う。暗号化された秘密鍵を使っている場合、秘密鍵を使う"-sign", "-encrypt"で暗号化を解くためのパスフレーズの入力を求められる。"rsaコマンド"の項で作成した testrsa01_sec.pem, testrsa01_pub.pem を使って以下のファイルに対して練習してみる。
plain.txt:

abcdefghijklmn

なお、"-keyform"を指定しない場合の鍵ファイルのフォーマットはPEM形式。

署名と検証

署名:"-sign" + "-inkey 秘密鍵ファイル"

> openssl rsautl -sign -in plain.txt -inkey testrsa01_sec.pem -out sign.bin
Loading 'screen' into random state - done

sign.binはバイナリファイル。

秘密鍵による署名の検証:"-verify" + "-inkey 秘密鍵ファイル"

> openssl rsautl -verify -in sign.bin -inkey testrsa01_sec.pem
Loading 'screen' into random state - done
abcdefghijklmn

※元のファイル内容についてファイルに保存したい場合は "-out 出力ファイル名" を追加。

公開鍵による署名の検証:"-verify" + "-inkey 公開鍵ファイル" + "-pubin"

> openssl rsautl -verify -in sign.bin -inkey testrsa01_pub.pem -pubin
Loading 'screen' into random state - done
abcdefghijklmn

公開鍵ファイルを"-inkey"で指定しつつ、"-pubin"を指定しない場合、"-inkey"が秘密鍵として扱われエラーとなる。

> openssl rsautl -verify -in sign.bin -inkey testrsa01_pub.pem
Loading 'screen' into random state - done
unable to load Private Key

暗号化と復号化

公開鍵で暗号化:"-encrypt" + "-inkey 公開鍵ファイル" + "-pubin"

> openssl rsautl -encrypt -in plain.txt -inkey testrsa01_pub.pem -pubin -out plain_enc.txt

暗号化されたデータはバイナリ形式。"-pubin"を指定しない場合は秘密鍵として扱われエラーとなる。

秘密鍵で暗号化:"-encrypt" + "-inkey 秘密鍵ファイル"

> openssl rsautl -encrypt -in plain.txt -inkey testrsa01_sec.pem -out plain_enc2.txt

秘密鍵でも暗号化できるが、復号化には公開鍵ではなく秘密鍵が必要となる。

秘密鍵で復号化:"-decrypt" + "-inkey 秘密鍵ファイル"

> openssl rsautl -decrypt -in plain_enc.txt -inkey testrsa01_sec.pem
Loading 'screen' into random state - done
abcdefghijklmn


プレーンテキスト形式でダウンロード
現在のバージョン : 1
更新者: msakamoto-sf
更新日: 2013-07-27 18:52:23
md5:ade9b4b26593ac1648a4455cf6ffcada
sha1:c9224e22723bb2114b52e3b39da665665133eeee
コメント
コメントを投稿するにはログインして下さい。