WebAuthnのやさしい解説!安全にパスワードレス認証ができる仕組みとは?
こんにちは!内定者アルバイトとして技術戦略部で働いている平尾です!
オンライン上のサービスを利用する時、皆さんはどの様に自分のアカウントにログインしていますか?
恐らく多くの場合、IDとパスワードでログインしていることが多いのではないかと思います。
パスワードの流出による個人情報の漏洩などの被害は後を絶ちません。
今回紹介するWebAuthn(Web Authentication API) は、Web上でのより安全な認証可能にしてくれます。
この記事では、WebAuthnの概要を解説していきます。
WebAuthnとは
WebAuthnを知るためにはまずFIDO(Fast IDentity Online) について知っておく必要があります。
FIDOというのは、パスワードの認証よりも安全で高速な認証を可能にする仕様のことです。
この仕様は、新しいオンライン認証技術の標準化を目指して発足された「FIDO Alliance」という団体から発表されました。
2018年には、WebでFIDOを使えるようにするFIDO2という仕様も同団体から発表されています。
WebAuthnというのは、このFIDO2の仕様の一部のことを指しています。
それでは、FIDOの仕組みについて詳しく触れていきましょう。
FIDOの仕組み
FIDOでは、認証器・RP(Relying Party)・認証サーバが登場します。
それぞれについて説明します。
- 認証器について
- 認証器は下記の機能を備えた機器
- 署名の作成、キーペアの作成、認証情報の管理、所有確認や生体認証の実施などの機能
- デバイス内蔵・外部の2つがある
- RPについて
- FIDOを導入する対象のシステム、サービス
- 認証サーバについて
- FIDOの認証の処理を行うサーバ
- 場合によっては認証サーバとRPが同じサーバで処理されることがある
FIDOの認証では、公開鍵暗号方式を採用しており、登録・認証の2つの処理を行います。
パスワードの認証と大きく異なっている点は、ユーザーとRPで生体情報等の認証情報がやり取りされないことです。
重要な認証情報である秘密鍵は、認証器がローカルで厳重に管理してくれます。
FIDO2とWebAuthn
FIDO2が登場し、デバイス内部の認証器だけでなく外部の認証器も使えるようになり、更にはWeb上でFIDO認証ができるようになりました。
このFIDO2はCTAP(Client To Authenticator Protocol)とWebAuthnで構成されています。
それぞれについて説明します。
- CTAPについて
- デバイスと認証器の通信プロトコル
- 内部に認証器を持たないデバイスでも、外部の認証器を使用可能にする
- WebAuthnについて
- FIDOをWebで使用可能にするJavascript API
CTAPによって一般的な環境(モバイル端末・デスクトップ端末)でも外部の認証器を使用したパスワードレス・2要素・多要素の認証が実現され、
WebAuthnによってブラウザを介したWebサービスとのやりとりが可能になりました。
このようにFIDOの強力な認証があらゆるWebサービスで利用できるようになのがFIDO2です。
Webサービスにユーザーがアクセスする際に使う主要なブラウザ(Chrome, FireFox, Safariなど)で、FIDO2がサポートされています。
WebAuthnによって、Webサービスがブラウザを介して認証器を呼び出すことが可能になり、WebサービスがFIDOの認証を利用できるようになりました。
認証操作の一例(認証器は外部、OSはWindows、ブラウザはChrome、FIDO2の認証が可能なWebサービスで認証した場合)を下図に示します。
登録と認証
FIDO2の登録と認証の流れを解説します。
登録
Webサービスに公開鍵の登録を行います。
登録の流れを下図に示します。
- ブラウザ上でWebサービスにアクセスし、登録をリクエストします。
- Webサービスの情報・ユーザーの情報・チャレンジ(ランダムな文字列)を送信し、認証用のデータを要求します。
- ブラウザが本人確認を促すポップアップを表示し、確認が取れた後に認証器を呼び出してWebサービスから送られてきたデータを渡します。
- 認証器がユーザーの本人確認を行い、秘密鍵・公開鍵・証明書を作成します。証明書は鍵の正当性や有効性を示すパラメータです。
- 認証器が秘密鍵をローカルに保存し、ブラウザに公開鍵・証明書を送信します。
- ブラウザが受け取った公開鍵・証明書などのデータをWebサーバに送信します。
- サーバが受け取ったデータを検証します。証明書が有効か否かを確認し、DBに公開鍵を保存します。
- サーバが登録を完了したことを知らせるレスポンスを返します。
認証
登録時に作成した鍵で認証を行います。
認証の流れを下図に示します。
- ブラウザ上でWebサービスにアクセスし、認証をリクエストします。
- Webサービスにユーザーが登録されていることを確認し、チャレンジを含むレスポンスを返します。
- ブラウザが本人確認を促すポップアップを表示し、確認が取れた後に認証器を呼び出してWebサービスから送られてきたデータを渡します。
- 認証器がユーザーの本人確認を行い、秘密鍵でチャレンジに署名します。
- 認証器がブラウザに署名済チャレンジを送信します。
- ブラウザが受け取った署名済チャレンジなどのデータをWebサーバに送信します。
- サーバが署名済チャレンジをDBに保存してある公開鍵で検証します。
- 検証で成功すれば、認証が完了したことを知らせるレスポンスを返します。
FIDO2・WebAuthnを使う利点と欠点
FIDO2・WebAuthnにはID・パスワード認証と比較していくつかの利点・欠点があります。
利点
サービス提供者とサービス利用者双方に利点があります。
- 生体情報などの認証情報がネットワーク上を流れない
生体情報などの認証情報はユーザーのローカル環境で扱われ、一切ネットワーク上に流れ出ることがありません。 -
サービス提供者側の情報漏洩により認証情報が漏洩することがない
サービス提供者側が認証で使う公開鍵が漏洩したとしても、その性質上、認証情報が漏洩したことにはなりません。 -
パスワードを覚えておく必要が無い
パスワードを忘れてしまうこともないし、何かに書き留めておく必要がなくなります。 -
異なるサービスでも同じ方法で認証できる
ユーザーは利用するサービスが異なっても、同一の認証だけで済みます。
認証器はサービス毎にキーペアを作成・保存し、自動で使い分けてくれます。
欠点
しかし、欠点もあります。
- 普及率がまだ低い
LINE、Yahoo!Japan、ソフト技研、NRIセキュアなど先駆的な企業が実装している例がありますが、まだまだ使用例が少ないです。 -
開発コストが見通しにくい
FIDO2は新しい技術なので、開発する人材の確保や設備を導入するコストが見通しにくいです。
実際のサービス
日本では、Yahoo!JapanやLINE等がFIDOを実装しており、FIDO2とID・パスワード方式の両方を使ってサービスを提供しています。
特にYahoo!JapanではAndroid端末でGoogleChromeを使った場合という限定的なものではありますが、実現できています。
また、WebAuthnをWebAuthn.ioというデモサイトがあります。
興味のある人は試してみてください!
FIDOのサポートは確実に拡大しています。
FIDOがサポートされているプラットフォーム・ブラウザを下図に示します。
※FIDO Allianceより引用
今後、対応する環境は増えていくでしょう。
外部の認証器について
FIDO2準拠の外部認証器について調査しました。
スマートフォンについている指紋認証や顔認証を使ったことがある人は多いと思いますが、日ごろからセキュリティを意識して外部の認証器を持ち歩く人はあまりいないと思います。(私は持ってる人に会ったことないです)
セキュリティを意識してFIDO U2F準拠のUSBトークンや指紋認証キーを持つことはあり(?)ますが、FIDO2準拠の外部認証器は多く出回っていません。
BioPass FIDO Security Keyや、AllinPass FIDO2という製品が出ています。下図に示します。
※FEITIAN Technologiesより引用
BioPass FIDO Security KeyはUSB-A、USB-Cの2タイプがあります。
\$ 60.00 USDで購入可能です。
AllinPass FIDO2は1つでUSB-C、NFC、BLEに対応しています。
\$ 130.00 USDで購入可能です。
また、Yubico社がYubikey Bioを開発中で、2020年の年内にはリリースされる予定です。下図に示します。
※Yubicoより引用
個人で外部認証器を購入してFIDO2認証を実践できそうです(個人的には、値段が高いと思いますが)。
しかし、FIDO2対応サービス少ないので出番はあまりなさそうです。
まとめ
WebAuthnはWebサービスのログインを高速かつ安全に行うことができ、パスワードの管理から人々を開放してくれる仕組みです。
W3Cに勧告され、世界の主要なITベンダーがこの技術をサポートしていて、徐々に使っている企業も増えてきています。
今後この認証方法がスタンダードなものになっていくと考えられます。
注意点として、アカウントリカバリーを行う際には単一の認証方式では詰んでしまう状態があり得るので、Webサービスに最適な実装をしていく必要があります。
世界では未だID・パスワードを使った認証が主流で、FIDOの仕組みを理解して使っている人は多くありません。
自分自身も、SMSを使った2要素認証やパスワードがメインです。
WebAuthnはパスワードが必要だという固定概念を打ち破るような素晴らしい技術であると思います。
情報技術の発展が著しい現代で、ほとんどの人が無数のオンラインサービスを利用し、複数のアカウントを持っています。
認証器付のデバイスや外部認証器が普及し、パスワードを気にすることがなくなれば、消費者の購買・視聴・契約などの機会を増やすことにつながります。
Webで生体認証を使った認証を可能にするWebAuthnはまだ新しい技術で認知度も低いです。
今後リカバリー方法や運用方法の例が数多く出てきた段階で、自分たちのサービスに組み込むほうが得策かもしれません。
引用・参考文献
[1]W3C. (26 November 2019). Web Authentication: An API for accessing Public Key Credentials Level 2. Retrieved June 10 2020.
[2]Mercari Engineering Blog. (6 June 2019). WebAuthnことはじめ. Retrieved June 10 2020.
[3]DUO. (none). WebAuthn.io. Retrieved June 10 2020.
[4]FIDO Alliance. (none). FIDO2:Web Authentication(WebAuthn). Retrieved June 10 2020
[5]FEITIAN Technologies Co., Ltd. (none). Retrieved June 25 2020