KuloDev
1 Hari
0 XP
intermediate40 menitModul: 02-modern-web-security-headers

Kriptografi Web: Password Hashing, Salt & Timing Attacks

Kuasai fondasi kriptografi untuk backend developer: perbedaan Enkripsi vs Hashing vs Encoding, algoritma KDF yang aman (Scrypt, Argon2), fungsi Salt, dan pencegahan Timing Attacks.

1. Encoding vs Enkripsi vs Hashing: Jangan Tertukar!

2. Mengapa SHA-256 Biasa Berbahaya untuk Password?

Fungsi hash umum (seperti MD5, SHA-1, SHA-256) dirancang untuk kecepatan tinggi (memverifikasi integritas file dalam hitungan mikrodetik). Penyerang yang memiliki GPU modern dapat menebak miliaran hash SHA-256 per detik menggunakan **Rainbow Tables** dan *brute-force*.

Untuk password, kita **wajib** menggunakan algoritma **Key Derivation Function (KDF)** yang sengaja dibuat lambat dan boros memori (*memory-hard*), seperti **Scrypt, Argon2id, atau BCrypt**, serta selalu menyertakan **Salt unik acak (cryptographic random)** untuk setiap pengguna.

3. Timing Attacks & crypto.timingSafeEqual

Operator perbandingan string biasa (`a === b`) berhenti membandingkan (*early exit*) begitu menemukan karakter pertama yang tidak cocok. Penyerang dapat mengukur waktu respon server dalam nanodetik untuk menebak karakter token rahasia satu per satu! Selalu gunakan perbandingan waktu konstan (*constant-time comparison*):

example.js
javascript
1import crypto from 'crypto';
2
3// Mencegah Timing Attacks pada verifikasi HMAC / Token sesi:
4function verifySecret(userHash, storedHash) {
5 const userBuf = Buffer.from(userHash, 'hex');
6 const storedBuf = Buffer.from(storedHash, 'hex');
7
8 if (userBuf.length !== storedBuf.length) return false;
9 return crypto.timingSafeEqual(userBuf, storedBuf);
10}

Selesaikan Materi Ini?

Dapatkan +25 XP dan simpan progres belajarmu.