自由研究

FIDOについてなるべく平易にまとめてみる

投稿日:

この記事は情報系の学生ぐらいの知識を想定しています。なるべく平易に書きますが、わからないことがあったら自分で調べながら読んでください。

話の枕

こないだ、Pixel 3aというGoogle製のスマホを買った。すると5,000円のGoogleストアのクーポンが付いてきた。GoogleストアというのはAndroidのPlayストアとは別モノで、ソシャゲーの課金とかには使えない。こいつぁ買うモンねぇな、と思ってしばらく放置したら、いつの間にかTitan セキュリティ キー バンドルなるものがラインナップに増えていて、6,000円といい感じの価格だったので、せっかくなので買うことにした。
このTitan セキュリティ キーというのは、FIDO対応のセキュリティトークンなのだけど、実はFIDOについて詳しく調べたことがなかったので調べてまとめることにした。

強固な認証の必要性

近年、「二段階認証」という言葉が流行っている。二段階認証というのは、ごくザックリ言うと、パスワードだけじゃ危険だから、もう一つ別の認証を加えて安全にしようという考え方のこと。
で、なぜパスワードだけじゃ危険かというと、これもザックリ言うと、パスワードが漏洩したら、地球の裏側の人でもあなたに成りすますことができるから。最近の7payの不正利用事件が良い例で、自分の住んでいるところとは全く違うセブンイレブンで大量の不正購入が行われた。

パスワードが漏れても大丈夫なようにしよう、ということで強固な認証が求められるようになってきて、二段階認証を採用したシステムもたくさんでてきた。
そこで乱立しはじめた認証について標準規格を作ろう、っていうことで出来たのがFIDO、らしい。

3つのFIDO

FIDOは今のところ3つの規格がある。

  • FIDO UAF (Universal Authentication Framework)
  • FIDO U2F (Universal 2nd Factor)
  • FIDO 2.0

このうちFIDO 2.0はUAFとU2Fを組み合わせた上でWebAPIにしたようなモノ、らしい。
そして、今回買った「Titan セキュリティ キー」は、FIDO U2Fに対応した機器である。逆に言えばUAFには対応していない。

というわけで今回はFIDO U2Fを中心に説明する。

FIDO U2F

Titan セキュリティ キーを例に

で、今回買った「Titan セキュリティ キー」というのは、Googleストアで以下のように説明されている。

Titan セキュリティ キーをパスワードと組み合わせて2 段階認証を構築することで、フィッシングを防止し、オンライン アカウントへの不正アクセスを防ぎます。

さすがGoogle、的確かつシンプル、誤解なく説明がまとまってる。
FIDO U2Fとはつまり、

  • パスワードと組み合わせる
  • 2段階認証を構築する
  • フィッシング詐欺を防止する
  • 不正アクセスを防げる

というものである。

パスワードだけだとどうなるか

FIDO U2Fが何を防ぐかを示すために、FIDO U2Fが無い場合にどうなるかを考えてみる。

たとえばあなたがあるECサイトにアカウントを持っているとする。
このサイトは、ユーザー名とパスワードだけでログインできる。

ある日あなたのメールアドレスに、「アカウントを確認してください」というメールが届く。
メールにあるリンクをクリックすると、見慣れたログイン画面が開かれる。
あなたは特に疑いもせずにユーザー名とパスワードを入力する。
これがフィッシング詐欺だ
実はアカウント確認メールはネット犯罪者の送信したメールで、ログイン画面も真っ赤なニセモノだ。
こうして犯罪者は、ユーザー名とパスワードを盗み出す。

犯罪者は世界中のあらゆるメールアドレスに対してこのようなフィッシング詐欺メールを大量に送信していて、ユーザー名とパスワードを盗み出している。
もしくは、他のいろいろなWebサービスにハッキングして、大量のユーザー名とパスワードのリストを手に入れることもある。ほとんどのユーザーはパスワードを使い回すので、別のWebサービスにも高確率でログインできる、というわけである。

