Unofficial translation: Persistent Login Cookie Best Practice

Date
2005-10-13 (Thu)

ちょっと考える所があって、調べものをしていて、面白い記事を見つけたのでついでに公開します。Persistent Login Cookie Best Practice 、邦題は 『ログイン保持クッキー(Persistent Login Cookie)の上手な使い方』 とでもしておきましょうか。原著: Charles Miller, 2004 翻訳: Takashi Mizohata, 2005.

ただ、この方法だと被害は少ないですが、実際に盗まれちゃった時に、盗まれたことがわかるだけ、ま、わかるだけいいのかな…


ログイン保持クッキー(Persistent Login Cookie)の上手な使い方

Persistent login cookie とは、“次回からログインを省略”や“ユーザ情報を記録する”などのチェックを入れてログインした時、あなたのブラウザに保存される Cookie です。申し上げられることは、そういった Cookie は時代遅れで、我々はユーザログインを取り扱うよりよい方法があるにも関わらず、未だに Cookie は使われているし、我々は新しい方法に移行もしていません。

以下の処方は、暗号を使用しませんが、より強力である優良な乱数生成を必要とします。

前提事項

Charles の処方

Cookie は、ユーザの username、それに続く区切り記号、さらにある大きな乱数(128 bits もあれば、気の遠くなる程大きく、十分だと思います)の3つで構成されるべきです。サーバ側は、その乱数と username の関連をデータベースに保持し、クッキーの有効性を確認できます。もし cookie が、データベース上で一致する 乱数と username を持っていれば、ログインは成功したことにします。

いかなる時にも、username はいくつかのそのような乱数に関連付けられているかもしれません。そして、起こりえないと思われますが、もし2つの username が、1つの同じ乱数に関連付けられていたとしても、あまり問題にはなりません。

Persistent cookie はログインを一回で済ますにはとてもいい方法です。認証が確認されたら、ログインに使用された乱数は、無効化され、新しい Cookie が割り当てられます。標準的な session 管理は、セッションの間ぶん、ログイン情報を保持します。つまり、新しく割り当てられた乱数を含む cookie は、次のセッションまで確認されることはありません(もちろんこの Cookie も次回アクセスのあったときに無効化されます)。

サーバ側は、既に一度でも使われたような乱数を割り当てないよう、意図的に何かをする必要はありません。それが起こるような確率は非常に低いですし、もし起こったとしても、悪用するために(乱数の再利用が起こったことを)知ることはできません。

あるユーザが意図してログアウトした場合、そのユーザの持つ乱数は無効化されるべきでしょう。加えてもしもの時のため、各ユーザのオプションとして、システム側で記録しているそのユーザすべてのログイン(乱数)情報を消去できる機能はあるといいかもしれません。

周期的にデータベースは、ある一定の期間使われていないユーザ情報−乱数の関連を消去したほうがよいでしょう(例えば3ヶ月とか:128 bit の乱数空間におけるキーの衝突というよりも、テーブルサイズの方がずっと大きな問題となりえそうです)。

以下にあげるような機能は、cookie によるログイン保持では絶対に使用できないようにすべきで、必ず正しいパスワードの入力を必要としましょう。

  • ユーザパスワードの変更
  • ユーザの email アドレスの変更(特に email によるパスワード復旧機能がある場合)
  • ユーザの住所、支払い詳細、財務情報にアクセスする場合
  • 購入に関するあらゆる機能

結果

もしログイン cookie が奪われたら、攻撃者はユーザとして web-site の機能を使うことができます。これは cookie が何を含んでいようとも、避けることはできません。しかし、攻撃者は以下のことができません。

Cookie は本質的に変わり続けるものなので、そのことも攻撃者が cookie を盗んで何か悪いことをする機会を減らしていると言えます。そしてそれはつまり、使い物にならない鍵を手に入れるだけにならないためには、攻撃者が手間をかけねばならないということなのです。

Comment:0

Comment Form

Remember Me?


Trackback:0

TrackBack URL for this entry
http://blogs.grf-design.com/mt/mt-tb.cgi/122
Listed below are links to weblogs that reference
Unofficial translation: Persistent Login Cookie Best Practice from The Croton

Return to Page Top