日向夏特殊応援部隊

俺様向けメモ

斜め読みOpenID Authentication 1.1 Overview (2)

d:id:ZIGOROu:20070322:1174540380の続き

コンシューマーサイトがIdentity URLを取得する

コンシューマーサイトはエンドユーザーの要求するアイデンティティURLの文書を取得する。コンシューマーはheadセクションをopenid.server, openid.delegate宣言の為にパースする。

重要な注意点
  • エンドユーザーは時に悪意のあるユーザーになり、またコンシューマーになりすまし、内部ネットワークに侵入したりする。(こうした事から)コンシューマーはLWPx::ParanoidAgentのようなかなり慎重なHTTPライブラリを使う事を強く勧める。
  • コンシューマーは必ずdelegationを実装しなければならない。

Smart, Dumb(無口)モード

OpenID認証はコンシューマーの能力に応じてsmart modeとdumb modeの両方をサポートしています。
smart modeのコンシューマーは最初にもう少し処理をして情報を保持します。しかしstate情報をローカルにキャッシュする事が必要です。*1
dumb modeのコンシューマーは完全にstatelessであるが、さらに追加でHTTP Requestを必要とします。

重要な注意点
  • コンシューマーが最初に送信するエンドユーザーのIdPへのリクエストと共通鍵をまだそれをキャッシュしていない場合は結びつけてリクエストする事を推奨する。将来のidentityチェックリクエストにおいて、HMAC-SHA1で暗号化すべきである。このshared secretは期限が切れるまで利用される。
  • 共通鍵はDiffie-Hellman-negotiated secretによってplain textとencryptedに相互に変換可能である。Diffel-Hellmanを使った場合、associateモードの中でだけ使われる。checkid_immediateやcheckid_setupモードは既にshared secretをどのように取得したかに関わらずコンシューマーが既に取得している事を前提とする。

コンシューマーがアイデンティティを確認する

コンシューマーは現在、IdPのURLをcheckid_immediateモード(またはcheckid_setup)のURLを作り、それをUser-Agentに送ります。それらをUser-Agentに送る事によって、エンドユーザーのCookieといかなるログイン証明も信頼されたIdPに送り返されます。IdPがそれをどのように行うかはopenid.return_toによってURLをレスポンスに追加し、それをUser-Agentに送り、コンシューマーのサイトに戻します。

まとめ

全体的にこのsmart, dumbモードの違いってstatefull, statelessの違いのように読めるんですが、文章からだと確信が持てない。

またHMA-SHA1は軽くgoogleに聞いてみた所、

HMAC-SHA1ハッシュ関数SHA1ベースのメッセージ認証コード:RFC 2104)
Hをハッシュ関数SHA1)、Kを秘密鍵、MをメッセージとするとHMAC-SHA1の定義式は以下のようになる。ここで、ipad、opadは定められたパディング値でxorは排他ORの操作を示す。

HMAC-SHA1(K, M)=H(K xor ipad, H(K xor opad, M))

http://www.atmarkit.co.jp/fsecurity/rensai/webserv03/webserv01a.html

だそうです。

さらにDiffel-Hellmanですが、鍵共有の暗号プロトコルだそうです。

Perlでも実装がありました。

*1:statefullって事?