■LPIC303 Ver2.0、公開鍵の基礎の復習をしてみる。
KVM上にLPIC303 Ver2.0の学習環境を構築する。
http://labunix.hateblo.jp/entry/20180715/1531661773
■以下から何が変わったのかを確認するには、公式サイトの情報と照らすのが早い。
Wheezyのopensslでダイジェスト計算、ローカルCA認証局、自己署名証明書
http://d.hatena.ne.jp/labunix/20130513
■試験範囲の情報からは読み取れないほど大きな変化は無い様子。
5年前との違いは1024bitよりも2048bitが一般的になった程度だろうか。
$ w3m -cols 120 -dump http://www.lpi.or.jp/lpic3/range/range303.shtml | grep -A 18 " *325.1 "
325.1 X.509 証明書と公開鍵の基礎
重要度 5
説明 X.509 証明書と公開鍵の基礎について理解していることが求められる。OpenSSLを使用しての認証局を作成したり、
さまざまな目的にSSL証明書の発行する方法も含まれる。
• X.509 証明書、X.509 証明書のライフサイクル、X.509 証明書のフィールドおよびX.509v3 証明書の拡張につい
ての理解。
• トラストチェーンと公開鍵の基礎についての理解。
主要な知識範囲 • 公開鍵と秘密鍵の生成と管理。
• セキュアな認証局の作成と運用。
• サーバー証明書とクライアント証明書の要求、署名、管理。
• 証明書と認証局の廃止。
• opensslとそのサブコマンド
重要なファイル • OpenSSL の設定
、 • PEM, DER, PKCS
用語、ユーティ • CSR
リティ • CRL
• OCSP
■公開鍵暗号方式を使ったメッセージのやりとりを図示してみる。
「(公開鍵の)提供」と「(暗号化メッセージの)送信」が、
第三者に通信を傍受される可能性があるポイント。
libgraph-easy-perl: /usr/bin/graph-easy
graphviz: /usr/bin/dot
$ echo "("受信者準備" [生成] --> [秘密鍵] --> [公開鍵]) \
[公開鍵] --> [(公開鍵の)提供] --> [平文(送信)] \
(送信者[平文(送信)] --> [暗号化]) \
[暗号化] --> [(暗号化メッセージの)送信] --> [秘密鍵] \
(受信者 [秘密鍵]--> [復号] --> [平文(受信)]" | graph-easy --dot | dot -T svg -o message_crypt.
svg
■秘密鍵の生成
des3で暗号化したRSA形式の秘密鍵を、鍵長2048bitで生成
Generating RSA private key, 2048 bit long modulus
......................+++
......................................................................+++
e is 65537 (0x010001)
Enter pass phrase for private.key:
Verifying - Enter pass phrase for private.key:
Enter pass phrase for private.key:
writing RSA key
■秘密鍵の内容を確認
Enter pass phrase for private.key:
writing RSA key
modulus:
publicExponent: 65537 (0x10001)
privateExponent:
prime1:
prime2:
exponent1:
exponent2:
coefficient:
■公開鍵の生成
Enter pass phrase for private.key:
writing RSA key
■公開鍵の内容を確認
writing RSA key
Public-Key: (2048 bit)
Modulus:
Exponent: 65537 (0x10001)
■公開鍵の提供
labunix@172.31.31.32s password:
public.key 100% 451 426.9KB/s 00:00
■平文(送信)を暗号化
openssl rsautl -encrypt -pubin -inkey public.key -in Sample.txt -out Sample.txt.enc
■暗号化されたッセージを送信
labunix@172.31.31.31s password:
Sample.txt.enc 100% 256 222.9KB/s 00:00
■暗号化されたッセージを秘密鍵で復号
Enter pass phrase for private.key:
■平文(受信)の確認
Hello World
■あまりにも簡単に解けるので注意が必要という前置きをして。。。
51983
51983: 227 229
E3 (227) is prime
E5 (229) is prime
■秘密鍵を暗号化せずに、公開鍵とのペアを生成する。
メッセージの暗号化としては使えずにエラーとなるので、
基本動作の確認のためだけに。
Generating RSA private key, 16 bit long modulus
.+++++++++++++++++++++++++++
.+++++++++++++++++++++++++++
e is 65537 (0x010001)
[16bitのRSA形式の秘密鍵を生成]
writing RSA key
[秘密鍵から公開鍵を生成]
Private-Key: (16 bit)
modulus: 51983 (0xcb0f)
publicExponent: 65537 (0x10001)
privateExponent: 43241 (0xa8e9)
prime1: 229 (0xe5)
prime2: 227 (0xe3)
exponent1: 149 (0x95)
exponent2: 75 (0x4b)
coefficient: 114 (0x72)
writing RSA key
-----BEGIN RSA PRIVATE KEY-----
MCQCAQACAwDLDwIDAQABAgMAqOkCAgDlAgIA4wICAJUCAUsCAXI=
-----END RSA PRIVATE KEY-----
Public-Key: (16 bit)
Modulus: 51983 (0xcb0f)
Exponent: 65537 (0x10001)
writing RSA key
-----BEGIN PUBLIC KEY-----
MB4wDQYJKoZIhvcNAQEBBQADDQAwCgIDAMsPAgMBAAE=
-----END PUBLIC KEY-----
RSA operation error
140356568171776:error:04068065:rsa routines:rsa_ossl_public_encrypt:bad e value:../crypto/rsa/rsa_ossl.c:65: