वहाँ एक विकल्प के लिए / dev / urandom है?


21

वहाँ कुछ तेजी से रास्ता है / देव / [यू] यादृच्छिक से? कभी-कभी, मुझे चीजों को करने की आवश्यकता होती है

बिल्ली / देव / उर्जित> / देव / sdb

यादृच्छिक उपकरण "बहुत" सुरक्षित हैं दुर्भाग्य से उसके लिए बहुत धीमी गति से। मुझे पता है कि wipeसुरक्षित विलोपन के लिए समान उपकरण हैं, लेकिन मुझे लगता है कि लिनक्स में कुछ ऑन-बोर्ड साधन भी हैं।


StackOverflow पर समतुल्य: stackoverflow.com/questions/841356/…
डेविड जेड


1
ऐसा करने के लिए एक बेहतर तरीका नहीं है .. संभवतः UUoC पुरस्कार के लिए एक दावेदार?
टॉम ओ'कॉनर

जवाबों:


12

यदि आप हार्ड ड्राइव (या फ़ाइल) के "सिक्योर" मिटने की तलाश कर रहे हैं, तो आपको श्रेड उपयोगिता को देखना चाहिए।

जैसा कि पिछले पोस्टर बताते हैं, / dev / * यादृच्छिक उपकरणों का उपयोग यादृच्छिक डेटा के छोटे विखंडू के स्रोत के रूप में किया जाता है।


1
मैन पेज के अनुसार, 'श्रेड' का उपयोग / देव / उर-आयामी होता है। इसलिए डिस्क को पोंछने के लिए एक अच्छा जवाब है, यह किसी भी अन्य तकनीक पर स्पीडअप की पेशकश नहीं करेगा, जो / dev / urandom से पढ़ने की तकनीक है। (एक अन्य टिप अगर 'श्रेड' का उपयोग कर रहे हैं: ज्यादातर लोग शायद विशाल डिफॉल्ट काउंट के बजाय 1-2 पास के साथ खुश होंगे, ताकि एक पोंछने में दिन न लगे।)
gojomo

4
वास्तव में श्रेड / dev / urandom की तुलना में बहुत तेज है। मेरा अनुमान है कि यह बीज के रूप में / dev / urandom या / dev / random का उपयोग करके अपना स्वयं का छद्म डेटा प्रदान करता है।
thomasrutter

24

दुर्भाग्य से लिनक्स में यूरेनियम का बुरा कार्यान्वयन है। यदि आप अपना CPU AES-NI (हार्डवेयर त्वरण) का समर्थन करते हैं, तो आप यादृच्छिक कुंजी के साथ aes256-ctr का उपयोग कर सकते हैं और प्रति सेकंड कई सौ मेगाबाइट प्राप्त कर सकते हैं। मैं एक आधुनिक दृष्टिकोण के रूप में अच्छी तरह से स्विच करने के लिए आगे देख रहा हूँ।

openssl enc -aes-256-ctr -pass pass:"$(dd if=/dev/urandom bs=128 count=1 2>/dev/null | base64)" -nosalt < /dev/zero > randomfile.bin

यह पिल्ला मेरे बॉक्स पर 1.0 जीबी / एस (14 एमबी / एस / देव / यूरेनियम की तुलना में) करता है। यह एक यादृच्छिक पासवर्ड बनाने के लिए केवल उर-आयामी का उपयोग करता है और फिर उस कुंजी का उपयोग करके / dev / शून्य का बहुत तेज़ एन्क्रिप्शन करता है। यह एक क्रिप्टोग्राफिक रूप से सुरक्षित PRNG होना चाहिए लेकिन मैं इसकी गारंटी नहीं दूंगा।


इस भयानक उत्तर के लिए धन्यवाद, मैं 9.5 एमबी / एस से ऊपर जाने में सक्षम था / खुलने वाले के साथ 120 एमबी / एस से अधिक / देव / यूरेनियम के साथ।
जीडीआर

पहले बयान को छोड़कर कि लिनक्स में यूरेनियम का बुरा कार्यान्वयन है , मैं इस उत्तर को स्वीकार करता हूं। एन्क्रिप्शन से पहले एक हार्ड डिस्क को पोंछने (या भरने?) के लिए अच्छा है।
विक्रांत चौधरी

