共通鍵暗号方式とは
ドアの鍵との比較で考えます。通常の鍵はドアを閉める鍵(暗号鍵)と開く鍵(復号鍵)とは同じ(合鍵はあるにせよ)ですね。それと同様に,暗号電文を交換するには,送信者と受信者人が同じ数字列(鍵)を持っていればよいことになります。
この方式は、送信者と受信者が同じ(共通の)鍵を持つのが特徴ですので共通鍵暗号方式といいます(鍵を第三者に秘密にすることから秘密鍵暗号方式ともいいますが、公開鍵暗号方式での秘密鍵と混同されやすいので、「共通鍵暗号方式」が広く用いられるようになりました)。
代表的な共通鍵暗号方式
従来はDES(Data Encryption Standard)が広く用いられていました。しかし、コンピュータ能力の向上により解読されるようになり、より強固なトリプルDESやIDEA(International Data Encryption Algorithm)などが作られました。
現在ではNIST(National Institute of Standards and Technology:米標準技術局)によるAES(Advanced Encryption Standard)が主流です。AESの鍵長は128/192/256bitの3種類があり、シンプルな構造で暗号化/復号化処理の高速実行ができ、しかも強固な暗号化ができる特徴をもっています。
KCipher-2は、KDDIと九州大学が共同設計したもので、AESと比べて最大10倍の暗号化・復号速度があり、電子政府推奨暗号に選定されました。
共通鍵暗号方式の特徴
共通鍵暗号方式は、公開鍵暗号方式と比較して暗号化や復号の処理が高速であるという利点があり、当事者が限定されている場合には適していますが、当事者が多数の場合、特に電子商取引のような場合では次のような欠点があり,特殊な場合を除いてはこのままで用いることはほとんどありません。
- 鍵交換でのセキュリティ
- 鍵を相手に知らせる必要がありますが、第三者に知られてはなりません。電子メールで鍵の交換をするのでは,そのメールを交換するときに第三者に漏洩する危険性があります。だからといって,鍵を郵便やFAXで送るのではインターネットで取引をすることの一貫性が失われます(注:DH)。
- 鍵管理が困難
- 暗号交換をする相手ごとに異なる鍵を持つことになります。n人が、それぞれ2人の間で共通鍵暗号方式で暗号文を交換する場合には、
nC2=n(n-1)/2組
の鍵が必要になります(n=100人の間では100×99/2=4950組)。
各人がn-1個の鍵をもつ必要があり、しかも、それを第三者に秘密にしておく必要があります。
これでは、nが多くなると鍵の管理が困難になります。不特定多数を対象にする電子商取引では、深刻な問題になります。
(注)DH(Diffie-Hellman)鍵交換方式
秘密鍵を安全に送受信するための鍵交換方式です。秘密鍵そのものではなく、乱数と秘密鍵から生成した配送鍵を送受信します。離散対数問題という数学の困難さに依存したアルゴリズムを用いており、第三者が配送鍵を知っても、秘密鍵を知ることが困難になります。
共通鍵暗号方式の実装
共通鍵暗号方式を実際に適用する方法に、ブロック暗号とストリーム暗号があります。
ブロック暗号(Block Cipher)
平文を特定長さ(AESでは128・192・256bit)のブロックに分割し、ブロックごとに暗号化する方式です。
- ECB(Electronic CodeBook mode )モード
どのブロックにも同じ暗号処理を行ないます。単純で実装が簡単で、複数のブロックを並列して処理できるので高速ですが、パターン解析が容易で安全性の観点からは推奨されません。
- CBCモード(Cipher Block Chaining)
平文と直前の暗号文の各bitをXOR演算した結果に対して暗号化処理を行います。同じ平文のブロックがあっても、異なる暗号文になります。
- 暗号利用モード(Block cipher modes of operation)
ブロック長よりも長いメッセージを、ECBやCBCを用いて暗号化する手段です。
ストリーム暗号(Stream Cipher)
平文の1ビットまたは1バイトごとに暗号化する方法です。乱数を発生させて、その乱数を元にデータを端から暗号化していきます。
ブロック暗号は一定量のデータが溜まらなければ処理できませんが、ストリーム暗号なら逐次処理できるので、リアルタイム性が求められる通信に適しているのが特徴です。ただし、安全性の検証はブロック暗号のほうが進んでいます。
メッセージ認証
メッセージ認証とは、共通鍵(秘密鍵)暗号方式による、伝送経路における改ざんの有無を確認できるメッセージ交換方式です。
KPIに基づく電子署名を用いたハイブリッド方式では、改ざん確認と送信者の本人確認ができますが、メッセージ認証では、送信者確認はできません。しかし、共通鍵の暗号方式ですので、暗号化や復号の処理が効率的である利点があります、
メッセージ認証の仕組み
事前の共有事項
メッセージ認証での通信を行う前に、送信者と受信者は、次の事項を共有している必要があります、
- 共通鍵の共有
送信者と受信者は、何らかの手段で、共通鍵を共有しておく必要があります。
- ハッシュ関数と暗号化方式の共有
ハッシュ関数(メッセージをハッシュ値に変換する計算式)と、ハッシュ値を共通鍵で暗号化してMACを作るアルゴリズムは、送信者と受信者の間で合意されている必要があります(第三者に秘密にする必要はない)。
これらは、広く用いられている標準方式があります。
メッセージ認証での代表的なハッシュ関数にはSHAシリーズ、暗号化方式にはブロック暗号に基づくCMAC(Cipher-based MAC)があります。
メッセージ認証の手順
- 送信者によるMACの作成
送信者は、ハッシュ関数を用いてメッセージのハッシュ値を作成します。メッセージが異なればハッシュ値は異なる値になります。
さらにハッシュ値を共通鍵を用いて暗号化します。その暗号化データをMACといいます。
すなわちMACはメッセージや共通鍵が同じならば同じ値、それらに変化があれば、異なる値になります。
- メッセージとMACの送信
送信者は受信者にメッセージとMACを送信します。メッセージは暗号化されていない平文ですので、盗聴されるリスクはあります。
しかし、メッセージが改ざんされると、そのハッシュ値が変わります。しかし、盗聴者は共通鍵を知らないので、それに合わせたMACを作ることhできません。
- 受信者の改ざん確認
受信者は、受け取ったメッセージを、送信者と同じ手順でMACを作成します。
伝送中でメッセージに変化がなければ(改ざんされていないならば)、作成したMAC(MAC(R))は送信者から送ってきたMAC(MAC(S)) と一致しますし。それが一致していないならば、改ざんされたとわかります。