最近FIDOが熱いらしい
社内のセキュリティをどうするか考えていたところ、
最近FIDOによるパスワードレス認証が盛り上がっているということを知りました。
FIDO Allianceの公式ページを見ると、
Google、Amazon、FaceBook辺りの企業が最上位のBoard Level Membersになっており、
Wikipediaの業界標準になるとみられている
という記述もかなり信頼性が高そうです。
FIDOとは?
FIDOはクライアントサイドに秘密鍵を保存し、その利用に生体認証や物理トークンを要求する認証方式です。
この2段構えによって、従来の認証方式に比べて手軽かつ堅牢な認証を行うことができます。
他の認証方式との比較
上記の説明だけではわかりにくいので、
実際に従来の認証方式とその欠点を見ながらFIDOの長所を見ていこうと思います。
パスワード認証
最も普及している認証方式ですが、以下のような問題があります。
パスワードが短いと総当たり攻撃や辞書攻撃で簡単に突破されてしまう
総当たり攻撃に関してはサーバー側の実装である程度対策が可能ですが、
あまりに脆弱なパスワードを使っている場合、辞書攻撃で少ない回数で突破される可能性があります。
また、これらを防ぐためにパスワードポリシを厳しくすると、今度は利用者側が忘れる問題が頻発するようになります。
パスワードの使いまわしによって、連鎖的に侵入される可能性がある
パスワードが保存されているサーバーがクラッキングを受けると、
同じメールアドレス、ユーザー名とパスワードを流用しているサービスに連鎖的に侵入されてしまいます。
普通はこれを防ぐためにパスワードを平文で保存せずハッシュ関数をかけるなどして復元できない状態で保存するものですが、
FaceBookがやらかしていた記事が最近出ていましたし、
世間のシステムが皆しっかり守っていてくれると期待するのは依然として楽観的過ぎるようです。
フィッシングや中間者攻撃によって情報を奪われる可能性がある
サービス提供者側がどれだけ注意して守っていても、
ユーザー側がフィッシングに引っかかるなどして、パスワードとID自体を知られてしまうと、
正面から突破されてしまいます。
多要素認証
これらの問題に対応するために、多要素認証が考案されました。
通常のID/パスワードの他にワンタイムパスワードなど別の要素を要求する方式です。
パスワードやIDだけでは認証が完了しないため、
前述の総当たり/辞書攻撃やパスワード使いまわしによる侵入を防ぐことができます。
フィッシング対策は不十分
とはいえ、フィッシングによって通常のパスワード/IDに加えてワンタイムパスワードまで盗み取られた場合は侵入されてしまいます。
ワンタイムパスワードの有効時間が短いとは言え、人が入力する都合上数十秒はあります。
これだけあれば、悪意ある侵入者にとっては十分です。
認証に必要な情報を、有効期限付きとはいえ流用可能な形で送信している限り
フィッシングによる侵入は防ぐことができません。
デバイスごと奪われても厳しい
PCやスマートフォンと言ったデバイス自体が盗難にあった場合などには
多要素すべてを握られてしまうことになるので、防御が不十分になります。
FIDO
多要素認証の欠点を、公開鍵暗号方式と生体認証や物理トークンによって解消したものがFIDOです。
公開鍵暗号方式
FIDOでは秘密鍵をクライアント側に置いた公開鍵暗号方式が前提となっています。
サーバー側がクライアント側に対し、ランダムな文字列を送り、
クライアント側が秘密鍵によってそれに署名することで認証を行います。
秘密鍵で署名した情報を奪っても、元となる秘密鍵は復元できないため、
フィッシングによって情報を偽装サーバーに送らせても、
その情報を用いて真正サーバーにアクセスすることはできません。
生体認証や物理デバイスによる秘密鍵の保護
FIDOに利用する秘密鍵は、生体認証(UAF規格)や物理デバイス(U2F規格)によって保護されます。
特に生体認証の場合はデバイスごと盗まれた場合でも侵入されることはないため、非常に安全性が高いです。
(このため、パスワードとの二段階認証も求められておらず、パスワードレス認証が可能です)
まとめ
- FIDOは従来の認証方式の弱点を補ったもの。
- UAF規格の場合はパスワードレス認証が出来る
jsから利用するAPIのWebAuthnもありますし、今後触る機会は増えそうですね。