5分で理解するWebAuthn@2019


2019年はWebAuthnへの対応が随分進みました。
しかしながら、WebAuthnの情報は先駆者が走ったあと、後進へのバトンが綺麗に途切れています。
初学者向けに「今から調べるんだけど何から調べたらいいの?」「使えるのか?使えないのか?導入って大変なの?」といった丁度いいサイズの情報をまとめました。

WebAuthnとは何か?

  • 2018/4/10 W3C勧告候補
  • 2019/3/04 W3C正式勧告

今年になり、W3Cで正式勧告しまして、Win/Mac/Android/iOSといったOSの主要ブラウザで採用が進んでいます。
WebAuthnはパスワードレス認証(UAF)と、2要素認証(U2F)の2通りの方式があり、これまでのパスワードだけの認証から、公開鍵暗号を用いた認証にすることで堅牢な認証を実現します。
詳しくはFIDOの仕組みを参照ください。

WebAuthnを導入する

現在は、クラウドの認証基盤ではWebAuthnの導入が進んでいます。
今後は自社認証サーバーへの導入が進んでいくと思われます。

ここでは図の赤字の自社認証サーバーに焦点を当てて書きます。

WebAuthn対応状況

主要ブラウザやOS(Win/Mac/Android)はほぼ対応しています。
ただiOSの対応は不十分な状況です。

MacのSafariではTouch IDや、Yubicoのデバイスに対応していますが、
iOS13.3ではYubicoのデバイスのみが対応している状況です。(2019年12月現在)

今後Appleで対応が進むか、主要ブラウザで独自実装が待たれます。

どのようにして導入するか?

自社認証サーバーにはどうやって組み込めばよいでしょうか?

Web Authentication: An API for accessing Public Key Credentials Level 1 に実装に必要なAPIの情報が書かれています。
ぱっと見ても実装や学習コストが高いことが肌感で解ると思います。

そこで、現在オープンソースで、.Net/Java/Goの準拠したコードが公開しています。
herrjemand/awesome-webauthnを見ますと認定済み(CERTIFIED)と準拠(COMPLIANT)が見受けれます。

準拠しているかは、遵守の自己評価テストのテストツール(FIDO Conformance Tool)を用いて評価したようです。
※ テストツールは登録制になります。

これまでは自力でWebAuthn APIに対応が必要でしたが、準拠したコードがあるのは非常に助かります。
導入には、コードの必要な箇所を修正し、マイクロサービスとして実装するか、バインディングやシステムコールで実装することが考えれます。
また、最近になりRubyのコードcedarcode/webauthn-rubyも準拠したそうです。

動作検証

先程のテストツールで準拠の確認や、相互運用性テストで認定済みになるのが筋道です。
ただし、定期的に動作しているか確認するにはCIツールを利用してのテストを考えておく必要があります。

おわりに

ここまでで、それなりに導入の敷居が高いことが解りました。
クラウド大手で導入が進むのも納得です。
テストツール(FIDO Conformance Tool)についても登録制であったり、導入が簡単になるようなエコシステムの発展が待たれます。
結論としては、対応しているクラウドのSSOを使うのが最も簡単となりますが、冒頭の導入にあった自社認証サーバーを持つシステムはそれなりに存在しますので、安全なWebを実現する為にもぜひ導入に踏み切ってもらえればと思います。