5
के माध्यम से पारित pvएक अच्छा प्रगति संकेतक के लिए। openssl enc -aes-256-ctr -pass pass:"$(dd if=/dev/urandom bs=128 count=1 2>/dev/null | base64)" -nosalt < /dev/zero | pv -pterb > /dev/sdb
विक्रांत चौधरी

@ विक्रांतचौधरी यूरैंडम उच्च गुणवत्ता वाले छद्म यादृच्छिक संख्याओं का उत्पादन करता है, निश्चित रूप से, लेकिन यह धीमा होने का कोई बहाना नहीं है। एईएस काउंटर मोड बहुत तेज है और यह तर्क करना मुश्किल है कि यह किसी भी तरह से कम सुरक्षित होगा।
पर्सिड्स

1
बस pvसिफारिश में जोड़ने के लिए , आप लेखन को खत्म करने की दिशा में आपको प्रगति दिखाने के pv -pterb -s $(blockdev --getsize64 /dev/sdb) >/sdbलिए पाइप कर सकते हैं pv
आसीफिल

7

T2500 सीपीयू के साथ एक थिंकपैड T60p पर Ubuntu 8.04 के तहत एक त्वरित परीक्षण में, 1GB यादृच्छिक डेटा से openssl rand3-4 गुना तेज था /dev/urandom। अर्थात्,

time cat /dev/urandom | head -c 1000000000 > /dev/null

... लगभग 4 मिनट का समय था ...

time openssl rand 1000000000 | head -c 1000000000 > /dev/null

... बस 1 मिनट से अधिक था।

यादृच्छिक-गुणवत्ता में अंतर होने पर अनिश्चित, लेकिन HD-पोंछने के लिए या तो ठीक है।


5

मुझे यह कहते हुए बहुत सारे उत्तर मिलते हैं कि यादृच्छिक डेटा का उपयोग करना महत्वपूर्ण नहीं है। यह बहुत सच है अगर आप सब करने की कोशिश कर रहे हैं तो ड्राइव को मिटा दें, लेकिन इतना नहीं अगर आप इसे डिस्क एन्क्रिप्शन के साथ तैयार कर रहे हैं।

यदि आप एक उपकरण को गैर-यादृच्छिक डेटा से भरते हैं, तो उस पर एक एन्क्रिप्टेड विभाजन रखें, जो आपको एक समस्या में चला सकता है। ड्राइव का वह हिस्सा जो एन्क्रिप्टेड डेटा को स्टोर कर रहा है, बाकी ड्राइव से बाहर खड़ा हो जाएगा, क्योंकि एन्क्रिप्टेड डेटा यादृच्छिक रूप से दिखेगा और बाकी नहीं होगा। इसका उपयोग क्रिप्टो डिस्क के बारे में जानकारी निर्धारित करने के लिए किया जा सकता है जो इसे क्रैक करने में उपयोग किया जा सकता है। नीचे दिए गए लिंक के पीछे सिद्धांत बताते हैं कि कैसे कुछ अधिक सामान्य हमले काम करते हैं और उनके खिलाफ बचाव कैसे करें (लिनक्स पर, वैसे भी)।

लिनक्स हार्ड डिस्क एन्क्रिप्शन सेटिंग्स


1
बहुत सही। अपेक्षाकृत आधुनिक डिस्क (> 20 जीबी) के साथ कोई भी एकल पास ओवरराइट पर्याप्त है। यहां तक ​​कि एनएसए और पसंद को ड्राइव से किसी भी महत्वपूर्ण मात्रा में डेटा प्राप्त करने के लिए कड़ी मेहनत की जाएगी। और यह बहुत महंगा है। प्रति मेगाबाइट $ 100.000 सोचो। एन्क्रिप्शन के बारे में टिप्पणी बहुत सही है। आप उपयोग किए गए भागों के रूप में डिस्क के अप्रयुक्त भागों को "यादृच्छिक" के रूप में देखना चाहते हैं।
टन डे

क्या आपका डिवाइस एन्क्रिप्शन सॉफ्टवेयर पूरी डिस्क को यादृच्छिक नहीं करता है?
नाथन गारबेडियन 18

5

यदि आपको एचडी को सुरक्षित रूप से पोंछने की आवश्यकता है तो एक उपकरण बहुत शक्तिशाली है: डीबीएएन


5

