it-swarm-tr.com

/ Dev / urandom'dan bir Rand bir giriş anahtarı için güvenli mi?

Bir kullanıcı için çerez oluşturmak istediğimi varsayalım. / dev/urandom kullanarak 1024 bit dizesi oluşturur ve zaten var olup olmadığını kontrol eder ( benzersiz bir tane) yeterli mi?

Anahtarı başka bir şeye dayanarak mı oluşturmalıyım? Bu bir şekilde sömürüye yatkın mı?

187
Incognito

Kısa cevap evet. Uzun cevap da evet. /dev/urandom mevcut teknoloji göz önüne alındığında gerçek rastgelelikten ayırt edilemeyen veriler verir. Sizin durumunuz olmayan birkaç "bilgi teorisi" kriptografik algoritmasından birini kullanmadığınız sürece, /dev/urandom 'nin sunduğundan daha iyi "rastgele" elde etmek anlamsızdır.

urandom için man sayfası biraz yanıltıcı, tartışmalı bir şekilde yanlıştır, /dev/urandom "entropiden kaçabilir" ve /dev/random tercih edilmelidir; /dev/urandom olabilir düşük entropi nedeniyle bir güvenlik sorununun yeni, otomatik bir işletim sistemi kurulumunun ilk anlarında olduğu anlamına gelir; makine bir ağ etkinliğine başlamış olduğu bir noktaya önyükleme yaptıysa, tüm pratik kullanımlar için yeterince yüksek kalitede rasgelelik sağlamak için yeterli fiziksel rastgele toplandı (burada Linux hakkında konuşuyorum; FreeBSD'de, anlık anlık anlık zayıflık hiç oluşmaz). Öte yandan, /dev/random uygunsuz zamanlarda engelleme eğilimindedir ve bu da çok gerçek ve rahatsız edici kullanılabilirlik sorunlarına yol açar. Veya daha az kelimeyle söylemek gerekirse: /dev/urandom kullanın ve mutlu olun; /dev/random kullanın ve özür dileriz.

( Düzenleme: bu Web sayfası/dev/random ve /dev/urandom açıkça anlaşılır.)

Bir "çerez" üretmek amacıyla: böyle bir çerez, iki kullanıcının aynı çerezi paylaşmadığı ve herhangi bir kişinin mevcut bir çerezin değerini "tahmin etmesinin" hesapsal olarak mümkün olmadığı şekilde olmalıdır. Rastgele bayt dizisi, yeterli kalitede (/dev/urandom iyidir) rasgele kullanması ve yeterince uzun olması şartıyla bunu iyi yapar. Genel bir kural olarak, 2n kullanıcılar ( n = 33 tüm Earth nüfusu sisteminizi kullanabiliyorsa), n + 128 bitlik bir dizi yeterince geniştir ; mevcut değerlere sahip bir çarpışma olup olmadığını kontrol etmek zorunda bile değilsiniz: bunu yaşamınız boyunca görmeyeceksiniz. 161 bit 21 bayta sığar.

are Daha kısa çerezler istiyorsanız ve yine de veritabanınızdaki çarpışmaları aramaktan kaçınmak için yapılabilecek bazı hileler var. Ancak bu bir çerez için neredeyse gerekli değildir (Web tabanlı bir bağlam olduğunu varsayıyorum). Ayrıca, çerezlerinizi gizli tutmayı unutmayın (yani HTTPS kullanın ve çerezi "güvenli" ve "HttpOnly" bayrakları).

222
Thomas Pornin

Evet, harika bir yol.

@ Thomas'ın açıklaması çiviler. Ve /dev/urandom adam sayfası. Açık.

Ancak "zaten var olup olmadığını kontrol et" i atlayın. Bu kontrol anlamsız. Bu olmayacak. (Bunun gerçekleşme şansı, aynı gün yıldırım çarpması olasılığından daha düşüktür.

25
D.W.

Linux veya NetBSD kullanıyorsanız Edge vakalarına dikkat edin.

Linux'ta, CSPRNG'yi düzgün bir şekilde tohumlamak için önyüklemeden sonra yeterli entropinin elde edildiğinden emin olmak veya getrandom() sistem çağrısı /dev/urandom 'dan okunmalı ve nadiren yalnızca önyükleme sonrası ilk tohum entropisinin kullanılamamasını engelleyecektir.

NetBSD'de, düzgün bir şekilde tohumlandığından emin olmak için /dev/random 'Dan okumadan önce en az bir kez /dev/urandom' Dan okumak istersiniz.

FreeBSD ve MacOS'ta /dev/random Ve /dev/urandom Arasında bir fark yoktur.

Kısa cevap hala /dev/urandom Kullanmaktır.

Daha fazla ayrıntı için bkz. /dev/random vs/dev/urandom ne zaman kullanılır.

1
Tom Hale