FIDO とは
「FIDO(ファイド)」とは「Fast IDentity Online」の略称で、非営利団体の「FIDO Alliance」がパスワードに依存しない新しいオンライン認証技術の標準化を目指して策定および普及している認証技術です。FIDOは手軽に認証できる利便性、公開鍵暗号とチャレンジレスポンスを組み合わせた強力な認証による安全性を提供しています。また、秘密情報が外部に漏れ出ない設計になっており、フィッシングや中間者攻撃、サーバーアタックなどの攻撃耐性を兼ね備えています。
弊社はFIDO Allianceのスポンサーメンバーとして、
パスワードに依存しない世界を目指し活動しております。
従来のパスワード認証とFIDO認証の大きな違いは以下です。
パスワード認証
-
秘密情報を入力しなければならない。(盗難リスク)
-
パスワードなどの秘密情報をサーバー側に送信している。(盗聴リスク)
-
サーバー側に秘密情報を保存する。(漏洩リスク)
※他にも様々なリスクがありますが、ここでは割愛します。
FIDO認証
-
秘密情報を入力しない。
-
秘密情報は手元の認証器の内部に保持され、秘密情報が漏れ出ない。
-
サーバー側に秘密情報が保存されない。
※認証時に使用する生体情報やPINがサーバー側に送られることはありません。
FIDOの仕組み
FIDOでは、公開鍵暗号の「署名」とチャレンジレスポンスを組み合わせて認証を行います。まずは、FIDOで使用される公開鍵暗号について説明します。
※FIDOには複数の規格がありますが、本ページではFIDOの最新仕様である「FIDO2」として説明します。
FIDOで使用される公開鍵暗号
FIDOでは公開鍵暗号の「署名」という技術を使用しています。この技術について簡単に説明します。
この署名では、「署名鍵」と「検証鍵」のペアを作成し、その鍵を使用します。
この2つの鍵は下記の役割を持っており、2つ揃わないと機能しません。
署名鍵: 署名する鍵 (公開すべきでない鍵、秘密鍵とも呼ばれる。)
検証鍵: 署名を検証する鍵 (公開して問題のない鍵、公開鍵とも呼ばれる。)
※現段階で、この鍵の生成方法を知っておく必要はありません。このような鍵があるんだな程度の認識で問題ないです。
公開鍵暗号の「署名」に着目し、イメージ図を用いて説明します。
アリスは「署名鍵」と「検証鍵」のペアを準備します。「署名鍵」は秘密にしておくべき鍵なのでアリスが持っておきます。「検証鍵」はボブに渡しておきます。アリスは「署名鍵」を使いメッセージに署名し、ボブに渡します。ボブは署名付きメッセージを受け取り、「検証鍵」を使用して検証します。
署名の検証に成功する場合、ボブは次のことが言えます。
-
メッセージは改ざんされていない。
メッセージに改ざんがあった場合は、検証がうまくいきません。 -
この署名は、検証鍵と対になる署名鍵で生成されたもの。
ボブはアリスから「検証鍵」を受け取っていました。その対となる「署名鍵」はアリスだけの秘密の鍵なので、署名した人がアリスだということが分かります。この仕組みを利用しているのがFIDOです。
FIDO認証の概要
FIDO認証を簡単に説明すると、ログイン要求時にサーバー側から送られてくるチャレンジ(ランダム文字列)に対して、認証器の内部にある署名鍵(秘密鍵)で署名し、サーバー側にある「検証鍵(公開鍵)」で署名の検証を行うことで認証を行います。
FIDO認証では、「FIDOで使用される公開鍵暗号」の説明時に登場しなかった、「認証器」というものが新たに登場しました。FIDOに対応した認証器はPC端末やスマートフォン、セキュリティキーなど様々なものがありますが、どの認証器も内部の秘密情報が外に漏れ出ない設計になっています。FIDOはこの認証器を使用して認証を行っています。(詳しいことは後ほど説明)
前述の通り、FIDOは公開鍵暗号の署名とチャレンジレスポンスの組み合わせで認証を行っています。署名の検証を行うには、「検証鍵(公開鍵)」を事前に相手側(サーバー)に渡しておかなくてはなりません。つまり、FIDO認証を行うには、FIDOによる「登録」と「認証」の2ステップが必要になります。
FIDOの登録について
FIDOでの認証を利用するには、事前に「検証鍵(公開鍵)」の登録が必要になります。イメージ図を用いて登録による手続きを説明します。
ユーザーは利用するサービスに対して登録要求をかけます。サービス(サーバー)側は「チャレンジ(ランダム文字列)」を作成し、チャレンジに署名を付けて送り返すように要求します。ユーザーの認証器(この例ではセキュリティキー)はこの要求を受けて、ユーザーの認証器であることをPINや生体認証を行い確認します。所有者の確認ができれば、「署名鍵(秘密鍵)」と「検証鍵(公開鍵)」のペアを作成します。作成した「署名鍵」を使用してチャレンジに署名し、「検証鍵」とセットでサービスに送信します。サービス側は受け取った「検証鍵」を使用して、署名が正しいことを検証します。検証が成功すれば、サービスへ「検証鍵」を登録します。
FIDOの認証について
FIDOでの認証について、イメージ図を用いて説明します。
ユーザーは利用するサービスに対してログイン要求をかけます。サービス(サーバー)側は「チャレンジ(ランダム文字列)」を作成し、チャレンジに署名を付けて送り返すように要求します。ユーザーの認証器(この例ではセキュリティキー)はこの要求を受けて、ユーザーがこの認証器の所有者かどうかをPINまたは生体認証を行い確認します。所有者の確認ができれば、「署名鍵」を使用してチャレンジに署名してサービスに送信します。サービス側はユーザーが事前に登録していた「検証鍵」を使用して、署名が正しいことを検証します。検証が成功すれば、ログインが完了します。
FIDOは公開鍵暗号とチャレンジレスポンスにより強力な認証を提供していると言っていましたが、それに加えて、ローカルでの本人確認でも強力な認証を行っています。それは、認証器(PC端末/スマートフォン/セキュリティキーなど)の「所持」とPIN(「知識」)または「生体」による2要素認証により実現しています。
詳細については、「FIDOで利用可能な認証器について」のページで説明します。