Saya menyadari bahwa spesifikasi OAuth tidak menentukan apa pun tentang asal kode ConsumerKey, ConsumerSecret, AccessToken, RequestToken, TokenSecret, atau Verifier, tetapi saya ingin tahu apakah ada praktik terbaik untuk membuat token yang sangat aman (terutama Token / Kombinasi rahasia).
Seperti yang saya lihat, ada beberapa pendekatan untuk membuat token:
- Cukup gunakan byte acak, simpan di DB yang terkait dengan konsumen / pengguna
- Hash beberapa data khusus pengguna / konsumen, simpan di DB yang terkait dengan konsumen / pengguna
- Enkripsi data khusus pengguna / konsumen
Keuntungan dari (1) adalah database adalah satu-satunya sumber informasi yang tampaknya paling aman. Akan lebih sulit untuk menjalankan serangan daripada (2) atau (3).
Hashing data nyata (2) akan memungkinkan pembuatan kembali token dari data yang mungkin sudah diketahui. Mungkin tidak benar-benar memberikan keuntungan apa pun untuk (1) karena tetap perlu menyimpan / mencari. Lebih intensif CPU daripada (1).
Mengenkripsi data nyata (3) akan memungkinkan penguraian sandi untuk mengetahui informasi. Ini akan membutuhkan lebih sedikit penyimpanan & kemungkinan pencarian lebih sedikit daripada (1) & (2), tetapi berpotensi kurang aman juga.
Apakah ada pendekatan / keuntungan / kerugian lain yang harus dipertimbangkan?
EDIT: pertimbangan lain adalah HARUS ada semacam nilai acak dalam Token karena harus ada kemampuan untuk kedaluwarsa dan menerbitkan ulang token baru sehingga tidak boleh hanya terdiri dari data nyata.
Ikuti Pertanyaan :
Apakah ada panjang Token minimum untuk membuat aman secara kriptografis? Seperti yang saya pahami, Rahasia Token yang lebih lama akan membuat tanda tangan yang lebih aman. Apakah pemahaman ini benar?
Apakah ada keuntungan menggunakan pengkodean tertentu dibandingkan yang lain dari perspektif hashing? Misalnya, saya melihat banyak API menggunakan pengkodean hex (misalnya string GUID). Dalam algoritme penandatanganan OAuth, Token digunakan sebagai string. Dengan string hex, kumpulan karakter yang tersedia akan jauh lebih kecil (lebih dapat diprediksi) daripada yang dikatakan dengan pengkodean Base64. Tampak bagi saya bahwa untuk dua string dengan panjang yang sama, string dengan himpunan karakter yang lebih besar akan memiliki distribusi hash yang lebih baik / lebih luas. Menurut saya ini akan meningkatkan keamanan. Apakah asumsi ini benar?
Spesifikasi OAuth mengangkat masalah ini di 11.10 Entropy of Secrets .