FIDO2

国際標準FIDO2 のしくみ
Verizon社の調査によると、2017年の米国の主要サイバー攻撃はほとんど従来通りで以下の表に分類されている。結論としては、サイバー攻撃の80%以上は”パスワードの漏えい”である。
更に、パスワードに代えて2要素認証を導入した場合には、サイバー攻撃の99%を防げるとの結論を得ている。パスワードなしのログインを目指すFIDO方式は重要な提案であることがわかる。実際、主だったブラウザ、SNSは2019年の時点でFIDO/WebAuthnの導入計画を発表している。

パスワードは危険

FIDO2 プロトコル

 FIDO2の経緯 
W3C(World Wide Web Consortium)は、パスワードのない新たな認証プロトコルの実現を目指すFIDO(Fast IDentity Online)協会は、Webでのユーザー認証の国際標準の設定を行っている。最新のプロトコルはFIDO2と呼ばれるもので、外部デバイスに内蔵された認証器(Authenticator)とWebブラウザとの間の方式を決めるCTAP(Client to Authenticator Protocol)と、2019年3月にブラウザとFIDO認証サーバーとの間の方式を決めるWebAuthnから構成される。後者のWebAuthnは、W3C(World Wide Web Consortium)で検討され、2019年3月に正式勧告が発表された。
 FIDO2の仕組み 
このFIDO2の仕組みを簡単に説明します。FIDO2は、指紋認証と公開鍵暗号基盤(PKI, Public Key Infrastructure)から成り立っています。指紋認証は、指紋を指紋センサーで読み取り、その特徴点などを登録してある登録データと照合して、入力指紋が登録指紋かどうかを判定する技術です。これに対して公開鍵暗号基盤は、サーバー側で作成された文書(認証毎に違う文書であるためチャレンジと呼ばれています)にデバイス側で秘密鍵を用いて電子署名させ、その電子署名を公開鍵を用いて検証して、署名がデバイス側で作成されたかどうかを判定する技術です。目的は、サーバーの本人確認ですので、指紋認証とデバイス側での電子署名が、連携している必要があります。そのため、この二つの作業はデバイス内のセキュアエレメント(SE)と呼ばれる安全領域で実行され、指紋認証が成功である場合にのみ電子署名が実行される仕組みになっています。
 FIDO2のプロトコル 
これらの原理から上図に示すように、FIDO2は実行されます。(図の番号と以下の番号は一致しています)
  1. サーバーからチャレンジがデバイスに送付
  2. デバイス内で指紋認証を実行
  3. 認証が成功な場合のみ、送付されたチャレンジにユーザーの秘密鍵を用いて電子署名
  4. 署名付きチャレンジをサーバーに送付
  5. サーバーは電子署名をユーザーの公開鍵を用いて検証。検証が成功な場合のみ、本人確認終了。
という手順になります。
チャレンジはランダムに生成された乱数ですので、認証毎に通信路を通るデータは違います。前提として(1)登録指紋がデバイス内に保存されている。(2)ユーザーの秘密鍵と公開鍵のペアはデバイス内で秘密裏に生成されて、秘密鍵はデバイス内に保存、開示してよい公開鍵はサーバー側に送付して保存すること。(3)その他ユーザー名前などもサーバー側に保存されている。これらの条件が必要です。そのため、初めて認証を開始する前に”ユーザー登録”という作業が必要になります。
 (注意点) 
1.チャレンジには、乱数の他にサーバー名やユーザーIDが含まれています。ブラウザやデバイスがそれらを確認します。
 2.Attestationは、認証サーバーがデバイスを認証する方法です。デバイスで、Attestation用の秘密鍵・公開鍵のペア、署名作成用のデータ、を元に署名を作成し、公開鍵、署名をサーバーに送付し、公開鍵を使用して署名を検証してデバイスを認証します。

 

公開鍵基盤(PKI)と電子署名

公開鍵基盤では公開鍵と秘密鍵のペアが利用されます。公開鍵は秘密鍵から生成可能ですので、秘密にしておく必要がないため公開鍵と呼ばれています。秘密鍵は公開鍵から生成できませんので、秘密に保存しておく必要があります。ログイン登録時に、デバイス内でこのペアを生成し、秘密鍵はデバイス内に保存し、公開鍵は登録時にサーバーに送付されている状況を考えてみましょう。
サーバーからデバイスに平文が送付され、デバイスは秘密鍵を利用して平文を暗号化して暗号文が作られます。この暗号文はサーバーに送付されます。サーバーは、公開鍵を利用して平文に復号できます。そのため、復号化された平文がサーバーが作成した平文と同じであれば、暗号文は秘密鍵を所有しているデバイスが暗号化したことが検証できます。
サーバーは平文としてチャレンジと呼ばれる乱数を使用します。チャレンジのダイジェスト版を使用します。ダイジェスト版の作成は、ハッシュ関数と呼ばれる決められた関数をチャレンジに施すことで一定のサイズの短い数値列に変換されます。それを秘密鍵で暗号化します。暗号化された暗号文はチャレンジの電子署名と呼ばれています。このチャレンジと電子署名をサーバーに送付して電子署名がデバイスの秘密鍵で生成されたことが検証できます。
チャレンジと電子署名を受け取ったサーバーは、同じハッシュ関数でチャレンジからそのダイジェスト版を作成できます。また、受け取った電子署名を公開鍵で復号すると、作成されたダイジェスト版と同一であることを検証できます。つまり、電子署名はデバイスの秘密鍵を利用して作成されたことが検証できます。
(注)電子証明書は使われていません。電子証明者はデバイスの公開鍵をサーバーに送付するときに、デバイスの公開鍵が確かにデバイスの秘密鍵に対応したものであることを第三者(認証局)が保証するときに第三者の電子署名をつけてデバイスの公開鍵と共に送付するものを電子証明書と呼ばれています。FIDO2では使用されていません。