อธิบาย QR Code TOTP 2FA

การวิเคราะห์เชิงเทคนิคเชิงลึกเกี่ยวกับรูปแบบ URI otpauth:// รหัสลับ base32 และคณิตศาสตร์ TOTP ตาม RFC 6238

TOTP คืออะไร

TOTP (Time-based One-Time Password, RFC 6238) คืออัลกอริทึมที่อยู่เบื้องหลัง Google Authenticator, Authy, 1Password, Bitwarden และแอปรับรองตัวตนอื่นๆ ทั้งหมด มันสร้างรหัส 6 หลักที่เปลี่ยนทุก 30 วินาทีโดยอิงตามรหัสลับที่แชร์ร่วมกันและเวลา Unix ปัจจุบัน

URI otpauth

otpauth://totp/Issuer:account@example.com?secret=BASE32SECRET&issuer=Issuer&algorithm=SHA1&digits=6&period=30

สคีม URI คือ otpauth:// ประเภทคือ totp (อีกตัวเลือกคือ hotp แบบนับ) จากนั้นเป็นป้ายชื่อและพารามิเตอร์คิวรี แอปรับรองตัวตนจะแยกวิเคราะห์ URI นี้และเพิ่มเข้าไปในคลังของผู้ใช้ด้วยการสแกนเพียงครั้งเดียว

ป้ายชื่อ

รูปแบบเสริม: Issuer:account@example.com คำนำหน้า Issuer ซ้ำกับพารามิเตอร์ issuer แต่แอปส่วนใหญ่รู้จักทั้งสองอย่าง

รหัสลับ

สตริงไบต์ที่เข้ารหัส base32 (A-Z และ 2-7 ไม่มี padding) แนะนำให้ใช้อย่างน้อย 128 บิต เซิร์ฟเวอร์ส่วนใหญ่ใช้ 160 บิต (32 ตัวอักษร base32) อย่าทำการ URL encode รหัสลับ ให้ทิ้งไว้เป็น base32 ดิบ

อัลกอริทึม หลัก และช่วงเวลา

algorithm: SHA1 (ค่าเริ่มต้น รองรับทุกที่), SHA256 หรือ SHA512 digits: 6 (ค่าเริ่มต้น) หรือ 8 period: 30 วินาที (ค่าเริ่มต้น) หรือ 60 ให้ใช้ค่าเริ่มต้นไว้ก่อนหากไม่มีเหตุผลที่จะเปลี่ยน เพราะแอปรับรองตัวตนบางตัวไม่รองรับตัวเลือกที่ไม่ใช่ค่าเริ่มต้น

วิธีคำนวณรหัส

ทุกช่วง 30 วินาที ตัวรับรองตัวตนจะทำ: HMAC-SHA1(secret, floor(unix_time / 30)) นำ 4 บิตสุดท้ายของ HMAC เป็นค่า offset แบบไดนามิก อ่าน 4 ไบต์จาก offset นั้น mask เป็น 31 บิต แล้วหารเอาเศษด้วย 106 เพื่อได้รหัส 6 หลัก

สร้างด้วย Abundera QR

เปิด เครื่องสร้าง TOTP กรอกผู้ออก (ชื่อแบรนด์ของคุณ) บัญชี (อีเมลหรือชื่อผู้ใช้) และรหัสลับ base32 ค่าเริ่มต้นสำหรับอัลกอริทึม/หลัก/ช่วงเวลาถูกต้องสำหรับเซิร์ฟเวอร์เกือบทุกชนิด ดาวน์โหลด PNG แล้วส่งทางอีเมลหรือ SMS ให้ผู้ใช้ หรือฝังไว้ในขั้นตอนการลงทะเบียน

หมายเหตุด้านความเป็นส่วนตัว

รหัสลับ TOTP ของคุณเป็นข้อมูลรับรองที่แชร์ระหว่างเซิร์ฟเวอร์และผู้ใช้ Abundera QR ไม่เคยเห็นมัน การเข้ารหัสทั้งหมดเกิดขึ้นในเบราว์เซอร์ อ่านนโยบายความเป็นส่วนตัวฉบับเต็ม