Algoritma Kata Sandi Sekali-pakai berbasis Waktu

**Algoritma Kata Sandi Sekali-Pakai berbasis Waktu** (, **TOTP**) adalah perpanjangan fungsi dari algoritma Kata Sandi Sekali-Pakai berbasis HMAC (HOTP) yang menghasilkan kata sandi satu kali pakai dengan cara mengambil keunikan dari waktu saat ini (sekarang). Algoritma 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 di autentikasi. 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 memastikan keamanannya, seperti pembatasan tingkat permintaan.

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

* T_0, waktu Unix untuk mulai menghitung langkah waktu (standarnya adalah 0)
* T_X, interval yang akan digunakan untuk menghitung nilai penghitung C_T (standarnya adalah 30 detik)

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

: Nilai TOTP (K) = nilai HOTP (K, C_T)

Penghitung waktu, C_T, adalah bilangan bulat menghitung jumlah durasi, T_X dalam perbedaan antara arus waktu Unix, T, dan beberapa epos (T_0; bandingkan dengan epos Unix); nilai yang terakhir semua berada di detik integer.

: 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.

## Referensi

## 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)").