FIDOの仕組み
FIDOのプロトコルでは、標準的な公開鍵暗号方式を用いて堅牢な認証を実現しています。オンラインサービスへの登録時に、ユーザーのクライアントデバイスは新しい鍵のペアを生成します。秘密鍵はクライアントデバイスに保持され、公開鍵がオンラインサービスに登録されます。クライアントデバイスがチャレンジに署名することにより、秘密鍵を保持していることをオンラインサービスに証明すると、認証が完了します。クライアントデバイスに保持された秘密鍵は、ユーザーがデバイス上でロック解除を行うことで始めて使用することができます。ロック解除には、指紋の読み取り、暗証番号の入力、マイクに対する発話、2段階認証デバイスの挿入、ボタンの押下など、ユーザーにとって使いやすく安全なアクションを採用することができます。
-- FIDO Allianceより
TouchID(Secure Enclave Processor)はFIDOに参加していないため、互換性がないため、TouchIDあり(Touchbarあり)のMacbookでもFIDO U2Fには対応できていません。
SOFT U2Fを使う
Githubが、FIDO U2Fのソフトウェアトークンを作っています。OSX Keychainを使ってデバイスをエミュレートしたものになるので、mac以外で利用することはできません。
これによって、FIDO U2Fのデバイスを持っていなくても、FIDO U2F
インストール
brew cask install softu2f
デフォルト
デフォルトでは、FIDO端末を使わずに必要に応じて、キーが生成され、それを認証時に使用するという流れになります。
TouchIDをつかう
SoftU2Fには、TouchID(Secure Enclave Processor)の指紋認証を間借りするオプションが用意されています。
これによって、FIDOデバイスを使っているときと同等な状態にする事ができます
READMEには記載されていないようです: https://github.com/github/SoftU2F/pull/29
使用前に下記を実行してください
/Applications/SoftU2F.app/Contents/MacOS/SoftU2F --enable-sep
実際にやってみる
デフォルト
- yubicoのテストページにアクセスします




TouchIDを使う
- yubicoのテストページにアクセスします




ハードトークンとソフトトークンどちらを使うべき?
softU2Fの使用上の注意
ブラウザのエクステンションとして動くため、ブラウザでは正常に動作しますが、ローカルのアプリケーションでFIDO U2F認証を求められた場合は正常に動かない場合があります。
ハードトークン
使用時にUSBに挿さなければいけない。管理が面倒などの問題がありますが、物理的にも認証に使う端末が2要素に分かれるので、セキュリティが重視されるケースではハードトークンを利用するのがいいと思います。
ソフトトークン
利用時に別途何かをしなければいけないわけではなく、1デバイスのみ管理すればいいので、利便性を求めた場合は、ソフトトークンを使うといいかと思います。ただし、デバイスの盗難にあった場合に乗っ取られるという危険性はハードトークンよりは上がると思います。