犯罪者はユーザー名とパスワードがあればいくらでもログインできる。
あなたのアカウントで、好きなものを購入できてしまう。

かんたんな図にまとめておこう。

そこで、パスワードだけではログインできないように、FIDO U2Fの出番である。

FIDO U2Fはどのようにユーザーを守るか

さてFIDO U2Fは、物理的なトークンである。完全にそうだと決まったわけではないようだが、まぁ、Titanセキュリティキーは物理的なトークンである。
Titanセキュリティキーの場合はこんな形をしている。ちなみにGoogleストアの写真をパクってきた。なお、指紋認証センサーは無い。もう一度いうが、Titanセキュリティキーは指紋認証ではない

物理的なトークンの何が良いか、というと、ネット越しに盗めないことだ。
FIDO U2Fを使う場合、ユーザーはログイン時にパスワードと一緒に「トークンを持っている」という情報を送信する。
物理的に窃盗を働かない限り、トークンが盗まれることはない。パスワードだけ盗んでもログインできないので、フィッシング詐欺に強い、というわけだ。

しかし待ってほしい。Titanセキュリティキーがいくら物理的なモノだからといって、結局はインターネットで通信して認証する。「Titanセキュリティキーのデータ」が盗聴されたらオシマイなのではないか。
そこで、FIDO U2Fは「公開鍵暗号方式」と「チャレンジレスポンス認証」を採用している。
これらの技術の詳細は省くが、ログイン時に送信する「トークンを持っているという情報」のデータが毎回変わる仕組みである。
そのため、たとえ通信が盗聴されていたとしても、同じデータを使ってもログインできないわけだ。

この、「トークンを使った認証方式」や、「トークンそのものの安全性」について規格を定めているのがFIDO U2Fであり、FIDO U2Fに対応した機器・Webサービスであれば同じように使うことができる、というのがFIDOの利点だ。

2段階認証 / 2要素認証

さてFIDO U2FはUniversal 2nd Factorの略であり、直訳すれば「2要素」となるだろう。
一方でGoogleはTitanセキュリティキーを「2段階認証」の機器としている。
ここで「2段階」とは、2つの手間が必要だ、という意味で、「2要素」とは、2つの要素を使う、という意味だ。
少し意味が違うので説明しておこう。

そもそも認証における専門用語として、「認証の3要素」という言葉がある。
この3要素とは、「知識情報(Something You Know)」「所持情報(Something You Have)」「生体情報(Something You Are)」の3つを指す。
知識情報とはすなわちパスワードなどのことで、生体情報とは指紋や静脈、顔認証などのことだ。
そして所持情報というのが、今回出てきたTitanセキュリティキーのような、「モノを持っている」という情報である。

「2要素認証」というのは、認証の3要素のうち2種類を組み合わせて認証するよ、という認証方式のことである。
逆に言えば「2段階認証」には「認証の3要素を組み合わせろ」という意味合いはないので、集合として「2要素認証⊂2段階認証」の大小関係がある。

通常、「パスワード(知識情報)+トークン(所持情報)」で2要素認証を組むのが普通であるが、Googleは少し集合を小さく取って2段階認証という言い方をしたのだろう。

一般的な2段階認証について

せっかくなので一般的に用いられる2段階認証を説明しておこう。
通常、2段階認証を採用したWebサービスは、登録時に、ケータイの電話番号が求められる。
そして、ケータイのSMSに認証コードが届き、認証コードを入力することで登録が完了する。
これは、「ケータイそのもの」を所持情報として利用した2段階認証である。
実際にはケータイのシリアルNoなどが所持情報として保存されており、ログイン時に送信されている(はずだ)。
仮に新規デバイスからのログインがあった場合、登録したケータイに本人確認の連絡が飛び、「このデバイスを信用するか」という選択を行う(はずだ)。
世間的にこのパターンが浸透しすぎたため、「2段階認証?あのSMSにコードが届くやつね?」という認識になってしまっているが、実際にはケータイを所持情報として利用した認証方式であることは理解しておきたい。

