🔐 Chuẩn IETF & Kỹ thuật Mật mã học

Hiểu nguyên lý hoạt động TOTP: Triển khai thuật toán RFC 6238 bằng Python, JS & Go

Giải mã toàn diện các bước toán học của tiêu chuẩn RFC 6238: giải mã khóa Base32, tính bước thời gian 30s, ký băm HMAC-SHA1 và kỹ thuật cắt động (Dynamic Truncation).

1

01. Công thức toán học cốt lõi của TOTP

// 1. Tính bước thời gian T (Time step):
T = floor((Current_Unix_Time - T0) / X) // X = 30 giây, T0 = 0
// 2. Tạo mã băm HMAC-SHA1:
HMAC_Result = HMAC-SHA-1(Key, T)
// 3. Cắt động và lấy modulo 1.000.000:
TOTP = Truncate(HMAC_Result) mod 10^6
2

02. Mã nguồn triển khai bằng Python thuần (Không cần thư viện ngoài)

import hmac
import hashlib
import time
import struct
import base64

def generate_totp(secret_base32: str, interval: int = 30, digits: int = 6) -> str: cleaned = secret_base32.replace(” ”, "").upper() padding = len(cleaned) % 8 if padding: cleaned += ’=’ * (8 - padding) key = base64.b32decode(cleaned)

time_step = int(time.time()) // interval time_bytes = struct.pack(“>Q”, time_step)

hmac_digest = hmac.new(key, time_bytes, hashlib.sha1).digest() offset = hmac_digest[-1] & 0x0F code_int = struct.unpack(“>I”, hmac_digest[offset:offset+4])[0] & 0x7FFFFFFF

code = code_int % (10 ** digits) return str(code).zfill(digits)

if name == “main”: print(“Mã 2FA hiện tại:”, generate_totp(“JBSWY3DPEHPK3PXP”))

3

03. Triển khai bằng JavaScript Web Crypto API

API Web Crypto của trình duyệt cho phép tính toán khóa trong vùng bộ nhớ bảo vệ, đảm bảo bí mật không bị lộ ra ngoài giao diện mạng.