ตัวสร้าง TOTP

ผลลัพธ์

ทุกครั้งที่ Google Authenticator หรือ Authy แสดงรหัส 6 หลักที่เปลี่ยนทุก 30 วินาที นั่นคือ TOTP: ค่า HMAC ที่คำนวณจากคีย์ลับที่ใช้ร่วมกันกับเวลา Unix ปัจจุบัน ตามมาตรฐาน RFC 6238 เครื่องมือนี้คำนวณรหัสชุดเดียวกันได้จากคีย์ลับ Base32 ใดก็ได้ จึงเหมาะสำหรับดีบักการเชื่อมต่อการยืนยันตัวตนสองขั้นตอน (2FA) ใหม่ หาสาเหตุที่บริการปฏิเสธรหัสของคุณ หรือสังเกตพฤติกรรมของอัลกอริทึมเมื่อเปลี่ยนพารามิเตอร์ โปรดใช้กับคีย์ลับสำหรับทดสอบเท่านั้น: รหัสถูกคำนวณบนเซิร์ฟเวอร์ของเรา ดังนั้นคีย์ลับจริงที่ปกป้องบัญชีของคุณควรอยู่ในแอปยืนยันตัวตน ไม่ใช่ในหน้าเว็บใดทั้งสิ้น

ตัวสร้าง TOTP นี้ทำงานอย่างไร

  1. 1

    วางคีย์ลับ Base32

    ตัวอักษร A-Z และตัวเลข 2-7 ซึ่งเป็นรูปแบบที่ใช้ในคิวอาร์โค้ด otpauth:// เว้นวรรคและตัวพิมพ์เล็กใช้ได้ ส่วนอักขระอื่นจะถูกแจ้งว่าเป็น Base32 ที่ไม่ถูกต้อง

  2. 2

    เลือกอัลกอริทึมแฮช

    บริการเกือบทั้งหมดใช้ SHA-1 เปลี่ยนไปใช้ SHA-256 หรือ SHA-512 เฉพาะเมื่อบริการนั้นกำหนดไว้อย่างชัดเจน

  3. 3

    ตั้งจำนวนหลักและช่วงเวลา

    เลือก 6, 7 หรือ 8 หลัก และหน้าต่างเวลา 30 หรือ 60 วินาที ค่ามาตรฐานคือ 6 หลักทุก 30 วินาที

  4. 4

    อ่านรหัสปัจจุบัน

    รหัสจะรีเฟรชทุกวินาที และตัวนับถอยหลังบอกว่าหน้าต่างเวลาปัจจุบันเหลืออีกกี่วินาที

  5. 5

    เทียบ URI แบบ otpauth

    เครื่องมือแสดง URI แบบ otpauth:// ของพารามิเตอร์ที่คุณตั้งไว้ เพื่อให้เทียบกับข้อมูลที่คิวอาร์โค้ดตั้งค่าของบริการเข้ารหัสไว้ได้

อธิบายอัลกอริทึมแบบง่าย

TOTP คือ HOTP (รหัสผ่านแบบใช้ครั้งเดียวที่อิงกับ HMAC ตาม RFC 4226) โดยเปลี่ยนตัวนับเป็นเวลา Unix ปัจจุบันหารด้วยขั้นเวลา (ปกติ 30 วินาที):

counter = floor(unix_time / 30)
hash = HMAC-SHA1(secret, counter_as_8_byte_big_endian)
offset = last byte of hash AND 0x0F
truncated = 4 bytes from offset, with the top bit zeroed
code = truncated mod 10^digits

อุปกรณ์ของคุณกับเซิร์ฟเวอร์คำนวณสมการเดียวกันด้วยคีย์ลับเดียวกันและนาฬิกาเดียวกัน จึงได้รหัสตรงกันโดยไม่ต้องส่งรหัสไปที่ไหนเลย รหัส 6 หลักก็คือ HMAC ที่ถูกตัดทอนแล้วนำมา mod 10^6 เท่านั้นเอง ไม่มีเวทมนตร์ มีแค่การแฮช

พารามิเตอร์ที่พบบ่อย

บริการ อัลกอริทึม จำนวนหลัก ช่วงเวลา
เว็บไซต์และแอปส่วนใหญ่ SHA-1 6 30 วินาที
GitHub SHA-1 6 30 วินาที
Cloudflare SHA-1 6 30 วินาที
บัญชี Microsoft SHA-1 6 30 วินาที
ธนาคารบางแห่งและ VPN องค์กร SHA-256 หรือ SHA-512 8 60 วินาที