यदि आप एक विशाल ब्लॉक डिवाइस को मिटाना चाहते हैं, तो मैंने इसे उपयोग करने के लिए अधिक मजबूत पाया है और ddयादृच्छिक डेटा के आउटपुट पुनर्निर्देशन के बजाय डिवाइस मैपर। निम्नलिखित मैप कर देंगे /dev/sdbकरने के लिए /dev/mapper/deviceToBeErasedएन और बीच में transparantly decrypting। एन्क्रिप्ट किए गए अंत पर डिवाइस को भरने के लिए, शून्य को मैपर ( /dev/mapper/deviceToBeErased) के सादे पाठ पक्ष में कॉपी किया जाता है ।

cryptsetup --cipher aes-xts-plain64 --key-file /dev/random --keyfile-size 32 create deviceToBeErased /dev/sdb
dd if=/dev/zero of=/dev/mapper/deviceToBeErased bs=1M

/dev/sdbयदि एईएस में कोई गंभीर कमजोरी नहीं है, तो एन्क्रिप्टेड डेटा को यादृच्छिक डेटा से अप्रभेद्य होने की गारंटी है । उपयोग की जाने वाली कुंजी से पकड़ा गया है /dev/random(चिंता न करें - यह केवल 32 बाइट्स का उपयोग करता है)।


4

फ्रिज की जाँच करें

http://billauer.co.il/frandom.html

मेरे परीक्षण के अनुसार यह सबसे तेज़ है


1
फ़्रैंकैंड को अब क्रिप्टोग्राफिक रूप से सुरक्षित नहीं माना जाना चाहिए, यह देखते हुए कि आरसी 4 का उपयोग किया जाता है। RC4 का उपयोग करते समय TLS पर एक सीमावर्ती व्यावहारिक (!) हमले के उदाहरण के लिए blog.cryptographyengineering.com/2013/03/… देखें ।
परसेंटेज

2

आपका टूल जितना तेज़ होगा परिणाम उतना ही सुरक्षित होगा। अच्छा यादृच्छिकता उत्पन्न करने में समय लगता है।

वैसे भी, आप dd जैसी किसी चीज़ का उपयोग कर सकते हैं अगर = / dev / zero of / / dev / sdb , लेकिन जाहिर है कि यह रैंडम होने वाला नहीं है, यह बहुत तेजी से मिट जाएगा।

एक अन्य विकल्प इस विधि / sbin / badblocks -c 10240 -s -t-random /v / dev / sdb का उपयोग करने के लिए हो सकता है यह तेज़ है तो उर-आयामी है, लेकिन बैडब्लॉक PRNG कम यादृच्छिक है।


1
और ईमानदारी से - यह बहुत सारे ड्राइव के लिए सुरक्षा के
वॉरेन

एकाधिक ओवरराइट्स, जैसा कि श्रेड करता है, समय लेता है और "पूरी तरह से" यादृच्छिक डेटा के एक ओवरराइट से बेहतर सुरक्षा प्रदान करता है।
अगली सूचना तक रोक दिया गया।

"आपका टूल जितना तेज़ होगा उतना कम सुरक्षित परिणाम होगा। अच्छा यादृच्छिकता उत्पन्न करने में समय लगता है।" - यह सच नहीं है। एक एईएस काउंटर मोड (छद्म) यादृच्छिक संख्या जनरेटर कहीं बेहतर विश्लेषण किया गया है और परिमाण के आदेश / डेव / यूरेनियम से तेज है। (क्रोनिक का जवाब देखें।)
पर्सेंस

2

/dev/random बहुत सारे सिस्टम एन्ट्रापी का उपयोग करता है, और इसलिए केवल एक धीमी डेटा स्ट्रीम का उत्पादन करता है।

/dev/urandom कम सुरक्षित, और तेज है, लेकिन यह अभी भी डेटा के छोटे हिस्से की ओर सक्षम है - इसका मतलब उच्च गति यादृच्छिक संख्याओं की एक सतत स्ट्रीम प्रदान करना नहीं है।

