二要素認証と二段階認証の違いについて

二要素認証・二段階認証について改めて理解しておきたいので、調べることにした。
以下はその備忘である。

二要素認証を先に理解すると、二段階認証の意味が分かりやすいため、その順でまとめている。

二要素認証(2-factor authentication)とは

二要素認証とは、「知識要素」「所有要素」「生体要素」のうち、ふたつ以上の要素を突破しないと認証成功としない方式のことである。 これらは端的に言うと、それぞれ次のようなものである。

keyvalue
知識要素パスワード、初恋の人の名前、飼っていたペットの名前、生年月日など、本人しか知り得ない情報(知識)を知っていることを以て本人と看做す(「本人しか知り得ない情報」とは、家族や親友などは知っている可能性はあったとしても、完全な第三者は知るはずのない情報という意味も含む)
所有要素スマートフォン、メールアドレス、電話番号(SMS)、住所、ICカードなど、所有している本人しかできない作業の達成を以て本人と見做す(「本人しかできない作業」とは、メールや郵便物の受け取った後に返信、ICカード提示などを含む)
生体要素指紋、声質、虹彩、静脈など、本人だけが持つ身体的・生体的な特徴が一致することを以て本人と看做す

多くの認証が必要なWebサービスで以下のような手順が必要になるのは経験済みである。

  • ログイン画面(もしくはアカウント作成画面)でID・パスワードを入力する(知識要素)
  • メールアドレスに送信されたOTP付きのURLにアクセスしたり、SMSに送信されたパスコードを入力したりする(所有要素)

ログイン時に要求されることはなくとも、アカウント作成時にはほぼ100%この手順が要求されることだろう。

つまり、現代においてまともなサイトであれば、アカウント作成時には「知識」と「所有」の二要素認証はほぼ採用されていると言ってもよく、逆にアカウント作成時に一要素だけの認証で終わってしまう場合には、そのサービスの利用自体が危険だと考えていても差し支えないのだろう。

二段階認証(2-step authentication)とは

二要素認証は、「知識」+「所有」のように、異なる要素による認証であることを理解した。

一方で、二段階認証は「同じ要素だが、異なる質問をする」というのが(やや正確性に欠けるが)分かりやすい表現である。

  • 「ID・パスワード」を入力後、「あなたの出身地」「初めて飼ったペットの名前」などの入力を要求する(2段階の「知識要素」による認証)
  • 「ICカードを提示」し、そのICカードに登録されているメールアドレスに、本人確認メールを送信してOTP付URLへのアクセスを要求する(2段階の「所有要素」による認証)

後者は本当にそういう組み合わせのシステムが存在するのかは分からない。今とっさに考えただけなので・・・

二要素認証と二段階認証を両方とも採用した実装も可能

つまり、以下のようなログインフローとすることで、知識による二段階認証 + 知識・所有による二要素認証 といったシステムを実現することは可能である。

  • 「ID・パスワード」を入力させて認証(知識要素による認証) に成功した場合
  • 「あなたの生年月日」を入力させて認証(知識要素による二段階目の認証)を行い、それも成功したならば
  • そのユーザに紐づけられたメールアドレスにOTP付URLを送信(所有要素による二要素目の認証)を行う、そのURLへのアクセス成功を以て
  • 本人認証OKとする

しかしこれだと手順が煩雑になるのと、知識による二段階目の認証は本人もその登録した答えを忘れてしまったりする可能性が高いというデメリットが目立ってくる。そこまでせずとも知識+所有の二要素認証で十分セキュリティは担保できるため、一般的なWebサービスであれば知識+所有の二要素認証までを実装しておけば問題ないのだと思う。

もちろん、所有要素すら無理筋にでもハックしようとチャレンジする猛者が後を立たないようなサービス、例えば突破できてしまえば一攫千金を狙えてしまうような金融系のサービスなどであれば、二要素認証では足りないという可能性もありえるだろう。そこはケースバイケースと言うべきか、煩雑さと強固さのトレードオフをどう考えるか、サービス提供者が頭を使って考えなければならない部分である。

参考

執筆日:
本記事のタグ