Risiko Keamanan Utama UUID
UUID (Universally Unique Identifier) tidak dirancang sebagai mekanisme keamanan atau kontrol akses. Kesalahan fatal yang sering dilakukan pengembang adalah mengasumsikan bahwa karena UUID memiliki ruang probabilitas tabrakan yang sangat rendah (128-bit), maka UUID tersebut bersifat 'aman' atau 'rahasia'. Faktanya, UUID v1 hingga v4 tidak memiliki properti kriptografis yang kuat, sehingga rentan terhadap enumerasi jika digunakan sebagai pengenal sumber daya publik (public-facing resource ID).
Analisis Kerentanan Berdasarkan Versi
| Versi UUID | Mekanisme | Risiko Keamanan |
|---|---|---|
| v1 | Timestamp & MAC Address | Membocorkan identitas perangkat (MAC) dan waktu pembuatan. |
| v3/v5 | Hashing (MD5/SHA-1) | Dapat diprediksi jika input (namespace/name) diketahui. |
| v4 | Random (Pseudo-random) | Rentan terhadap analisis pola jika PRNG (Pseudo-Random Number Generator) lemah. |
| v7 | Timestamp-ordered | Mudah ditebak urutannya, mempermudah enumerasi ID secara berurutan. |
Mengapa UUID Bukan Pengganti Otorisasi
Menggunakan UUID sebagai pengganti ID numerik (misal: /api/users/123 menjadi /api/users/550e8400-e29b-41d4-a716-446655440000) sering disebut sebagai security through obscurity. Ini bukan kontrol akses. Jika penyerang berhasil menebak atau mendapatkan satu UUID, mereka tidak memiliki batasan untuk mencoba menebak UUID lain jika sistem tidak memiliki lapisan otorisasi (RBAC/ABAC) yang ketat di sisi server.
Strategi Mitigasi
- Otorisasi Berbasis Peran: Selalu validasi kepemilikan sumber daya di sisi server, terlepas dari format ID yang digunakan.
- Hashids atau Obfuscation: Jika Anda perlu menyembunyikan ID internal, gunakan pustaka seperti Hashids untuk mengubah ID numerik menjadi string acak yang tidak dapat diprediksi.
- UUID v4 untuk Internal: Gunakan UUID v4 hanya untuk identifikasi internal database, bukan sebagai parameter URL yang dapat diakses publik tanpa autentikasi.
- Tokenisasi: Gunakan token akses (seperti JWT) yang memiliki masa kedaluwarsa untuk mengakses sumber daya, bukan mengandalkan ID sumber daya itu sendiri.
Dalam arsitektur sistem yang aman, UUID hanyalah sebuah pengenal unik. Keamanan data harus selalu bergantung pada mekanisme autentikasi dan otorisasi yang teruji, bukan pada kerumitan atau panjang karakter dari sebuah ID.