**Algoritme Kata Sandi Sekali-Pakai berbasis Waktu** (bahasa Inggris: *Time-based One-time Password algorithm*, **TOTP**) adalah perpanjangan fungsi dari algoritme Kata Sandiri Sekali-Pakai berbasis HMAC (HOTP) yang menghasilkan kata sandi satu kali pakai dengan cara mengambil keunikan dari waktu saat ini (sekarang). Algoritme ini telah diadopsi sebagai standar Internet Engineering Task Force RFC 6238 yang merupakan landasan dari Initiative For Open Authentication (OATH), dan digunakan dalam sejumlah sistem autentikasi dua faktor.

Karena adanya latensi, baik bersumber dari jaringan dan manusia, dan jam yang belum diselaraskan, kata sandi satu kali ini harus divalidasi dalam rentang waktu tertentu antara autentikator dan perangkat yang diautentikasi. Dalam hal ini, waktu latensi dipanjangkan menjadi durasi yang lebih besar (misalnya, 30 detik) yang memungkinkan untuk memvalidasi para pihak. Namun, seperti halnya HOTP, hal tersebut membutuhkan tindakan pencegahan tambahan untuk memmastikan keamanannya, seperti pembatasan tingkat permintaan.

Algoritme
---------

Untuk menetapkan otentikasi TOTP, perangkat yang diautentikasi dan autentikator harus terlebih dahulu menetapkan parameter HOTP dan parameter TOTP sebagai berikut:

* {\displaystyle T\_{0}}, waktu Unix untuk mulai menghitung langkah waktu (standarnya adalah 0)
* {\displaystyle T\_{X}}, interval yang akan digunakan untuk menghitung nilai penghitung {\displaystyle C\_{T}} (standarnya adalah 30 detik)

### Nilai TOTP

Nilai yang dihasilkan oleh TOTP menggunakan algoritme HOTP yang menggantikan penghitung dengan nilai yang tidak berkurang berdasarkan waktu saat ini (sekarang).

Nilai TOTP ({\displaystyle K}) = nilai HOTP ({\displaystyle K}, {\displaystyle C\_{T}})
Penghitung waktu, {\displaystyle C\_{T}}, adalah bilangan bulat menghitung jumlah durasi, {\displaystyle T\_{X}} dalam perbedaan antara arus waktu Unix, {\displaystyle T}, dan beberapa epos ({\displaystyle T\_{0}}; bandingkan dengan epos Unix); nilai yang terakhir semua berada di detik integer.

{\displaystyle C\_{T}=\left\lfloor {\frac {T-T\_{0}}{T\_{X}}}\right\rfloor }

Pertimbangan praktis
--------------------

Agar autentikasi berikutnya dapat berfungsi, jam dari yang terautentikasi dan autentikator perlu diselaraskan (autentikator akan biasanya menerima kata sandi satu kali yang dihasilkan dari stempel waktu yang berbeda dengan lebih kurang 1 interval waktu dari stempel waktu yang diautentikasi).

Kelemahan dan kerentanan
------------------------

Nilai-nilai TOTP dapat dipancing seperti halnya kata sandi, meskipun membutuhkan penyerang untuk mengelabui kredensial selama waktu berjalan daripada mengumpulkannya dalam waktu yang tepat.

Implementasi yang tidak membatasi upaya masuk log rentan terhadap pencocokan nilai-nilai tersebut secara kasar.

Seorang penyerang yang mencuri nilai rahasia bersama dapat menghasilkan nilai TOTP baru yang valid sesuka hati. Ini bisa menjadi masalah tertentu jika penyerang menargetkan sebuah basis data otentikasi yang besar.

Karena perangkat TOTP memiliki baterai yang dapat habis sewaktu-waktu dan jam yang dapat diselaraskan, dan perangkat lunak TOTP pada ponsel yang dapat hilang dan/atau dicuri, semua implementasi dunia nyata memiliki metode untuk memintas perlindungan (misalnya: kode cetak, pengaturan ulang kata sandi, dll.). Hal ini dapat menyebabkan beban dukungan yang cukup besar untuk basis pengguna yang besar, dan juga memberi jalan tambahan bagi pengguna palsu untuk dieksploitasi.

Nilai TOTP ini akan berlaku lebih lama dari jumlah waktu yang ditampilkan di layar perangkat (pada umumnya dua kali lebih panjang).

Sejarah
-------

Draf TOTP sebelumnya dikembangkan melalui kerja sama beberapa anggota OATH untuk menciptakan standar yang didukung oleh sejumlah industri. TOTP melengkapi standar HOTP sekali-pakai berbasis-kejadian dan menawarkan lebih banyak opsi bagi organisasi dan perusahaan dalam memilih teknologi yang paling sesuai dengan persyaratan aplikasi dan pedoman keamanan mereka. Pada tahun 2008, OATH menyerahkan versi draf spesifikasi tersebut kepada IETF. Versi ini menggabungkan semua umpan balik dan komentar yang diterima penulis dari komunitas teknis berdasarkan versi sebelumnya. Pada bulan Mei 2011, TOTP secara resmi menjadi RFC 6238.<ref name="RFC6238/">

Referensi
---------

1. ↑  "RFC 6238 – TOTP: Time-Based One-Time Password Algorithm" (dalam bahasa Inggris). Diakses tanggal 13 Juli 2011.
2. ↑  Zetter, Kim. "RSA Agrees to Replace Security Tokens After Admitting Compromise". *WIRED* (dalam bahasa Inggris). Diakses tanggal 17 Februari 2017.
3. ↑  Alexander, Madison. "OATH Submits TOTP: Time-Based One Time Password Specification to IETF". *Open Authentication*. Diakses tanggal 22 February 2010.

Pranala luar
------------

* Langkah demi langkah implementasi Python di Notebook Jupyter
* Merancang Hub Docker Otentikasi Dua Faktor, (bagian "Menggunakan Otentikasi Sandi Satu Kali Berbasis Waktu (TOTP)").