🔐 Стандарты IETF & Прикладная криптография

Как устроен алгоритм TOTP: реализация стандарта RFC 6238 на Python, JavaScript и Go

Пошаговый разбор математики одноразовых паролей: декодирование Base32, временные срезы по 30 секунд, подпись HMAC-SHA1 и взятие остатка по модулю $10^6$.

01. Реализация на чистом Python

import hmac
import hashlib
import time
import struct
import base64

def generate_totp(secret: str, interval: int = 30) -> str: key = base64.b32decode(secret.replace(” ”, "").upper()) time_step = int(time.time()) // interval msg = struct.pack(“>Q”, time_step) digest = hmac.new(key, msg, hashlib.sha1).digest() offset = digest[-1] & 0x0F code_int = struct.unpack(“>I”, digest[offset:offset+4])[0] & 0x7FFFFFFF return str(code_int % 1000000).zfill(6)

if name == “main”: print(“Код TOTP:”, generate_totp(“JBSWY3DPEHPK3PXP”))