レゴブロックで整理する認証方式の段階/要素
おはようございます。ritouです。
Digital Identity技術勉強会 #iddanceのカレンダー | Advent Calendar 2021 - Qiita 4日目の記事です。
前にこんなTweetをしてしまったので書きます。
参考記事
いろんなサービスで2段階認証やられてますね。FIDOだと2要素認証だと言われてます。でも、プラットフォームの生体認証使ったりセキュリティキーに生体認証載ったら一回のユーザーアクションでいけますよね?それって段階としては1ですか?要素は2?要素と段階どっちが強いんです?…みたいな混乱を解消するための記事です。
せっかくなので他の認証方式もまとめて段階と要素の関係を整理してみましょう。
はっきり言って大した話ではないです。
準備
分かりやすく説明するために、どこの家にもありそうな「でかめのレゴブロック」(なんていうんだっけこれ。名前忘れた)を使いましょう。
- 知識情報を利用する認証方式:赤色
- 所持情報を利用する認証方式:黄色
- 生体情報を利用する認証方式:青色
これを組み合わせて最終的に認証強度がどうなるんやって考えられるのでは?というお話です。
単要素
パスワード認証だけ
知識情報を利用する。
OTP via SMS / Magic Link via Emailだけ
所持情報を利用する。
2要素
パスワード認証 + TOTP
知識情報を利用した後に、所持情報を利用する。
2色あるので2要素、そして2つ並んでるので2段階。
パスワード認証 + FIDO U2F
知識情報を利用した後に、所持情報を利用するって整理ではさっきと一緒ですよね。
ここでは要素と段階の話だけなので、認証方式毎の特徴とかの話はしません。
FIDO2: セキュリティキーにタッチ + PINを入れて UserVerification
(ここ前の説明が微妙だったので訂正します。)
セキュリティキーを使ってパスワードレスにしたい場合、最近は生体認証つきのがでてきましたがこれまではブラウザとの組み合わせで実現できていました。
いわゆるUser Verificationと呼ばれるやつで、YubiKeyなどのセキュリティキーにタッチしてブラウザにPINを入れるみたいな流れはそれぞれ所持情報、知識情報を利用するわけです。
よって、
- 黄色と赤色のブロックが並んでいる
- 黄色の上に赤色のブロックが重なっている
のどちらかになりそうです。2案を出したのは、ユーザーアクションも2つあるので2段階 と捉えるか、セキュリティキーによる認証として行うので1段階だろう と捉えるかの両方の話がありそうです。NISTやFIDOの定義だと後者な気がしますね。
FIDO2: セキュリティキー上の指紋認証による UserVerification / Plarform Authenticator
最初に取り上げたブログ記事はこの辺でしょう。
ユーザーアクションが1つで済むなら1段階と言えますし、そのデバイスを利用していることが所持情報を利用していて生体情報やPINを利用した認証を行なっているので2要素ですね。
n要素 vs n段階
ここまでで何が言いたかったかっていうと
- 色の数が多い : 複数要素
- (重なりではなく)並んでるブロックの数が少ない : 利便性が高い
ってことなんですが、これだけだと面白みが何もないのでもうちょい考えてみましょう。
オプションでFIDO導入してサービス全体のセキュリティ向上?
今までパスワード認証を使っていたところが、FIDOを導入して サービス全体のセキュリティ向上!! なんて言っちゃうと、誰かに鼻で笑われてしまいます。
- パスワード認証 : 赤1つ
- FIDO : 黄 + 青(or 赤)
という両方の認証方式を両方使えるユーザーがいた場合、サービス全体の認証強度なんてのは低い方に引っ張られます。 FIDOを利用してもパスワード認証をやめなければセキュリティは向上できないみたいな話です。こういう時は利便性って言っておきましょう。
パスワード認証は使っていないが、セキュリティキーを無くしてもメールアドレスのみで復活できる
似たような話で、FIDOのセキュリティキーによるパスワードレス認証を導入しました!っていうところが、セキュリティキーを紛失したときにメールの受信確認のみでリカバリーできるみたいなのを見ると、それまた
- FIDO : 黄 + 青(or 赤)
- メールでリカバリー : 黄1つ
が並んでいる状態なので、もうちょっと考えたほうが良いんじゃない?ってなります。
FIDOのリカバリーめんどい問題
いわゆる「FIDOのリカバリーめんどい問題」はまさにこの
- FIDO : 黄 + 青(or 赤)
っていうのと同等の色数を持つものをどうやって用意したら良いんだっけ?ってところに尽きる分けです。
- メールのみがダメならリカバリーコードと組み合わせるか? : 黄 + 黄 ... うーむ色の数が...
- メール + PINでやるか? : 黄 + 赤 ... わいはパスワードレスを目指したいんや!
みたいな話ですね。
まとめ
- 認証で利用する要素の種類とユーザーが体感するステップを整理して考えましょう
- FIDO採用でサービス全体のセキュリティが...とかいう前に、積み上げてどこが弱いかを認識しましょう
以上です。
アドカレはしばらく他の人が書いてくれそうなので安心ですが、この記事を書いている時点で12/8と12/24が空いてます。余裕のある方はどうぞ。
ではまた。
Discussion