Generator TOTP

Hasil

Setiap kali Google Authenticator atau Authy menampilkan kode enam digit yang berganti tiap 30 detik, itulah TOTP: HMAC dari secret bersama dan waktu Unix saat ini, yang dibakukan dalam RFC 6238. Generator ini menghitung kode yang sama dari secret Base32 apa pun, sehingga berguna untuk men-debug integrasi autentikasi dua faktor (2FA) baru, mencari tahu kenapa sebuah layanan menolak kode Anda, atau mengamati reaksi algoritmenya terhadap parameter yang berbeda. Gunakan dengan secret uji: kode dihitung di server kami, jadi secret asli yang melindungi akun Anda seharusnya berada di aplikasi authenticator, bukan di halaman web.

Cara kerja generator TOTP ini

  1. 1

    Tempel secret Base32

    Huruf A-Z dan angka 2-7, format yang dipakai di dalam kode QR otpauth://. Spasi dan huruf kecil tidak masalah; karakter lain akan dilaporkan sebagai Base32 tidak valid.

  2. 2

    Pilih algoritme hash

    SHA-1 dipakai hampir semua layanan; beralihlah ke SHA-256 atau SHA-512 hanya jika layanan tersebut secara eksplisit mewajibkannya.

  3. 3

    Atur digit dan periode

    Pilih 6, 7, atau 8 digit dan jendela 30 atau 60 detik. Kombinasi standarnya adalah 6 digit setiap 30 detik.

  4. 4

    Baca kode saat ini

    Kode diperbarui setiap detik, dan hitung mundur menunjukkan berapa detik tersisa untuk jendela yang sedang berjalan.

  5. 5

    Bandingkan URI otpauth

    Alat ini menampilkan URI otpauth:// untuk parameter Anda, sehingga bisa dicocokkan dengan isi QR penyiapan sebuah layanan.

Algoritmenya dalam bahasa sederhana

TOTP adalah HOTP (one-time password berbasis HMAC, RFC 4226) yang counter-nya diganti dengan waktu Unix saat ini dibagi langkah waktu (biasanya 30 detik):

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

Perangkat Anda dan server menjalankan hitungan yang sama atas secret yang sama dan jam yang sama, sehingga keduanya sampai pada kode yang sama tanpa kode itu pernah dikirim ke mana pun. Kode 6 digit hanyalah HMAC terpotong modulo 10^6. Tanpa sihir, hanya hashing.

Parameter umum

Layanan Algoritme Digit Periode
Sebagian besar situs dan aplikasi SHA-1 6 30 detik
GitHub SHA-1 6 30 detik
Cloudflare SHA-1 6 30 detik
Akun Microsoft SHA-1 6 30 detik
Sebagian bank dan VPN perusahaan SHA-256 atau SHA-512 8 60 detik

Jika sebuah layanan menolak kode Anda, periksa dulu jumlah digit dan periodenya, baru algoritmenya. Perhatikan juga bahwa sebagian aplikasi authenticator diam-diam mengabaikan parameter non-standar (Google Authenticator dulunya memperlakukan semuanya sebagai SHA-1, 6 digit, 30 detik), jadi selalu uji dengan aplikasi persis yang akan dipakai pengguna Anda.

Menyimpan secret dengan aman

  • Jangan pernah mengirim secret 2FA lewat email atau pesan. Begitu masuk kotak masuk, ia tinggal selamanya di log dan cadangan penyedia layanan.
  • Daftarkan 2FA dengan memindai kode QR. QR mengodekan URI otpauth://totp/... yang memuat secret, algoritme, digit, dan periode dalam satu paket yang tidak ambigu.
  • Cadangkan saat pendaftaran. Simpan kode pemulihan, atau secret-nya sendiri, di pengelola kata sandi; kehilangan ponsel tanpa itu membuat Anda terkunci.
  • Satu secret per layanan. Setiap layanan menerbitkan secret-nya sendiri saat penyiapan; jika ada yang bocor, daftarkan ulang agar secret lama berhenti berlaku.

Penyimpangan waktu

TOTP hanya bekerja selama kedua jam sepakat. Halaman ini menghitung kode dengan jam server, jadi jika kode di sini berbeda dengan aplikasi authenticator di ponsel Anda, tersangka pertamanya adalah jam perangkat. Sebagian besar validator menerima selisih satu jendela ke tiap arah (30 sampai 60 detik); lebih dari itu, sinkronkan jam perangkat lewat NTP sebelum menyalahkan secret-nya.

Gunakan secret uji di sini

Alat ini menghitung kode di server kami: secret yang Anda ketik dikirim lewat HTTPS pada setiap pembaruan, dan juga muncul di URL halaman jika Anda berpindah antar langkah alat. Itu wajar untuk pengembangan, demo, dan debugging dengan secret sekali pakai. Ini bukan tempat untuk secret asli yang melindungi email atau rekening bank Anda; simpan yang itu di aplikasi authenticator khusus di ponsel. Jika Anda telanjur menempelkan secret asli di luar authenticator Anda, daftarkan ulang 2FA di layanan tersebut supaya secret-nya diganti.

Pertanyaan yang Sering Diajukan

Anggap halaman ini alat pengembang dan pengujian, bukan brankas. Kode dihitung di sisi server, jadi secret berjalan ke server kami lewat HTTPS dan dapat muncul di URL halaman di antara langkah-langkah. Silakan pakai secret demo atau pengembangan dengan bebas; jangan pernah menempel secret asli dari akun yang Anda pedulikan. Jika sudah telanjur, daftarkan ulang 2FA di layanan itu agar secret-nya diganti.

Periksa parameternya dulu: algoritme, jumlah digit, dan periode harus persis sama dengan yang diterbitkan layanan. Lalu periksa jamnya: halaman ini memakai jam server, jadi selisih biasanya menunjuk ke perangkat satunya. Terakhir, ingat bahwa sebagian aplikasi mengabaikan parameter non-standar; contoh klasiknya Google Authenticator.

Hanya Base32: huruf A sampai Z dan angka 2 sampai 7, dengan padding = opsional. Spasi dihapus dan huruf kecil dikonversi otomatis. Secret dalam bentuk hex atau byte mentah harus dikonversi dulu ke Base32; jika tidak, alat melaporkan secret Base32 tidak valid.

Anda terkunci dari 2FA akun tersebut. Gunakan alur pemulihan layanan (kode pemulihan, verifikasi identitas, cadangan SMS). Saat penyiapan, selalu simpan kode pemulihan atau kode QR awal di tempat aman.

Bisa. Hasilkan secret acak di sisi server, minimal 128 bit (RFC 4226 menyarankan 160), tampilkan sekali saja sebagai kode QR, dan validasi kode yang dikirim pengguna dengan menghitung HMAC yang sama, biasanya sambil menerima selisih satu jendela ke tiap arah. Pustaka yang matang tersedia untuk semua stack: pyotp (Python), otplib (JavaScript), rotp (Ruby).

Alat Terkait

Alat ini tersedia dalam bahasa lain