暗号技術の基礎と応用
TLS 1.3などのプロトコルで、ECDHEの鍵交換で得た共有の秘密をそのまま暗号の鍵には使わず、HKDFのような鍵導出関数(KDF)を通して鍵を作る理由として、適切なものはどれか。
- A鍵導出関数を通すと、量子コンピュータに対しても、共有の秘密が安全になるから
- B鍵交換で得た値は短すぎるので、わざと計算に時間をかけて、総当たりを遅くするため
- C鍵交換で得た値は一様な乱数とは限らないので、偏りのない鍵に変換し、用途ごとに別の鍵を取り出すため
答えと解説を見る
正解:C. 鍵交換で得た値は一様な乱数とは限らないので、偏りのない鍵に変換し、用途ごとに別の鍵を取り出すため
鍵交換で得られる共有の秘密は、楕円曲線上の点の座標などで、すべてのビットが一様にランダムとは限りません。HKDFは、HMACを使って、まず共有の秘密から偏りのない擬似乱数の鍵を取り出し(Extract)、次にそれを「クライアントからサーバへの暗号化用」などのラベルとともに展開して(Expand)、必要な数と長さの鍵を作ります。用途ごとに独立した鍵を使えば、1つの鍵の問題がほかの用途に広がりにくくなります。パスワードから鍵を作るPBKDF2やArgon2はわざと計算を重くしますが、HKDFはエントロピーの十分大きな入力を前提とした、軽い処理です。
- A. 鍵導出関数は、鍵交換そのものの量子コンピュータに対する強さを変えません。耐量子化には、鍵交換の方式を替える必要があります。
- B. わざと計算を重くするのは、パスワードから鍵を作るPBKDF2やArgon2の考え方です。鍵交換の出力は、十分な長さとエントロピーをもっています。
- C. 正しい。偏りを取り除くExtractと、用途ごとの鍵を作るExpandの2段階で鍵を作ります。