ถ้าบริการปฏิเสธรหัสของคุณ ให้ตรวจจำนวนหลักและช่วงเวลาก่อน แล้วค่อยตรวจอัลกอริทึม และอย่าลืมว่าแอปยืนยันตัวตนบางตัวจะเพิกเฉยพารามิเตอร์ที่ไม่ใช่ค่าเริ่มต้นแบบเงียบ ๆ (ในอดีต Google Authenticator ปฏิบัติกับทุกอย่างเป็น SHA-1, 6 หลัก, 30 วินาที) ดังนั้นให้ทดสอบกับแอปตัวเดียวกับที่ผู้ใช้ของคุณจะใช้จริงเสมอ

เก็บคีย์ลับให้ปลอดภัย

  • อย่าส่งคีย์ลับ 2FA ทางอีเมลหรือข้อความเด็ดขาด ทันทีที่มันอยู่ในกล่องจดหมาย มันจะคงอยู่ในบันทึกและข้อมูลสำรองของผู้ให้บริการไปตลอด
  • ลงทะเบียนด้วยการสแกนคิวอาร์โค้ด คิวอาร์โค้ดเข้ารหัส URI แบบ otpauth://totp/... ที่รวมคีย์ลับ อัลกอริทึม จำนวนหลัก และช่วงเวลาไว้ในชุดเดียวอย่างชัดเจน
  • สำรองข้อมูลตั้งแต่ตอนลงทะเบียน เก็บรหัสกู้คืนหรือคีย์ลับไว้ในโปรแกรมจัดการรหัสผ่าน เพราะถ้าโทรศัพท์หายโดยไม่มีข้อมูลเหล่านี้ คุณจะเข้าบัญชีไม่ได้
  • หนึ่งบริการต่อหนึ่งคีย์ลับ ทุกบริการออกคีย์ลับของตัวเองตอนตั้งค่า ถ้าคีย์ใดรั่วไหล ให้ลงทะเบียน 2FA ใหม่ที่บริการนั้นเพื่อให้คีย์เก่าใช้ไม่ได้อีก

ความคลาดเคลื่อนของเวลา

TOTP ทำงานได้ก็ต่อเมื่อนาฬิกาทั้งสองฝั่งตรงกัน หน้านี้คำนวณรหัสด้วยนาฬิกาของเซิร์ฟเวอร์ ดังนั้นถ้ารหัสที่นี่ไม่ตรงกับแอปยืนยันตัวตนในโทรศัพท์ สิ่งแรกที่ควรสงสัยคือนาฬิกาของอุปกรณ์ ระบบตรวจสอบส่วนใหญ่ยอมรับความคลาดเคลื่อนหนึ่งหน้าต่างเวลาในแต่ละทิศทาง (30 ถึง 60 วินาที) ถ้าเกินกว่านั้น ให้ซิงก์นาฬิกาอุปกรณ์ผ่าน NTP ก่อนจะโทษคีย์ลับ

ใช้คีย์ลับทดสอบที่นี่เท่านั้น

เครื่องมือนี้คำนวณรหัสบนเซิร์ฟเวอร์ของเรา: คีย์ลับที่คุณพิมพ์จะถูกส่งผ่าน HTTPS ทุกครั้งที่อัปเดต และยังปรากฏใน URL ของหน้าเมื่อคุณย้ายไปมาระหว่างขั้นตอนของเครื่องมือ ซึ่งเหมาะสำหรับการพัฒนา การสาธิต และการดีบักด้วยคีย์ลับแบบใช้แล้วทิ้ง แต่ไม่ใช่ที่สำหรับคีย์ลับจริงที่ปกป้องอีเมลหรือบัญชีธนาคารของคุณ คีย์เหล่านั้นควรอยู่ในแอปยืนยันตัวตนบนโทรศัพท์เท่านั้น ถ้าคุณเผลอวางคีย์ลับจริงไว้นอกแอปยืนยันตัวตนไปแล้ว ให้ลงทะเบียน 2FA ใหม่ที่บริการนั้นเพื่อเปลี่ยนคีย์

คำถามที่พบบ่อย

ให้มองหน้านี้เป็นเครื่องมือสำหรับนักพัฒนาและการทดสอบ ไม่ใช่ตู้เซฟ รหัสถูกคำนวณฝั่งเซิร์ฟเวอร์ คีย์ลับจึงเดินทางไปยังเซิร์ฟเวอร์ของเราผ่าน HTTPS และอาจปรากฏใน URL ของหน้าระหว่างขั้นตอน ใช้คีย์ลับสำหรับสาธิตหรือพัฒนาได้อย่างอิสระ แต่อย่าวางคีย์ลับจริงของบัญชีที่คุณให้ความสำคัญเด็ดขาด ถ้าวางไปแล้ว ให้ลงทะเบียน 2FA ใหม่ที่บริการนั้นเพื่อเปลี่ยนคีย์

