下記の暗号化技術に関する記事の続きです。
今回は暗号化・復号化で使用される鍵についてまとめます。
暗号方式で使用される鍵とは
暗号方式の暗号化・復号化で使用される鍵は、擬似乱数生成器によって生成される数値で表現されることが多いです。
擬似乱数生成器によって生成する理由は、第三者によって鍵を予測されることを防ぐためとなります。強固な暗号方式であっても鍵が予測可能なものであれば何の意味もないため、鍵が予測不可能なものであることを担保する必要があります。
また、鍵にはセッション鍵とマスター鍵という種類があるので、これについても下記で説明します。
セッション鍵
一時的に使用する共通鍵暗号方式の鍵のことを指します。主に通信データを暗号化する鍵(CEK)として使用されます。
SSL/TLSの1セッション分の通信間で使われ、セッションが終了した段階で鍵は破棄されます。
セッションとは、SSL/TLSの暗号化通信を行う二者間における、通信が始まる前から通信が終わるまでのことを指します。セッションが終了するタイミングは大きくわけて下記の二つがあります。セッション鍵はこのタイミングで破棄されます。
- SSL/TLSのアラートメッセージ「close_notify」が送られた場合
- もしくは通信する二者間のどちらかが通信不能となってタイムアウトした場合
また、セッション鍵はセッションが開始されるたびに生成されます。よって鍵を生成するのに使用する擬似乱数生成器の品質が良くないと、次に生成されるセッション鍵を予測されてしまう危険性があるので、注意は必要です。
マスター鍵
マスター鍵はセッション鍵と違い、セッションが破棄されたとしても破棄されない鍵です。
何度も使用される鍵となるので、用途としては鍵を暗号化するための鍵(KEK)として使用されることが多いです。
マスター鍵の生成は、パスワードとソルトをもとに作成される事も多いです。
ソルトとはパスワードを予測させないための乱数値のことを指します。パスワードとソルトを使って一方向ハッシュ関数で算出されたハッシュ値が鍵となります。
セッション鍵とマスター鍵の使い分け
マスター鍵とセッション鍵の使い分けについてまとめます。
簡単に言ってしまえば、マスター鍵はセッション鍵を暗号化するために使われ、セッション鍵は送るデータを暗号化するために使われることが多いです。下記の図のようなイメージです。
これにより、セッション鍵が第三者に知られたとしても、解読されるのはごく一部の情報です。使用している暗号方式に脆弱性がなければ、他のセッションの通信が知られることはありません。それ以降のデータが盗聴・改竄されるようなことはなく、鍵が流出した影響を小さくできるためこのような使われ方をすることが多いです。
参考資料