RFC6238によるOne Time Passwordの生成について

先日の記事でMerakiDashboardのログイン時において二段階認証が必須となったことをまとめました。

candm-network.hatenadiary.jp

 

これはRFC6238 Time Based One Time Password(OTP)の仕組みを利用しています。
本日はこのRFC6238について簡単にまとめておこうと思います。

 

RFC6238によってOTPが生成される仕組み

RFC6238はサーバ側で生成された秘密鍵と現在時刻から30秒毎(Default設定)にOTPを生成する仕組みとなります。
サーバで生成された秘密鍵を共有することによって、その秘密鍵と現在時刻から6桁の一次的なPasswordを生成します。
サーバとクライアント(クライアントPC or スマホ)の時刻が正常に設定されていれば、同一のPasswordの生成が可能となるという至ってシンプルな仕組みとなっています。
この現在時刻を元にした仕組みのためTime Based OTPと呼ばれています。

 

Meraki Dashboardを例としたRFC6238の実装

複雑な話は置いておいてMerakiでの実装を例としてその動作についてまとめたいと思います。

Appの準備

1. Meraki Dashboard内で秘密鍵が自動生成され、その秘密鍵QRコード化します。
2. Meraki管理者はRFC6238に対応したApp(Google Authenticagor etc)を使って1.のQRコードを読み込みます。

ログイン時

3. App内で30秒毎に秘密鍵と現在時刻から6桁のOTPを生成
4. Meraki Dashboardログイン画面に3.で生成されたOTPを入力
5. Meraki Dashboard内で生成されたOTPと管理者が入力したOTPが一致することが確認されるとログイン完了

まとめ

図にまとめてみるととてもシンプルでかつ確実な仕組みであることが分かると思います。
この仕組みの良いところは公開鍵と現在時刻のみを使ったものとなりますので、必ずしもOTPを生成するデバイスはInternetに接続されていないオフラインの状態でも問題が無いというところです。
一昔前では(特にクライアントで)正しい時刻が設定されていない場合もありましたが、スマホの利用を前提とした場合、携帯の電波を介して常に正しい時刻が供給されているのでこれが問題になることはほぼ無い状況だと思います。
私の先の投稿ではGoogle Authenticatorを例としましたが、RFC6238に対応したAppはDuo Security等他にも存在します。
すでに企業用で多要素認証を導入されている場合はそれらのAppがRFC6238に対応しているかを確認してみてはいかがでしょうか?