はじめに
UNIXコマンドでデジタル署名付き暗号化メッセージの送受信プロセスを検証してみました。
Mac環境で実施しております。
使うコマンド
- openssl
この手順は一般的に推奨される方法ですが、暗号化と署名の順序や方法は、使用するプロトコルやセキュリティ要件によって異なる場合があります。具体的な要件に応じて、適切な手順を選択することが重要です。
実際は、鍵の生成や管理において、適切なパーミッション設定や安全な保管場所の確保が必要です。特に秘密鍵は慎重に取り扱い、第三者に漏洩しないよう注意してください。
準備
OpenSSLで直接使用するためにSSHキーはPEM形式に変換する必要があります。
送信者Aの鍵を作る
# PEM形式の秘密鍵を生成する
openssl genpkey -algorithm RSA -out private_key_A.pem
# PEM形式の秘密鍵からPEM形式の公開鍵を作成する
openssl rsa -in private_key_A.pem -pubout -out id_rsa_pub_A.pem
受信者Bの鍵を作る
# PEM形式の秘密鍵を生成する
openssl genpkey -algorithm RSA -out private_key_B.pem
# PEM形式の秘密鍵からPEM形式の公開鍵を作成する
openssl rsa -in private_key_A.pem -pubout -out id_rsa_pub_B.pem
送受信プロセスの検証
①メッセージを作成
送信者Aが送るメッセージを作る
echo '寿限無寿限無五劫の擦り切れ海砂利水魚の水行末雲来末風来末食う寝る処に住む処やぶら小路の藪柑子パイポパイポパイポのシューリンガンシューリンガンのグーリンダイグーリンダイのポンポコピーのポンポコナーの長久命の長助' > message.txt
②送信者Aの秘密鍵でメッセージに署名
送信者Aの秘密鍵でメッセージに署名
openssl dgst -sha256 -sign id_rsa_A -out message.sig message.txt
③受信者Bの公開鍵でメッセージを暗号化
受信者Bの公開鍵でメッセージを暗号化
openssl pkeyutl -encrypt -in message.txt -pubin -inkey id_rsa_pub_B.pem -out encrypted_message.bin
④送信者Bの秘密鍵でメッセージを復号化
盗聴を防ぐ
送信者Bの秘密鍵でメッセージを復号化
openssl pkeyutl -decrypt -in encrypted_message.bin -inkey id_rsa_B -out decrypted_message.txt
⑤送信者Aの公開鍵で署名を検証
なりすましと改ざんを防ぐ
送信者Aの公開鍵で署名を検証
openssl dgst -sha256 -verify id_rsa_pub_A.pem -signature message.sig decrypted_message.txt