web-dev-qa-db-ja.com

デジタル証明書と対称鍵暗号の組み合わせを使用する

仮定して:
-AはCertAと秘密鍵KsAを持っています
-BにはCertBと秘密鍵KsBがあります
confidentialityおよびauthenticity[〜#〜] but [〜#〜]の要件でデータMをBに転送する必要があるデータの暗号化は対称暗号化で行う必要があります。
AおよびBは、すべての要件を達成するためにどのようにそれを行いますか?

2

この問題を解決するには、一般的な解決策として 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)

この方法では;

  • 対称アルゴリズムで暗号化されたデータは、非対称暗号化よりもはるかに高速です。
  • キーで暗号化されているため、データはconfidentialです。
  • aは彼の秘密鍵を使用して署名するため、データはauthenticatedであり、BはこれをAの公開証明書で検証できます。
1
kelalaka

これが [〜#〜] https [〜#〜] および [〜#〜] tls [〜#〜] のすべての通信の仕組みです。

2x Async certs/keysは、通信のライオン共有の対称鍵として使用される共有秘密を作成するために使用されます。

enter image description here

この図のステップ6/7では、ここで対称鍵が作成され、両側でChangeCipherSpecが新しく確立された共有鍵を利用します。

1