アカウント名:
パスワード:
パスワードの管理の歴史が簡単に書かれつつ、以下のような論旨が展開されていた。
「パスワードを平文で保存するのヤバくね?」→「パスワードを一方向ハッシュ関数でハッシュしようぜ!」
「ハッシュ化されたパスワードも最近のPCだと割と簡単にクラックされるようになってきてね?」→「ハッシュ化されたパスワードを格納している場所(ファイル/DB)を暗号化しようぜ!」
「ハッシュ化されたパスワードを格納している場所を暗号化しても秘密鍵が漏れたら意味なくね?」→「秘密鍵を Threshold Cryptography で分散管理しようぜ!」 (ここが PolyPassHash の発想)
で、この Threshold Cryptography というやつは、例えば RAID で言うところの RAID5 的な感じで「何個か valid な情報が揃えば元の情報を完全に復元できる」というテクニック。PolyPassHash では「登録されているパスワード全体のうちの数個のパスワード」をあらかじめ指定しておいて、そいつを threshold に使う・・・のかな?(自信なし)だから PolyPassHash を使うシステムを再起動する時には、再起動直後の最初の段階で threshold なパスワード(を持たされているアカウント)が閾値に足りるだけ正しく入力されないと、全体が使えない。と書いてある。ように読める。
あとは誰か識者の解説を待ちたい。
色々しっくりこない点もありますが
- パスワードのハッシュと論文で言うところの"Share"と呼ばれる鍵を使って計算した値を各ユーザ毎にDBに保存する - Shareは盗まれないようにどこにも保存しない - DBが盗まれてもShareがわからないのでオフライン攻撃でも果てしない時間がかかる がポイントになのかと思います。
重要なのはShareです。
ShareはPolyPassHashが有効な認証システムの初期化時に生成されて、閾値としてカウントされるアカウントを作成したら捨ててしまう。 閾値分のパスワードが入力されるまで一般ユーザに対しては認証を受け付けない。 閾値分の正しいパスワードを入力することで、Shareを求めることができる。具体的には、シャミアの秘密分散法を使う。得られたShareはメモリ上でしか保存されない。 それ以降の普通のユーザ認証は、入力されたパスワードに対してソルトでハッシュ化して、さらにShareを使って計算した値がデータベースに保存されている値とマッチするかどうかで行う。
使われている手法はどれも昔からあるもので、それらを使って低コスト(ユーザ側変更なし、追加ハードウェア必要なし)でセキュリティの高いパスワード管理ができるようになるというのがウリのようです。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
Stay hungry, Stay foolish. -- Steven Paul Jobs
論文PDFの冒頭をざっと読んだ感じでは (スコア:5, 参考になる)
パスワードの管理の歴史が簡単に書かれつつ、以下のような論旨が展開されていた。
「パスワードを平文で保存するのヤバくね?」
→「パスワードを一方向ハッシュ関数でハッシュしようぜ!」
「ハッシュ化されたパスワードも最近のPCだと割と簡単にクラックされるようになってきてね?」
→「ハッシュ化されたパスワードを格納している場所(ファイル/DB)を暗号化しようぜ!」
「ハッシュ化されたパスワードを格納している場所を暗号化しても秘密鍵が漏れたら意味なくね?」
→「秘密鍵を Threshold Cryptography で分散管理しようぜ!」 (ここが PolyPassHash の発想)
で、この Threshold Cryptography というやつは、例えば RAID で言うところの RAID5 的な感じで「何個か valid な情報が揃えば元の情報を完全に復元できる」というテクニック。
PolyPassHash では「登録されているパスワード全体のうちの数個のパスワード」をあらかじめ指定しておいて、そいつを threshold に使う・・・のかな?(自信なし)
だから PolyPassHash を使うシステムを再起動する時には、再起動直後の最初の段階で threshold なパスワード(を持たされているアカウント)が閾値に足りるだけ正しく入力されないと、全体が使えない。と書いてある。ように読める。
あとは誰か識者の解説を待ちたい。
Re:論文PDFの冒頭をざっと読んだ感じでは (スコア:1)
色々しっくりこない点もありますが
- パスワードのハッシュと論文で言うところの"Share"と呼ばれる鍵を使って計算した値を各ユーザ毎にDBに保存する
- Shareは盗まれないようにどこにも保存しない
- DBが盗まれてもShareがわからないのでオフライン攻撃でも果てしない時間がかかる
がポイントになのかと思います。
重要なのはShareです。
ShareはPolyPassHashが有効な認証システムの初期化時に生成されて、閾値としてカウントされるアカウントを作成したら捨ててしまう。
閾値分のパスワードが入力されるまで一般ユーザに対しては認証を受け付けない。
閾値分の正しいパスワードを入力することで、Shareを求めることができる。具体的には、シャミアの秘密分散法を使う。得られたShareはメモリ上でしか保存されない。
それ以降の普通のユーザ認証は、入力されたパスワードに対してソルトでハッシュ化して、さらにShareを使って計算した値がデータベースに保存されている値とマッチするかどうかで行う。
使われている手法はどれも昔からあるもので、それらを使って低コスト(ユーザ側変更なし、追加ハードウェア必要なし)でセキュリティの高いパスワード管理ができるようになるというのがウリのようです。