前エントリの続き。プラス、平文パスワードを復号できる必要性が、某氏に理解してもらえなかったようなので。
一般に、
OSサポートの無いサードパーティの認証ソフトウェアは、
平文のパスワードを何らかの方法で復号する必要がある。(追記:もし平文パスワード無しにログインできるなら、OSの認証機構それ自体が脆弱であり、考慮する意味が無い。)
つまり「暗号化されたパスワード」という、総当りで簡単に平文を得られる可能性の高いデータを保持する必要があり、十分なパディングなど
総当り耐性を高める適切な暗号化を施す必要がある。
暗号専用ハードウェアなどに保存されていたり、十分なDRMで見つからないよう保護されているならともかく、windowsレジストリなどの他のユーザからアクセス出来る場所に置くなんて論外だ。そのうえ、件の認証ソフトウェアは暗号化方式が酷かった。(恐らく56bit鍵だが直ぐ分かったということなので、秘密鍵をDRM無しにハードコードしていたのだろう。もしくはIV固定で選択平文で解けて鍵不要だったとか)
平文パスワードを必要としない指紋認証にするには、OSのサポートが必要になる。
認証ハードウェアにカーネルレベルのサポートがあれば、話は簡単。カーネル内の情報がユーザーランドから読み書き出来るなら、そもそも安全なOSでは無いので考慮する必要はない。カーネルは認証ハードウェアに直接アクセスして、ユーザーを識別出来る。
OSSならサードパーティベンダはカーネルドライバを提供してユーザにカーネルをリビルドしてもらえばよい。
プロプライエタリなユーザー認証機構をもつカーネルでサードパーティ認証を実装するには、Oauthと同じ仕組みが必要になる、と言えばWebの人にわかってもらえるだろう。
例えばTwitter=OS、twitterfeed=生体認証ソフトウェア、エンドユーザはそのまま人間に対応する。
(無関係だけど今twitterfeedがうまく動かない……)
(追記、認証制御できる特権を持たないという意味で、)ユーザーランドで動く認証ソフトウェアは、OSサポートが無い限り、ユーザのパスワードを(暗号化して)保存して、複合した平文パスワードをOSに渡すしか無いが、
OSサポートがあれば、ユーザを生体認証してアクセストークンを渡せば済む。
この場合はアクセストークンを正しく暗号化して保護する必要はあるが、
トークンが漏れてもパスワードは漏れない。
またカーネルが異常なトークン利用や、脆弱なトークン保護機構を検出した際に、生体認証ソフトウェアを個別に失効させる事もできる。
前エントリ
http://causeless.seesaa.net/article/296998112.html と合わせて、
OSサポートのないサードパーティの生体認証では少なくとも平文パスワードを復号できる必要があり、ハードウェア対ダンパ性か強固な暗号化の無い場合脆弱になる。OSサポート=カーネルレベルで実装するべき。ということ。
posted by ko-zu at 08:22|
Comment(0)
|
TrackBack(0)
|
セキュリティ
|

|