サイバーセキュリティの脅威の数が増えるにつれ、開発者はユーザーアカウントの安全を確保しながら、Webアプリケーションのセキュリティ標準を更新することがますます重要になっています。この目的のために、多くのオンラインアプリケーションは、アカウントにセキュリティの層を追加するようにユーザーに求めています。これは、2要素認証を有効にすることで実現します。 2要素認証を実装するにはさまざまな方法がありますが、TOTP(Time Based One Time Password)認証もその1つです。
TOTPとは何か、およびその使用方法を理解するには、最初に、より基本的な概念を簡単に確認する必要があります。これらの最初のものは2要素認証です。2要素認証(または多要素認証)は、2つの異なるタイプの認証データを要求することにより、サービス(通常はインターネット上)のユーザーを識別する方法です。これにより、2層が提供され、不正入力に対するアカウント保護がより効果的になります。これは、2要素認証を有効にした後、ユーザーが正常にログインするには、もう1つの手順を実行する必要があることを意味します。アカウントにログインするための標準的な手順は、ログインとパスワードです(図1)。
2要素認証を有効にすると、ログイン順序に追加の手順が追加されます(図2)。この方法は、攻撃者がユーザーの通常のパスワードと1回限りのパスワードの両方にアクセスできない場合、ユーザーアカウントにアクセスできないため、より安全です。
現在、ワンタイムパスワードを取得するために広く使用されている方法は2つあります。
SMSに基づく。ユーザーがログインするたびに、アカウントで指定された携帯電話番号へのテキストメッセージが受信されます。このテキストにはワンタイムパスワードが含まれています。
TOTP. QR- , .
SMS . , . , SMS , . . NIST 2016 . SMS, TOTP - .
, , , , . :
, ,
( ), ,
, , ,
, , , . , SMS , , . . SMS , TOTP , , .
, TOTP, ( ) . , . . , , , , .
TOTP – , .
:
,
,
,
, . , . TOTP – HOTP.
HOTP « HMAC». (IETF) RFC4226. HOTP .
:
HMAC ( SHA-1)
hmacHash = HMAC-SHA-1 ( , )
20 . . , . HOTP
hmacHash[19] means 19th byte of the string.offset = hmacHash[19] & 0xf;
truncatedHash = (hmacHash[offset++] & 0x7f) << 24 | (hmacHash[offset++] & 0xff) << 16 | (hmacHash[offset++] & 0xff) << 8 | (hmacHashh[offset++] & 0xff);
finalOTP = (truncatedHash % (10 ^ numberOfDigitsRequiredInOTP));
, 4 hmacHash [19]
. hmacHash [offset]
hmacHash [offset + 3]
31 truncatedHash
. , , .
HOTP. RFA4226 , .
, . ? TOTP. TOTP « ». IETF RFC6238. TOTP HOTP . , «» «», . , HOTP OTP. , , . , , Unix, . Unix , . , , . . , Google Authenticator 30 .
counter = currentUnixTime / 30
, . : . QR-. , , . , , QR-, . , – QR- . (, Google Authenticator App, Authy ..), . . TOTP -.
When user request to enable 2-factor authentication
// Generate a secret key of length 20.secretKey = generateSecretKey (20);
// Save that secret key in database for this particular user. SaveUserSecretKey (userId, secretKey);
// convert that secret key into qr image.qrCode = convertToQrCode (secretKey);
// send the qr image as responseresponse (qrCode);
QR-. QR-, . , Unix HOTP, . QR-. , , .
User types the code displayed in the application.
// Fetch secret key from database.secretKey = getSecretKeyOfUser (userId);
if (codeTypedByUser == getHOTP (secretKey, currentUnixTime / 30)) {enableTwoFactorAuthentication (userId);}
HOTP , OTP Unix. OTP , . , , , . , , . , .
User types the code displayed in the phone application to login
// Fetch secret key from database.secretKey = getSecretKeyOfUser (userId);
if (codeTypedByUser == getHOTP (secretKey, currentUnixTime)) {signIn (userId);}
, . , , QR- . , Google Authenticator App, . , , . SMS, , .
二要素認証が人気を集めています。多くのWebアプリケーションは、セキュリティを強化するためにこれを実装しています。SMSベースの方法とは異なり、TOTP方法もほとんど労力を必要としません。したがって、この機能はどのアプリケーションにも実装する価値があります。