OpenIDのセキュリティモデルについて
現代の暗号化技術について (via: wikipedia)
現代の暗号ってのは概ね2パターンしか無くて、
って奴です。
共通鍵ってのは代表的なのはパスワード認証なんかはそうで、データを送信する側(概ねサーバーとか)とデータを受信する側(ユーザー)は共に同じ共通鍵であるパスワードを知ってるってケ−スがそれ。DESとかAESが使われます。
公開鍵・秘密鍵ってのはsshでの公開鍵認証でも使われているように、データの暗号化に公開鍵を使い、データの複合化に秘密鍵を使う。従って特定のデータを複合出来るのは秘密鍵を所持している人のみ可能だって事になります。RSAだとかDSAが使われてます。
HMAC-SHA1
MACってなんだよ(ぇ
そういえば良く聞くけど何者かってのは調べた事が無かったので、調べてみました。
MACとはMessage Authentication Codeの略で、
メッセージを圧縮したようなもので、ハッシュ関数によって生成され、メッセージに付帯される。受信者は送信者と同じプロセスでこれを生成し、メッセージに付帯させることによって、通信途中の改ざんなどをチェックすることができる。 秘密の共有鍵を持った送信者のMACと受信者が受信したときに生成したMACが一致しない場合は、メッセージ盗聴・改ざんの恐れがある。逆に一致する場合は改ざんの恐れがないとほぼ断定できる仕組みとなっている。
とあるように、共有鍵を持った受信側、送信側双方が、データのやり取りの上で改ざんが行われていない事を保証する為に行うチェックサムみたいなものって事ですね。なるほどー。
Diffel-Hellman鍵共有
DH鍵交換とかDH鍵共有みたいな言い方をされる事がある。
Diffie-Hellman鍵共有(デフィー・ヘルマンかぎきょうゆう)、あるいはDiffie-Hellman鍵交換(-かぎこうかん)とは、事前の秘密の共有無しに、盗聴の可能性のある通信路を使って、暗号鍵の共有を可能にする暗号プロトコルである。この鍵は、共通鍵暗号方式の鍵として使用可能である。
とても重要なのは、「盗聴の可能性がある通信経路」でも「暗号鍵(共通鍵)の共有が可能」って事ですね。
今回みたいなOpenIDでのConsumer-IdP間の通信において、httpでPOSTしてますけど、本来はSSLとかで、通信経路自体をセキュアにするんだろうけど、
httpで仮に漏れてもOKなんて仕組みがあるのは全然知らなかった。
実際の内容ですけど、
このプロトコルは通信を行いたい2者が、各々公開鍵と秘密鍵を用意し、公開鍵のみを公開する。そして、お互いに秘密の値から作成されるデータを相手に送信し、各自、自分の秘密鍵と受信したデータから共通鍵を作成できる方法である。第三者が送受信されるデータを盗聴しても鍵を生成することができない所に特徴がある。
つまりこういう事。A-B間で通信を行いたいとき
そして、お互いの公開鍵を交換し合う。
お互いのデータのやりとりでは、例えばBからAに何かを送信する場合、BはAより受け取ったAの公開鍵を持ってデータの暗号化をし、Aはそのデータを受信して、自分の秘密鍵で複合する。ってやり方が取れる。
それが互いに保証されるので、共通鍵の受け渡しが非常にセキュアに出来ますよって事になる。凄い!