FIDO UAF

以上がFIDO U2Fについての説明になるが、FIDO UAFについても触れておこう。

FIDO U2Fは所持情報を利用した認証方式であるため、単体では本人確認として不適切である。
物理的な窃盗を受けた場合、ごく簡単に不正な認証ができてしまう。そのため、パスワードと組み合わせる必要がある。

FIDO UAFはパスワードと組み合わせることなく使える認証方式である。主に指紋による生体認証を行う。
FIDO UAFの特徴は、「生体認証をデバイス内で完結させ、Webサービス側には認証の成否のみを通信する」という点である。
これもパスワードと同じく、指紋データそのものを通信に乗せると盗聴の危険があるためだ。
FIDO規格に対応した機器はFIDO Allianceに登録される。これにより「生体情報+所持情報」の2要素認証になっている(と思う)。さらに不正な機器を使用した指紋の偽装やハッキングなどからも守られている。
また、Webサービス毎に指紋を登録する必要もないため、万が一Webサービスの運営会社がユーザ情報が流出したとしても、ユーザの指紋情報は流出せず、他のWebサービスへの不正アクセスの心配もない。

結言

以上がFIDOについて大雑把に調べた内容である。
アイデアや方式は非常に強力で、不正アクセスへの耐性は極めて強いと思われる。

現時点では対応するWebサービスは多くないが、7payの事件のおかげで世間的に認証への感心も強まっており、FIDO普及の追い風になっている。銀行やECサイトでの対応が進めば一般に浸透する日も近いだろう。

一方で、FIDO U2Fは所持情報を基本とした認証方式のため、トークンそのものに対して「厳重に保管しつつ常時持ち歩く」という難しい運用が求められる。
しかもトークンはクレジットカードサイズでもなく、丈夫な金属製というわけでもない。ネット上では、「鍵束に付けていたらこすり傷がついちゃった」などのレビューもあり、取り扱いはすこし難しそうだ。
FIDO規格をパソコンやスマートフォンに組み込んだ例もあり、専用のハードウェアを購入して取り扱うよりも、スマホの1アプリとして利用するスタイルが普及するのかもしれない。

-自由研究

執筆者:


comment

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

関連記事

no image

例え話をしないC言語のポインタの説明

もくじ1 まえおき2 Hello, Worldより簡単に2.1 サンプルコード2.2 変数の置き場所2.3 変数が入っているところを見てみる3 C言語とメモリ3.1 変数cの「まわり」を見てみる3.2 …

まんがタイムきらら展のイラストボード一覧

まんがタイムきらら展面白かったですね! みなさんはイラストボード見ましたか? 撮影可だったので全部写真に撮りました!どうぞ!!!! 展示での配置は公式のツイートをご参照下さい。 せっかくですので、スペ …

【Unity】GPUを使ってパンツを隠すスクリプトができた

かわいいスカートを履きたい!でもパンチラしたくない! それは誰もが抱く夢です。もちろん、3Dモデルだってパンチラしたくないと思っているハズです。 というわけで偉大なる先人がいます。 Unityでパンツ …

no image

UnityのCompute Shaderに線分と三角形の衝突判定をさせる

はじめてCompute Shader使ってみた。でもあまり性能は出ないのでただの失敗の記録です。 まず元のアルゴリズムはコレ。 線分と三角形の当たり判定 – 富士見研究所 で、これをまず三角形の表裏問 …

no image

NHKを従量課金にすると1時間いくらになるの?

もくじ1 はじめに2 前提条件3 試算に使うデータを集める3.1 NHKの収入3.2 世帯数3.3 NHKの視聴率4 実際に試算する4.1 各世帯の年間視聴時間4.2 全世帯の年間視聴時間4.3 受信 …