仮定して:
-AはCertAと秘密鍵KsAを持っています
-BにはCertBと秘密鍵KsBがあります
confidentialityおよびauthenticity、[〜#〜] but [〜#〜]の要件でデータMをBに転送する必要があるデータの暗号化は対称暗号化で行う必要があります。
AおよびBは、すべての要件を達成するためにどのようにそれを行いますか?
この問題を解決するには、一般的な解決策として Hybrid Cryptosystem を使用します。
対称暗号化(AES)用に新しいランダムセッションキー( エフェメラルキー )を作成し、適切な 操作モード でこのキーを使用してデータを暗号化します パディング方式 pkcs#5として
key = generate_random_key()
encrypted_data = AES(k, data)
これで、AはBの公開鍵を使用してセッション鍵を暗号化します。
encrypted_key = Encrypt(key, B_private_key)
最後に、Aはすべてにデジタル署名します
sign = Sign(Hash(encrypted_key || encrypted_data)
そして送る
Send(encrypted_data, encrypted_key, sign)
この方法では;
これが [〜#〜] https [〜#〜] および [〜#〜] tls [〜#〜] のすべての通信の仕組みです。
2x Async certs/keysは、通信のライオン共有の対称鍵として使用される共有秘密を作成するために使用されます。
この図のステップ6/7では、ここで対称鍵が作成され、両側でChangeCipherSpec
が新しく確立された共有鍵を利用します。