Dengan meningkatnya jumlah ancaman keamanan siber, menjadi semakin penting bagi pengembang untuk memperbarui standar keamanan aplikasi web sambil memastikan bahwa akun pengguna aman. Untuk tujuan ini, banyak aplikasi online sekarang meminta pengguna untuk menambahkan lapisan keamanan ekstra ke akun mereka. Mereka melakukan ini dengan mengaktifkan otentikasi dua faktor. Ada berbagai metode untuk menerapkan otentikasi dua faktor, dan otentikasi TOTP (Time Based One Time Password) adalah salah satunya.
Untuk memahami apa itu TOTP dan bagaimana penggunaannya, pertama-tama perlu meninjau secara singkat konsep yang lebih mendasar. Yang pertama adalah otentikasi dua faktor. Otentikasi dua faktor (atau otentikasi multi-faktor) adalah metode untuk mengidentifikasi pengguna dalam layanan (biasanya di Internet) dengan meminta dua jenis data otentikasi, yang menyediakan dua lapisan, yang berarti perlindungan akun yang lebih efektif dari entri yang tidak sah. Ini berarti bahwa setelah mengaktifkan otentikasi dua faktor, pengguna harus melalui satu langkah lagi untuk berhasil masuk. Langkah standar untuk masuk ke akun adalah memasukkan nama pengguna dan memasukkan kata sandi (Gambar 1).
Mengaktifkan otentikasi dua faktor menambahkan langkah ekstra ke urutan login (Gambar 2). Metode ini lebih aman karena penyerang tidak bisa mendapatkan akses ke akun pengguna jika dia tidak memiliki akses ke kata sandi biasa dan kata sandi sekali pakai.
Saat ini ada dua metode yang banyak digunakan untuk mendapatkan kata sandi satu kali:
Berdasarkan SMS . Setiap kali pengguna masuk, dia menerima pesan teks ke nomor ponsel yang ditentukan di akun, yang berisi kata sandi satu kali.
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, , .
Otentikasi dua faktor semakin populer. Banyak aplikasi web menerapkannya untuk keamanan tambahan. Berbeda dengan metode berbasis SMS, metode TOTP juga membutuhkan sedikit usaha. Jadi fitur ini layak diterapkan untuk aplikasi apa pun.