आपको अपने स्वयं के डिजाइन का एक PRNG बनाना चाहिए, और इसे किसी चीज़ से /dev/randomया उसके साथ बीज देना चाहिए /dev/urandom। यदि आपको इसे थोड़ा और यादृच्छिक बनाने की आवश्यकता है, तो समय-समय पर इसे बीज दें - प्रत्येक कुछ एमबी (या आपके प्रिंग की लंबाई जो भी हो)। यूरेनियम या यादृच्छिक से 4 बाइट्स (32 बिट मूल्य) प्राप्त करना काफी तेज है कि आप यह हर 1k डेटा कर सकते हैं (प्रत्येक 1k अपने prng को फिर से शुरू करें) और बहुत यादृच्छिक परिणाम प्राप्त करें, जबकि बहुत, बहुत, बहुत जल्दी।

-Adam


7
ऐसा बहुत कम होता है कि कोई अपना रैंडम नंबर जेनरेटर लिख सके जो पहले से उपलब्ध आसानी से बेहतर हो। अधिक बार नहीं, परिणाम एक पूर्वानुमानित पैटर्न और सुरक्षा की झूठी भावना है। मैं एक ड्राइव पर इसके / देव प्रविष्टि या बहुत गहन भौतिक विनाश के माध्यम से श्रेड का उपयोग करने की सलाह दूंगा।
अगली सूचना तक रोक दिया गया।

मैं सहमत हूँ। मैं श्रेड का उपयोग करता हूं, जो डिफ़ॉल्ट रूप से यूरेनियम का उपयोग करता है (जो मुझे स्पष्ट रूप से धीमा नहीं लगता है)। एक नोट के रूप में, यदि आप बहुत धीरज रखते हैं, तो श्रेड के साथ / dev / random का उपयोग करना संभव है (- आयामी-स्रोत = / dev / random) निर्दिष्ट करके।
मैथ्यू फ्लैशेन

2

यदि आप एक हार्ड ड्राइव को जल्दी से पोंछना चाहते हैं, तो इसके लिए गैर-आयामी डेटा लिखें। यह यादृच्छिक डेटा का उपयोग करने से कम सुरक्षित नहीं है। किसी भी तरह से, जब एक कंप्यूटर के लिए झुका मूल डेटा पढ़ा नहीं जा सकता। हार्ड ड्राइव डेटा ओवरराइटिंग: ग्रेट वाइपिंग कॉन्ट्रोवर्सी से पता चलता है कि मूल डेटा को माइक्रोस्कोप का उपयोग करके नहीं पढ़ा जा सकता है।


2

LUKS के साथ प्रारूप, और एन्क्रिप्टेड वॉल्यूम पर dd। फिर LUKS हेडर को पोंछने के लिए / dev / urandom का उपयोग करें।

यदि आपके पास हार्डवेयर एईएस सपोर्ट है तो यह बहुत तेज समाधान है।

संक्षेप में:

cryptsetup luksFormat /dev/sdX
cryptsetup luksOpen /dev/sdX cryptodev
dd if=/dev/zero bs=1M of=/dev/mapper/cryptodev
cryptsetup luksClose cryptodev
# wipe the luks header.  Yes, it uses /dev/urandom but only for 2MB of data:
dd if=/dev/urandom bs=1M count=2 of=/dev/sdX

किया हुआ!

मेरा ब्लॉग देखें: यादृच्छिक बिट्स के बिना एक डिस्क को जल्दी से भरें (बिना / dev / urandom)


आप LUKS से क्यों परेशान हैं अगर आप जो करना चाहते हैं वह डिवाइस को ओवरराइट करना है? प्लेन डीएम-क्रिप्ट (क्रायसिपेटअप का "प्लेन मोड") इसके लिए उपयोग करना बहुत आसान है।
Perseids

2

यदि आप हार्डड्राइव को मिटाना चाहते हैं, तो dd reallocated क्षेत्रों की सामग्री को नहीं हटाता है, और हार्डड्राइव मर रहा है तो बहुत धीमा है। इसके बजाय आप इरेज़ फ़ंक्शन में निर्मित ड्राइव का उपयोग कर सकते हैं, जिसे लंबे समय तक मानकीकृत किया गया है।

इस उदाहरण में, मैं केवल १०२ मिनट में ५०० जीबी मैकेनिकल हार्डड्राइव मिटा रहा हूं। यहां तक ​​कि जब यह वास्तविक क्षेत्रों से भरा होता है:

root@ubuntu:~# hdparm --security-set-pass Eins /dev/sdaj
security_password="Eins"

/dev/sdaj:
 Issuing SECURITY_SET_PASS command, password="Eins", user=user, mode=high
