Back to blog
Security

Timing Attack: Gimana Hacker Bisa Nebak Password Cuma dari Kecepatan Respons Server?

Server Budi membandingkan API Key tamu dengan API Key asli huruf demi huruf, lalu berhenti begitu ketemu huruf yang salah. Ternyata kebiasaan 'berhenti lebih cepat' itu jadi celah rahasia.

super admin·02 September 2026·2 min read
Timing Attack: Gimana Hacker Bisa Nebak Password Cuma dari Kecepatan Respons Server?
Article Content

Bayangin Budi Membandingkan API Key dengan Cara Paling 'Logis'...

Bayangin Budi membuat validasi API Key sederhana untuk endpoint internalnya:

function isValidKey(input, secretKey) {
  if (input.length !== secretKey.length) return false;
  for (let i = 0; i < input.length; i++) {
    if (input[i] !== secretKey[i]) return false; // langsung berhenti!
  }
  return true;
}

Kodenya terlihat sangat masuk akal: begitu ketemu satu huruf yang salah, langsung return false — buat apa capek-capek mengecek huruf sisanya? Secara logika pemrograman biasa, ini optimasi yang bagus.

Tapi seorang hacker yang sabar mengirim ribuan percobaan API Key sambil mengukur waktu respons server dalam mikrodetik, dan menemukan pola aneh: tebakan yang huruf pertamanya benar, responsnya sedikit lebih lambat dibanding tebakan yang huruf pertamanya salah — karena loop-nya sempat jalan satu putaran lebih banyak sebelum berhenti!

Masalahnya: Kecepatan Respons Itu Sendiri Adalah Informasi Bocor

Dengan mengulangi jutaan percobaan dan mengukur selisih waktu yang sangat kecil (kadang cuma nanodetik) secara statistik, hacker bisa menebak API Key satu huruf demi satu huruf — bukan dengan menebak seluruh kombinasi sekaligus (yang butuh miliaran tahun), tapi dengan menebak huruf pertama dulu sampai responsnya "terasa lebih lambat", lalu lanjut ke huruf kedua, dan seterusnya. Ini disebut Timing Attack, dan secara matematis mengubah pekerjaan menebak brute force yang mustahil menjadi pekerjaan yang realistis dilakukan.

Nah, Di Sinilah 'Constant-Time Comparison' Masuk!

Solusinya adalah fungsi perbandingan yang sengaja selalu memakan waktu yang sama persis, tidak peduli di huruf keberapa perbedaannya ditemukan — fungsi ini tetap mengecek seluruh karakter sampai akhir, baru menyimpulkan hasilnya di ujung.

import crypto from "crypto";

function isValidKeySafe(input, secretKey) {
  const a = Buffer.from(input);
  const b = Buffer.from(secretKey);
  if (a.length !== b.length) return false;
  return crypto.timingSafeEqual(a, b);
}

Fungsi bawaan seperti crypto.timingSafeEqual() di Node.js dirancang khusus supaya waktu eksekusinya konstan, tidak peduli inputnya benar sepenuhnya, salah di huruf pertama, atau salah di huruf terakhir — sehingga tidak ada informasi apapun yang bisa "dicuri" lewat pengukuran waktu.

Intinya: Setiap kali membandingkan data rahasia (password hash, token, API Key, signature webhook), jangan pernah pakai === atau loop manual yang berhenti lebih awal. Selalu gunakan fungsi constant-time comparison resmi dari library kriptografi.

Mau langsung pakai template?

Jelajahi template gratis dan premium di TampilKit untuk mempercepat proses development project kamu.

Browse Templates