ワンタイムパスワードの現状と最新動向
– ユーザビリティを損なわずに認証を強化する –
はじめに
インターネットのサービスを利用していると、メールや携帯電話のショートメッセージにワンタイムパスワードが通知され、通知されたワンタイムパスワードをサービスに入力しないとログインできなかったり、先の操作に進めなかったりということが増えてきたと思います。
本コラムではこの「ワンタイムパスワード」の現状と最新動向を解説します。
ワンタイムパスワードとは
ワンタイムパスワードとは、一度きりしか使えないパスワードのことです。
「ワンタイムコード」や「ワンタイムキー」と呼ばれることもあります。
ワンタイムパスワードは、サービスを利用する際の「二要素認証」の1つとして利用されたり、特定の重要な操作の際の「追加認証」として利用されたりすることがあります。
特に近年では、ユーザIDとパスワードの組み合わせで認証する「知識認証」だけでは、ブルートフォース攻撃や辞書攻撃などで突破されるリスクがあることに加えて、携帯電話やスマートフォンの普及によって利用シーンが多くなってきています。
携帯電話やスマートフォンを所持していることを、登録済みの電話番号やメールアドレス宛にワンタイムパスワードを通知することで、「所持認証」として利用できます。
またその多くは数字4桁から8桁であることが多く、通知されたワンタイムパスワードをユーザがキーボードを使って入力することを前提に作られています。
さらにメールアドレスやショートメッセージに通知するタイプではなく、専用のアプリケーションを使って短い間でしか使えないワンタイムパスワードを発行してサービスに入力するタイプも増えてきています。
なぜワンタイムパスワードを使うのか
ユーザIDとパスワードだけの認証では脆弱
ユーザIDとパスワードだけで認証する「知識認証」を使う場合、サービスごとにパスワードとして文字列を設定します。この文字列は自ら変更しない限りずっと使い続けることができます。パスワードの文字列が外部に漏れてしまうと、知っている人は誰でも認証できてしまい、サービスを利用できてしまいます。
また、ブルートフォース攻撃や辞書攻撃、何らかの方法で入手したユーザIDとパスワードの組み合わせリストを使うパスワードリスト攻撃などで容易に突破されてしまいます。
ワンタイムパスワードは一度きりしか使えません。すでに使ったワンタイムパスワードは破棄されることが一般的で、たとえワンタイムパスワードが漏洩したとしても再度利用することはできません。
さらにワンタイムパスワードはとても短い時間でしか利用できないものです。常に更新されていくので、不正にログインを試みる攻撃者から総当たり攻撃などでパスワードを破るような時間的な猶予も与えません。
2要素目の認証として利用しやすい(導入コストや導入ハードルが低い)
現在ではほとんどの人がスマートフォンを所持しており、電話番号を1人1つ以上持っている時代です。このため電話番号を使った二要素目の認証はユーザへの導入ハードルがとても低いです。
さらに最近ではSMSやメールで通知を送ることができるサービスやテクノロジーも多く存在し、サービス側の導入コストも最低限で済みます。
生体認証や証明書を使った所持認証と比較するとワンタイムパスワードの導入はユーザの負担もサービス側の導入コストも低いと言えます。
ワンタイムパスワードの種類
ワンタイムパスワードにはその利用方法や通知方法によっていくつか種類があります。
メールで通知されるタイプ
サービスに事前に登録しているメールアドレスに対してワンタイムパスワードを通知します。
少し前まではメールを閲覧できる端末は限られていましたが、最近はWebメールが主流となり、複数の端末からメールを閲覧できるようになったため、メールで通知するタイプのワンタイムパスワードは他に比べてセキュリティレベルが低いものとして扱われるようになってきました。
SMSで通知されるタイプ
サービスに事前に登録している携帯電話番号に対してSMSを使ってワンタイムパスワードを通知します。
多くの人が1人1つ以上の携帯電話番号を持っている時代なのでユーザの導入ハードルは低いです。
またSMSはその電話番号の紐づいている端末でしか閲覧できないので所持認証として有効であり、メールと比較するとセキュリティレベルは高いと言えます。
音声(電話)で通知されるタイプ
サービスに事前に登録している電話番号から、専用の電話番号にコールするとワンタイムパスワードが発行されて音声で通知されます。ユーザは電話越しに聞き取ったワンタイムパスワードをサービスに入力します。
SMSを受信できない携帯電話番号や固定電話でも利用可能ですが、音声で通知された番号を入力する必要があるのでユーザの利便性は少し下がります。
ハードウェアトークン
ハードウェアのパスワード生成器で一定時間ごとに変わるワンタイムパスワードを発行し表示します。
ハードウェアを企業やサービスがユーザに配布する必要があり、サービスの更新や故障時にコストがかかることもあります。
最近では指紋認証などの生体認証が組み込まれているハードウェアも存在し、所持認証と同時に生体認証も実現できます。
スマートフォンアプリで生成するタイプ
スマートフォンアプリで一定の時間(30秒や60秒など)で更新されるワンタイムパスワードを生成し表示します。
利用者のスマートフォンに専用のアプリをインストールし、事前にサービス側と連携する必要があります。
サービスもスマートフォンアプリもTOTP(Time-based One-Time Password)というRFCで定義された仕様に基づいて実装する必要がありますが、アプリはTOTPに対応していれば利用することができます。
代表的なものには「Google Authenticator」(Google 認証システム)や「Microsoft Authenticator」などがあります。
これらのアプリはアカウントの移行にも対応しており、スマートフォンを機種変更しても移行をすれば利用できます。
最近ではスマートフォンの普及と手軽さから多くのサービスでこのタイプのワンタイムパスワードが利用されています。
またメンテナンスや運用の手軽さとセキュリティレベルの高さから銀行などの金融機関でもスマートフォンアプリを利用したワンタイムパスワードの利用が増えてきています。
ワンタイムパスワードのセキュリティ
上記の中でも多くのサービスで採用されている「メール」、「SMS」、「アプリ」について比較してみます。
メールで通知されるタイプ
Webメールが主流となってきているので、他と比較するとセキュリティレベルは下がることになります。
Webメールではデバイスを選ばずどこからでもメールの内容を閲覧できてしまうので、所持認証として成り立たないと言われています。
特にフリーのWebメール利用時の認証にユーザIDとパスワードしか設定していなく、生体認証や所持認証を設定していない場合、そのメールアドレスに通知されるワンタイムパスワードは所持認証としての条件を満たせなくなります。
ただし企業で利用する場合など、メールが特定の端末や特定の場所からしか閲覧できないような状態であれば有効となることもあります。
またメールに通知されるタイプのワンタイムパスワードはNIST SP 800-63(米国連邦政府の電子認証に関するガイドライン)でも非推奨とされています。
SMSで通知されるタイプ
SMSは特定の電話番号に通知されるので、電話番号が紐づくSIMカードを所有していることで認証要素とします。
メールと比較するとセキュリティレベルは高いと言われていますが、海外ではSMSを使った多要素認証を採用するサービスへの不正アクセスも最近発生しています。
また、SMSに通知されるタイプのワンタイムパスワードは端末そのものの乗っ取りには対応できないので、端末そのものに生体認証などの別の要素の認証を設定しておくことが望ましいでしょう。
後述しているワンタイムパスワードの自動入力に対応することでリスクを軽減することも可能です。
スマートフォンアプリで生成するタイプ
スマートフォンアプリでワンタイムパスワードを生成するパターンでは事前にアプリとサービスを紐づけ、複数の端末では利用できないようになっていることが多いのでメールやSMSで通知されるものと比較するとセキュリティレベルは高いと言えます。
また、専用のアプリを起動したときにしかワンタイムパスワードが表示されないので他のタイプよりもセキュアに利用できます。
ただし、SMSで通知されるタイプと同様に端末そのものの乗っ取りには対応できません。
スマートフォンアプリで生成するタイプでも同様に端末そのものに生体認証などの別の要素の認証を設定しておく必要があるでしょう。
ワンタイムパスワードに関する最新技術とその導入方法
ワンタイムパスワードを使った二段階認証をサービスに追加しても、ユーザとしては手間が増えるだけで実際には設定しないということも多いと思います。
実際Googleでも、二段階認証を設定していないユーザに対して2021年11月からGoogleアカウントログイン時の二段階認証を強制するように変更しました。
そこで最新のWeb技術ではSMSに通知したワンタイムパスワードをブラウザに自動入力することができるようになり、実際に大手のサービスでも採用されることが増えてきています。
導入する方法
- SMSを特定のフォーマットに合わせて作成します。
特定のフォーマットは「@ドメイン名 #ワンタイムパスワード」です。
以下に例を示します。 - 次にサービスの画面では専用のワンタイムパスワード入力画面を実装します。
入力フォームに対して「autocomplete="one-time-code"」属性を追加します。
以下に例を示します。
※Androidの場合はさらにJavaScript コードの追加が必要となります。
導入後の動き
iOS(Safari)の場合
SMS内の「Code」や「コード」といった単語の周辺からワンタイムパスワードを見つけ出して、キーボード上部に候補が表示されます。
表示された候補をタップすると、通知されたワンタイムパスワードが入力欄に自動で入力されます。
Android(Chrome)の場合
SMS内の「Code」や「コード」といった単語の周辺からワンタイムパスワードを見つけ出し、SMSを受信したときの通知からワンタイムパスワードをワンタップでコピーできます。
入力の際にはコピーしたワンタイムパスワードが入力候補としてキーボードの上部に表示され、ワンタップで入力欄に入力できます。
※ 挙動はOSやブラウザのバージョンにより変わることがあります
また、Web OTP APIというJavaScript APIを導入すれば、SMS OTPとWebサイトを紐付けての自動入力ができるようになり、利便性を保ちつつセキュリティレベルを向上できます。
SMSに記述されたドメインとWebサイトのドメインを比較して一致する場合にだけ自動入力するので正しいサイトでしか自動入力は発動せず、フィッシング対策として効果的です。
さらにPCブラウザでのログインの際に携帯電話番号にSMSでワンタイムパスワードが通知された時など、端末を跨いでワンタイムパスワードを自動入力することもWeb OTP APIを活用することにより可能となります。
さいごに
最近ではパスキーやFIDO2といった「パスワードレス認証」を採用するサービスが徐々に増えてきています。
ただし、パスワードレス認証は導入コストや導入ハードルがまだまだ高く、ワンタイムパスワードを採用しているサービスが主流となっています。
ワンタイムパスワードも、リスクベース認証との組み合わせや最新技術であるWeb OTP APIを活用することでユーザビリティはほとんど損なわずにセキュリティレベルを向上させることが可能です。
当社製品である「TrustBind」はメール、SMS、IVR、TOTPといった様々なワンタイムパスワードへの対応はもちろん、リスクベース認証やパスワードレス認証(FIDO2)にも対応した認証・認可プラットフォームです。
ワンタイムパスワードや多要素認証に関してお困りの方は「TrustBind」までご相談ください。
合わせて読みたい
認証・認可プラットフォーム TrustBind
※本コラムに掲載している商品またはサービスなどの固有名称は、各社の商標または登録商標です。