root@ubuntu:~# time hdparm --security-erase-enhanced Eins /dev/sdaj
security_password="Eins"

/dev/sdaj:
 Issuing SECURITY_ERASE command, password="Eins", user=user

real    102m22.395s
user    0m0.001s
sys     0m0.010s

root@ubuntu:~# smartctl --all /dev/sdaj | grep Reallocated
  5 Reallocated_Sector_Ct   0x0033   036   036   036    Pre-fail Always   FAILING_NOW 1327 

आप ata.wiki.kernel.org पर अधिक विवरण देख सकते हैं , हालांकि उनके उदाहरण का उपयोग नहीं करते हैं - सुरक्षितता-मिटाएँ-बढ़ाया, जो पहले उल्लेखित वास्तविक क्षेत्रों को हटाने के लिए आवश्यक है।


1

व्यवहार में एक सतत यादृच्छिक धारा से पूरी डिस्क को बीजने की आवश्यकता नहीं है।

आप यादृच्छिक डेटा का एक मामूली आकार का हिस्सा बना सकते हैं और फिर उस डिस्क पर बार-बार दोहरा सकते हैं।

बस यह सुनिश्चित करें कि डेटा का हिस्सा डिस्क के सामान्य ब्लॉक आकार का एक से अधिक नहीं है, यह सुनिश्चित करने के लिए कि आप डेटा के सहसंबंधित ब्लॉक को ओवरराइट नहीं करते हैं, ठीक उसी तरह के यादृच्छिक डेटा के साथ। ~ 1MB रेंज में एक प्रमुख संख्या है जो एक चंक आकार अच्छी तरह से करना चाहिए।

अतिरिक्त सुरक्षा के लिए, बस हर बार एक अलग चंक आकार का उपयोग करते हुए इसे कुछ गुना अधिक करें।


1

'श्रेड' की उपयोगिता आसान और तेज है। यदि ड्राइव की SMART विशेषताएँ शून्य पुनः आवंटित क्षेत्रों को इंगित करती हैं, तो 'श्रेड' के पर्याप्त रूप से सुरक्षित होने की संभावना है।

हालांकि, यदि ड्राइव में सेक्टर फिर से आवंटित किए गए हैं, तो क्षतिग्रस्त क्षेत्रों के डेटा को ओवरराइट नहीं किया जाएगा। यदि क्षतिग्रस्त स्थानों में फिर से आवंटित होने से पहले संवेदनशील डेटा होता है, तो 'श्रेड' पर्याप्त रूप से अच्छा नहीं हो सकता है। ड्राइव के आवंटन मानचित्र को रीसेट करके और उन्हें (बार-बार) पढ़कर 'खराब' सेक्टरों को पढ़ा जा सकता है।

खराब सेक्टर आवंटन मानचित्र को रीसेट करने की क्षमता निर्माता और ड्राइव मॉडल के आधार पर भिन्न होती है।


0

यदि आप चाहते हैं कि सभी डिस्क को अधिलेखित कर दें, तो इससे कोई फर्क नहीं पड़ता कि आप क्या उपयोग करते हैं क्योंकि कुछ भी सब कुछ फॉरेंसिक लैब से कुछ कम कर देगा और मैं संसाधनों के उस स्तर को रोकने के लिए ड्राइव को स्लैग करने से कम कुछ पर भरोसा नहीं करूंगा। ।

बस सभी शून्य या लोगों की तरह एक गैर यादृच्छिक स्रोत या दोहराए जाने वाले पैटर्न का उपयोग करें (मुझे लगता है कि यह काम करेगा)

(head -c 4096 /dev/urandom; cat /dev/sdb/) > /dev/sdb

यह मामला हो सकता है, लेकिन कभी-कभी आप प्रबंधन को यह नहीं समझा सकते हैं कि एक यादृच्छिक लेखन द्वारा दी गई सुरक्षा वास्तव में किसी भी सभी शून्य का उपयोग करने की तुलना में अधिक नहीं है, क्योंकि डेटा को पुनर्प्राप्त करने के लिए आवश्यक तकनीक का स्तर दोनों परिदृश्यों के लिए समान है। इस मामले में अक्सर अपने खुद के तेज यादृच्छिक संख्या जनरेटर का निर्माण करके आवश्यकता को पूरा करना बेहतर होता है।
एडम डेविस

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.