はじめに
お仕事でWebAuthnについて調査する機会があり、1からちゃんと理解したい。
そもそもパスワードはリスクが高い。
パスワードによるID認証では、IDと対になるパスワードをユーザーに入力させ、送信することで受け取ったサーバーがあらかじめ登録されたものと一致するかを判定して、認証の可否を行います。
リスクとしては、簡単なパスワードの使用による第三者からの推測や、偽サイトへの入力・送信などがあり、パスワードを守ることが難しくなっているからです。
WebAuthn(正式名称:Web Authentication API)はより安全な認証を可能にしてくれます。
WebAuthn
概要
WebAuthnとは、パスワードレス認証を実現するための仕組みです。
WebAuthnは、パスワードよりも格段に安全な認証方式として注目されており、その安全性の根幹には、公開鍵暗号方式の採用があります。
登録と認証
登録
⓪ ユーザーが登録をリクエストします。
① サーバーがチャレンジ・ユーザー情報などをJavaScriptアプリケーションに送信します。
② ブラウザがリクエストを認証器に送信します。
③ 認証器はユーザー確認を行い、新しい鍵ペアを生成する。
④ 認証器がブラウザに新しい公開鍵や認証データを返します。
⑤ ブラウザが最終的に送信するデータを作成し、JavaScriptアプリケーションがその返り値をサーバーに送信します。
⑥ サーバーが認証情報を公開鍵を使って検証して、情報が正しければ登録成功となります。
チャレンジとは、署名の正当性を検証するためのランダムな文字列のことで、⑥でチャレンジが送信時と同じものであるかを確認します。
認証
⓪ ユーザーが認証をリクエストします。
① サーバーが登録済みチェックを行なって、アプリケーションにチャレンジを送信する。
送信するプロトコルに指定はなく、安全なプロトコルでさえあれば良い。
② ブラウザが認証器を呼び出します。
③ 認証器がユーザ確認を行い、Assertionを作成します。
Assertionとは、認証器が署名した、チャレンジやRelyingPartyが含まれた情報のことです。
④ 認証器が認証情報をブラウザに返します。
⑤ アプリケーションが認証器から受信した認証情報を含めたリクエストを生成して、サーバーに送信する。
⑥ サーバーは認証情報を公開鍵を使って検証して、情報が正しければ認証が成功します。
おわりに
概要レベルですが少しはWebAuthnのことについて知ることができたのではないかと思います。これから少しずつ理解を目指したいと思います。
参考