ตรวจพารามิเตอร์ก่อน: อัลกอริทึม จำนวนหลัก และช่วงเวลาต้องตรงกับที่บริการออกให้ทุกประการ จากนั้นตรวจนาฬิกา: หน้านี้ใช้นาฬิกาของเซิร์ฟเวอร์ ความคลาดเคลื่อนจึงมักชี้ไปที่อุปกรณ์อีกฝั่ง สุดท้าย อย่าลืมว่าแอปบางตัวเพิกเฉยพารามิเตอร์ที่ไม่ใช่ค่าเริ่มต้น ตัวอย่างคลาสสิกคือ Google Authenticator

Base32 เท่านั้น: ตัวอักษร A ถึง Z และตัวเลข 2 ถึง 7 พร้อมเครื่องหมาย = เติมท้ายได้ตามต้องการ เว้นวรรคจะถูกตัดออกและตัวพิมพ์เล็กจะถูกแปลงให้อัตโนมัติ คีย์ลับแบบฐานสิบหกหรือไบต์ดิบต้องแปลงเป็น Base32 ก่อน ไม่เช่นนั้นเครื่องมือจะแจ้งว่าคีย์ลับ Base32 ไม่ถูกต้อง

คุณจะเข้าใช้ 2FA ของบัญชีนั้นไม่ได้ ให้ใช้ขั้นตอนกู้คืนของบริการ (รหัสกู้คืน การยืนยันตัวตน หรือ SMS สำรอง) และตอนตั้งค่าให้เก็บรหัสกู้คืนหรือคิวอาร์โค้ดเริ่มต้นไว้ในที่ปลอดภัยเสมอ

ได้ สร้างคีย์ลับแบบสุ่มฝั่งเซิร์ฟเวอร์ อย่างน้อย 128 บิต (RFC 4226 แนะนำ 160 บิต) แสดงเป็นคิวอาร์โค้ดเพียงครั้งเดียว แล้วตรวจสอบรหัสที่ผู้ใช้ส่งมาด้วยการคำนวณ HMAC แบบเดียวกัน โดยทั่วไปยอมรับความคลาดเคลื่อนหนึ่งหน้าต่างเวลาในแต่ละทิศทาง มีไลบรารีที่เสถียรสำหรับทุกเทคโนโลยี: pyotp (Python), otplib (JavaScript), rotp (Ruby)

เครื่องมือที่เกี่ยวข้อง

ตัวสร้าง HMAC

สร้างลายเซ็น HMAC (SHA-256, SHA-384, SHA-512, SHA-1 และ MD5) จากข้อความและกุญแจลับ เพื่อใช้ในการยืนยันตัวตนผ่าน API และ Webhook

ตัวสร้าง JWT

สร้าง JWT ที่มีการลงนาม โดยกำหนดหัวข้อ (header) แบบกำหนดเอง สิทธิ์ของพารามิเตอร์ในเนื้อหา (payload claims) การลงนามด้วย HMAC หรือ RSA รวมถึงกำหนดระยะเวลาหมดอายุและกลุ่มผู้ใช้งานที่อนุญาต เพื่อใช้ในการทดสอบ

ตัวเข้ารหัสไฟล์ Base64

เข้ารหัสไฟล์ใดก็ได้ (PDF, ZIP, รูปภาพ, ไฟล์ปฏิบัติการ) เป็นข้อความ Base64 เพื่อฝังใน JSON, อีเมล, YAML หรือ data URI ทำงานในเครื่องของคุณ ไม่มีการอัปโหลด

ตัวสร้างแฮช (Hash Generator)

สร้างค่าแฮช MD5, SHA-1, SHA-256, SHA-384, SHA-512 และ CRC32 จากข้อความ พร้อมค่าไดเจสต์พร้อมคัดลอกสำหรับเช็คซัมและการเปรียบเทียบ

เครื่องสร้างค่าแฮช MD5

คำนวณค่า checksum แบบ MD5 ของข้อความและไฟล์เพื่อยืนยันความสมบูรณ์ โดยผลลัพธ์จะตรงกับที่ได้จากฟังก์ชัน md5sum และ openssl dgst -md5

เครื่องแปลง Gwei เป็น Ether

แปลงจำนวนในหน่วย Gwei เป็น Ether (ETH) ด้วยทศนิยมสูงสุด 18 ตำแหน่ง มีประโยชน์สำหรับการประมาณค่าธรรมเนียม Gas และการอ่านข้อมูลธุรกรรม

เครื่องมือนี้มีให้บริการในภาษาอื่น