AWSのルートアカウントのMFA(多要素認証)を有効化しました。
MFAにはTOTPという仕組みが使われているようですが、この仕組みがよくわからず初めてサインインする時に戸惑ってしまったので調べてみました。
※認証素人が調べた結果ですので誤りがあるかもしれません。ご指摘頂けると嬉しいです。
##MFA有効化の流れ
①AWSコンソールからMFAを有効化するためにブラウザ上にQRコードを表示
②スマホでGoogle Authenticatorアプリをインストールして①のQRコードを読み取る
③アプリ上に6桁の数字が表示されるのでこの数字を[MFAコード1]に入力。30秒経過すると数字が切り替わるので切り替わった後の数字を[MFAコード2]に入力
④今後AWSにサインインする時はMFAコードの入力を求められるのでスマホでGoogle Authenticatorを起動し表示されている数字を入力してサインインする
※アプリの名称ですがiOSではGoogle Authenticator、AndroidではGoogle 認証システムとになっています
##ざっくり仕組み
AWSでMFA設定をするときにQRコードを表示しますが、この時に秘密鍵が生成されています。これをGoogle Authenticatorで読み取るとサーバーとクライアントに秘密鍵が保存されます。
QRコードを読み取るとアプリ上では6桁の数字が表示されます。この数字はワンタイムパスワードとなっており30秒ごとに違う数字に切り替わります。
この数字を生成しているアルゴリズムがTOTP(Time-Based One-Time Password Algorithm)です。
TOTPとは
ある時刻においてカウンターがサーバーとクライアントで等しければ、サーバーとクライアントで秘密鍵を共有しているため同じ確認コードが計算されるはずであるから、サーバーとクライアントで確認コードの計算結果が一致するかどうかで認証ができるとするのが TOTP アルゴリズムである。
※『Google 認証システムの仕組み』より引用
30秒毎に数字が切り替わっているのにこの数字を入力するとAWSにサインインできるのが不思議でした。しかしTOTPの仕組みがわかってみると納得することができました。
セキュリティ強化のため多要素認証や二段階認証が注目されているのでざっくりでも仕組みを理解できるといつか役に立ちそうです。
####参考にさせて頂いた記事
https://sekika.github.io/2016/03/26/GoogleAuthenticator/
https://dev.classmethod.jp/etc/totp-implementation-pure-python/