LoginSignup
26
20

More than 3 years have passed since last update.

二段階認証を実装するまでに調べたこと

Last updated at Posted at 2019-10-01

二段階認証を実装するにあたり、自分が調べたことをまとめました。
何か間違ったことがあれば、コメントいただけると幸いです!

二段階認証?二要素認証

英語では、二段階認証を「Two-Factor-Auth」と訳しますが、日本語では「二段階認証」と「二要素認証」は明確に異なります。
二段階認証の説明をする前に、認証の3要素について説明する必要があります。

認証の三要素

私たちが普段Webサービスを利用する際に、アカウントが自分のものか、認証を行います。その代表的な手段として「メールアドレス」と「パスワード」が一般的です。ですが、一個人を特定する方法として、他にも種類があります。それらを3つに分類したものを「認証の3要素」と呼んだりします。以下のように分けられます。

ユーザが知っていること(知識情報)

ID・パスワード 秘密の質問

ユーザが持っているもの(所持情報)

電話番号 キャッシュカード ワンタイムパスワード用トークン(ハードウェア・ソフトウェア)

ユーザ自身の特徴(生体情報)

指紋認証 顔認証

結局どう違うの?

認証の3要素を用いて、一個人を特定することは変わりません。ただ、認証の回数や認証要素の数で変化します。以下が違いとなります。

二段階認証

認証回数を2回以上に分ける認証方法を表します。極端なことを言えば、
一回目:メールとパスワードで認証、二回目:メールとパスワードで認証でもOK。ただ、そんなザルな認証方法はないので、二回目の認証をSMSでの認証を行うことがよくみられる実装です。

二要素認証

認証要素を2つ以上組み合わせる認証方法を表します。例えば、ATMで現金を引出す際に、キャッシュカードと指紋認証で認証を行なった場合、二要素認証となります。

※二回目の認証をSMSで認証を行なった場合、二段階認証でありかつ二要素認証となります。

それでは、次に二段階認証でよく用いられるワンタイムパスワードについて説明します。

ワンタイムパスワード(OTP)の仕様について

ワンタイムパスワード(以下、OTP)の仕様については、独自で決めるのではなく、IETFのRFCに仕様がまとまっており、それに準拠して実装を行う。

OTPの生成方法は大きく二つある

HOTP (HMAC-Based One-Time Password)

秘密鍵と認証回数を用いて計算し、OTPを生成する。認証回数をクライアントとサーバーで保持しており、認証回数が変わることで、OTPも変更となる。つまり、OTPを使用しなければ、OTPが変わることはない。

HOTPを求めるには以下の計算式を用いる。

HOTP(K, C) = Truncate(HMAC-SHA-1(K,C))
K... 秘密鍵
C... 変動する値 =>認証回数を用いることが多い

HOTPでのデータのやりとり

TOTP_HOTP (1).png

TOTP (Time-Based One-Time Password)

認証回数と秘密鍵を用いて、HOTPを計算した。RFCでは、認証回数を時間に変更して計算したものを、TOTPと定義している。つまり、計算式は下記のように整理される。

TOTP(K, T) = HOTP(K, C) 
HOTP(K, T) = Truncate(HMAC-SHA-1(K,T))
T = (Current Unix Time - T0) / X
X...TOTPを再生成するまでの時間
T0...数え始めの時間(Unix時間を使うのが通常なので、0がデフォルト)

TOTPでのデータのやりとり

TOTP_HOTP.png

[参考]用語の整理

・HMAC(Hash-based Message Authentication Code)...ハッシュ関数を組み合わせたメッセージ認証符号の一つで、秘密鍵とメッセージ(データ)とハッシュ関数を用いてい計算する。
※組み合わせるハッシュ関数によって、HMAC-XXXと表示を分ける。

[参考]RFCとは

RFCとは、インターネット技術の標準化などを行うIETF(Internet Engineering Task Force)が発行している、技術仕様などについての文書群。
TCP/IP関連のプロトコル(通信規約)の標準仕様などが記されたもので、インターネット上で公開されており誰でも入手・閲覧することができる。

参考URL

「二要素認証」と「二段階認証」の違い
RFC6238: TOTP: Time-Based One-Time Password Algorithm
RFC4226:HOTP: An HMAC-Based One-Time Password Algorithm
TOTPを実装する
RFC6238 Time-based One-time Password Algorithm (TOTP)の仕組みのメモ
Time-based One-time Password algorithm

26
20
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
26
20