/dev/random
एन्ट्रापी पूल में जोड़ने के लिए कर्नेल इंटरुप के समय का उपयोग करता है। पूल में एन्ट्रापी की मात्रा को नामांकित चर में ट्रैक किया जाता है entropy_count
।
यहाँ से कोड का प्रासंगिक स्निपेट दिया गया है random.c
। यह चर में पिछले दो अंतरालों और डेल्टास में अंतर के रूप में (मुझे लगता है कि समय में) का प्रतिनिधित्व delta
करता है delta2
।
delta = time - state->last_time;
state->last_time = time;
delta2 = delta - state->last_delta;
state->last_delta = delta;
if (delta < 0) delta = -delta;
if (delta2 < 0) delta2 = -delta2;
delta = MIN(delta, delta2) >> 1;
for (nbits = 0; delta; nbits++)
delta >>= 1;
r->entropy_count += nbits;
/* Prevent overflow */
if (r->entropy_count > POOLBITS)
r->entropy_count = POOLBITS;
ऐसा लगता है कि जोड़ा गया एंट्रोपी का अनुमान अनिवार्य रूप से डेल्टा (बेस के प्रारंभिक बिटशिफ्ट के कारण लूप से पहले नहीं) है, जो डेल्टा के आधार 2 लघुगणक का है। यह कुछ सहज ज्ञान युक्त समझ में आता है, हालांकि मुझे यकीन नहीं है कि औपचारिक रूप से इसे सही बनाने के लिए किन धारणाओं की आवश्यकता होगी।
तो, मेरा पहला सवाल है "इस अनुमान के पीछे तर्क क्या है?"
मेरा दूसरा सवाल है delta = MIN(delta, delta2) ...
। यह क्या करता है? इस डेल्टा का न्यूनतम और अंतिम एक क्यों लें? मुझे नहीं पता कि यह क्या हासिल करना है - शायद यह अनुमान को बेहतर बनाता है, शायद अधिक रूढ़िवादी।
संपादित करें: मैंने एक पेपर पाया है जो अनुमान को निर्दिष्ट करता है , लेकिन यह वास्तव में इसके लिए एक तर्कपूर्ण तर्क नहीं देता है (हालांकि यह कुछ अनौपचारिक स्थितियों को रेखांकित करता है जो अनुमानक को मिलना चाहिए)।
अन्य संसाधन जो टिप्पणियों में आए हैं:
- विकिपीडिया पर
/dev/random
और/dev/urandom
- एक पेपर जो इसे समझाने की कोशिश करता है (मुझे इसके बारे में संदेह है, टिप्पणियाँ देखें)
/dev/random
ऊपर दिए गए कोड को लिखने वाले व्यक्ति की टिप्पणियों के साथ एक ब्लॉग पोस्ट ।/dev/random
Entropy पूल के बारे में एक secutity.SE जवाब ।
/dev/random
एक अस्थिर नींव पर है - फीडिंग / देव / यादृच्छिक एंट्रॉपी पूल देखें? । मैंने थॉमस को इस उम्मीद में पिंग किया है कि वह आपके सवाल का जवाब देंगे।