USB ड्राइव का उपयोग करके एन्क्रिप्ट किए गए TrueCrypt कंटेनरों को कनेक्ट करना

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

मेरे काम की बारीकियों के कारण, मुझे एक एन्क्रिप्टेड कंटेनर का उपयोग करना होगा, इन उद्देश्यों के लिए मैंने सभी के लिए ट्रू क्रिप्ट नामक एक लंबे समय से ज्ञात टूल को चुना है।

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

विभिन्न टोकन / रुटोकेंस को ध्यान में नहीं रखा गया था, कंटेनर को एक संलग्न यूएसबी ड्राइव का उपयोग करके कनेक्ट करने का निर्णय लिया गया था जो एक महत्वपूर्ण फ़ाइल के रूप में कार्य करेगा।

आखिरकार क्या होना था:

1. बेशक, इस सब के लिए सॉफ्टवेयर विकास।
2. प्रोग्राम हमेशा रैम में होना चाहिए और एक वैध यूएसबी ड्राइव के लिए यूएसबी डिवाइस की जांच करें।
3. एक मान्य USB ड्राइव अग्रिम में एक एन्क्रिप्टेड कंटेनर से बंधा हुआ है।
4. यदि संलग्न यूएसबी ड्राइव को वैध माना जाता है, तो आगे के प्रश्नों के बिना, आदि। एक एन्क्रिप्टेड कंटेनर जुड़ा हुआ है।
5. यदि आप संलग्न यूएसबी ड्राइव को हटाते हैं, तो एन्क्रिप्टेड कंटेनर काट दिया जाता है।

इस समस्या को हल करने के लिए, AutoIT प्रोग्रामिंग भाषा को चुना गया था।

यह सब क्या हुआ:

यह उम्मीद के मुताबिक निकला। चलो बिंदु से बात करते हैं:

1. हम अपनी आवश्यकताओं के लिए विन्यासक को कॉन्फ़िगर करते हैं:

$flash = "E:" ; USB ,
$passwd = "Pa$$w0rd" ;
$path = "c:\windows\storage.tc" ;
$mount = "R:" ;
$key = "0x1234Af3d21" ; , . , .


विन्यासकर्ता का स्रोत कोड।

#include <md5.au3> ; md5
#include <string.au3> ;

AutoItSetOption ("TrayIconHide", 1 ) ;
AutoItSetOption ("TrayIconDebug", 1 ) ;

$flash = "E:" ;
$passwd = "Pa$$w0rd" ; TrueCrypt
$path = "c:\windows\storage.tc" ;
$mount = "R:" ;
$key = "0x1234Af3d21" ;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; RC4
; MD5+RC4

$a = _StringEncrypt(1, md5(DriveGetSerial( $flash )),$key,2)
$b = _StringEncrypt(1, $passwd,$key,2)
$c = _StringEncrypt(1, $mount,$key,2)
$d = _StringEncrypt(1, $flash,$key,2)
$e = _StringEncrypt(1, $path,$key,2)

RegWrite("HKCU\Software\USBToken", "Serial", "REG_SZ", $a)
RegWrite("HKCU\Software\USBToken", "Master", "REG_SZ", $b)
RegWrite("HKCU\Software\USBToken", "Mount", "REG_SZ", $c)
RegWrite("HKCU\Software\USBToken", "Flash", "REG_SZ", $d)
RegWrite("HKCU\Software\USBToken", "Path", "REG_SZ", $e)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; C -
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
$file = FileOpen("master.key", 2)
FileWrite ($file, _StringEncrypt(1,$a & $b & $c & $d & $e & @ComputerName & @UserName, $key,2))
FileClose($file)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


2. हम इस व्यवसाय को शुरू करते हैं, विन्यासकर्ता एन्क्रिप्टेड रूप में रजिस्ट्री शाखा HKCU \ Software \ USBToken (prying आँखों से) में आवश्यक मान लिखता है, दर्ज किए गए डेटा के आधार पर, एक महत्वपूर्ण फ़ाइल विन्यासकर्ता के साथ फ़ोल्डर में बनाई जाती है। इस कुंजी फ़ाइल (मास्टर.की) के साथ हम एक नया (या पुराने) कंटेनर + पासवर्ड को कॉन्फ़िगर करते हैं, हमारे मामले में यह पैरामीटर $ पासवार्ड है, जिसका मूल्य (पा $ $ w0rd) है।

छवि

छवि

3. अंत में, हमें एक कंटेनर मिलना चाहिए जो पासवर्ड दर्ज करते समय कनेक्ट हो जाएगा $ $ $ w0rd + जो कि हमारे विन्यासकर्ता द्वारा बनाई गई महत्वपूर्ण फ़ाइल को दर्शाता है। सभी जोड़तोड़ के बाद, कुंजी फ़ाइल को हटा दें। फिर हम मुख्य कार्यक्रम के लिए बैटन पास करते हैं।
4. मुख्य कार्यक्रम लगातार रैम में है, हर 5 सेकंड में यह कनेक्टेड यूएसबी डिवाइस की जांच करता है, अगर एक वैध यूएसबी ड्राइव जुड़ा हुआ है, तो प्रोग्राम उपयोगकर्ता के अस्थायी फ़ोल्डर में एक महत्वपूर्ण फ़ाइल उत्पन्न करता है, एक एन्क्रिप्टेड कंटेनर को जोड़ता है, कुंजी फ़ाइल को हटाता है।
5. एक मान्य यूएसबी ड्राइव को हटाने पर, एन्क्रिप्टेड कंटेनर काट दिया जाता है।

मुख्य प्रोग्राम कॉन्फ़िगर करें:

$key = "0x1234Af3d21" ; , -
$truecrypt = "C:\Program Files\TrueCrypt\TrueCrypt.exe" ; TrueCryp
$key = "0x1234Af3d21" ; , -
$truecrypt = "C:\Program Files\TrueCrypt\TrueCrypt.exe" ; TrueCryp
टी के $key = "0x1234Af3d21" ; , -
$truecrypt = "C:\Program Files\TrueCrypt\TrueCrypt.exe" ; TrueCryp


मुख्य कार्यक्रम का स्रोत कोड।

#include <md5.au3> ; md5
#include <constants.au3>
#include <string.au3>

If WinExists(@ScriptName) Then Exit ;
AutoItWinSetTitle(@ScriptName)

AutoItSetOption ("TrayIconHide", 1 ) ;
AutoItSetOption ("TrayIconDebug", 1 )

$key = "0x1234Af3d21" ; , -
$truecrypt = "C:\Program Files\TrueCrypt\TrueCrypt.exe" ; TrueCrypt

$drive = BinaryToString(_StringEncrypt(0,RegRead("HKCU\Software\USBToken","Flash"),$key,2))
$serial = _StringEncrypt(0,RegRead("HKCU\Software\USBToken","Serial"),$key,2)
$passwd = BinaryToString(_StringEncrypt(0,RegRead("HKCU\Software\USBToken","Master"),$key,2))
$path = BinaryToString(_StringEncrypt(0,RegRead("HKCU\Software\USBToken","Path"),$key,2))
$mount = _StringEncrypt(0,RegRead("HKCU\Software\USBToken","Mount"),$key,2)

While 1

if DriveStatus($drive) <> "READY" OR md5(DriveGetSerial($drive)) <> $serial AND DriveStatus($mount) = "READY" then
Run($truecrypt & ' /f /q /d ' & $mount)
endif

if DriveStatus($drive) = "READY" AND md5(DriveGetSerial($drive)) = $serial AND DriveStatus($mount) <> "READY" then

$file = FileOpen(@TempDir & "\master.key", 2)
FileWrite ($file, _StringEncrypt(1,RegRead("HKCU\Software\USBToken","Serial") & RegRead("HKCU\Software\USBToken","Master") & RegRead("HKCU\Software\USBToken","Mount") & RegRead("HKCU\Software\USBToken","Flash") & RegRead("HKCU\Software\USBToken","Path") & @ComputerName & @UserName, $key,2))
FileClose($file)
Run($truecrypt & ' /a /q /s /b /v ' & $path & " /l " & $mount & " /k " & @TempDir & "\master.key" & " /p " & $passwd)
Sleep(2000)
FileDelete(@TempDir & "\master.key")

else
endif
Sleep(5000)
WEnd


निष्कर्ष:

1. USB ड्राइव की वैधता USB ड्राइव के सीरियल नंबर के हैश द्वारा सत्यापित है।
2. रजिस्ट्री में सभी डेटा RC4 एल्गोरिदम का उपयोग करके आपकी कुंजी का उपयोग करके एन्क्रिप्ट किया गया है।
3. कुंजी फ़ाइल केवल प्रोग्राम में ही संग्रहीत की जाती है और संलग्न यूएसबी ड्राइव से जुड़े होने के बाद ही उत्पन्न होती है, जिसके बाद इसे तुरंत हटा दिया जाता है।
4. एक मान्य USB ड्राइव निकालते समय, एन्क्रिप्टेड कंटेनर / बल विकल्प के साथ अक्षम हो जाता है।
5. कोई अतिरिक्त खिड़कियां और प्रश्न नहीं, सब कुछ पारदर्शी है।

विधि निश्चित रूप से अभिनव नहीं है, लेकिन यह जीवन का अधिकार है। मैंने सार्वभौमिकता और एक इंस्टॉलर के लिए प्रयास नहीं किया। इस तरह के कट्टरपंथी तरीकों से इस मुद्दे को हल करना उन लोगों के लिए उपयुक्त नहीं होगा जो दरवाजे पर दस्तक देने से शुरुआत करते हैं, लेकिन आम रोजमर्रा के उपयोगकर्ताओं के लिए काफी स्वीकार्य हैं। जिन्हें भी इसकी आवश्यकता है, वे आसानी से अपने लिए कार्यक्रम को जोड़ सकते हैं, जोड़ सकते हैं, अगर वांछित, ऑटोलॉड और वे सब कुछ जो वे पसंद करते हैं। XP और Win7 पर प्रदर्शन का परीक्षण किया गया था। वह सब जो मैं हासिल करना चाहता था, मैंने हासिल किया।

जहां प्लसस होते हैं, वहां नुकसान भी होते हैं। और यह रजिस्ट्री में डेटा भंडारण है (एन्क्रिप्टेड रूप में यद्यपि), कुंजी फ़ाइल हार्ड ड्राइव पर प्रोग्राम द्वारा बनाई गई है और फिर हटा दी गई है। चेहरे पर तथ्य।

इसलिए इस अवसर पर मैं एक टिप्पणी roman_pro उद्धृत करना चाहता हूं
गलती # 1: RC4 स्ट्रीम एल्गोरिदम का उपयोग एक ही कुंजी के साथ कई बार किया जाता है। अगर किसी को पता नहीं है - एक संक्षिप्त शैक्षिक कार्यक्रम - RC4 कुंजी के आधार पर एक छद्म यादृच्छिक गामा उत्पन्न करता है, जो तब XOR का उपयोग करके एन्क्रिप्ट किए गए डेटा पर आरोपित होता है। डिक्रिप्शन समान है। यदि अलग-अलग डेटा के लिए एक ही कुंजी का दो बार उपयोग किया जाता है, तो हम एन्क्रिप्ट किए गए डेटा पर एक XOR ऑपरेशन करते हैं, हमें एक स्ट्रीम मिलेगी जिसमें डेटा XOR का एक दूसरे के साथ बिना किसी प्रभाव के आदान-प्रदान होता है। यदि, किसी भी कारण से, हम खुले डेटा और इसके एन्क्रिप्टेड संस्करण से अवगत हैं, तो गामा की गणना करना आसान है और फिर इसका उपयोग बाकी डेटा को डिक्रिप्ट करने के लिए किया जाता है। हमारे मामले में अनुमानित डेटा माउंट, फ्लैश और पथ है। इसके अलावा, यदि पथ मास्टर से अधिक लंबा हो गया (यानी, पासवर्ड कंटेनर से पथ से छोटा है), तो पथ से निकाले गए गामा का उपयोग करके, मास्टर को डिक्रिप्ट करना संभव होगा। निष्कर्ष: 1 से अधिक बार एक ही कुंजी के साथ RC4 का उपयोग न करें।

गलती # 2: एक फ्लैश ड्राइव के सीरियल नंबर से बांधना वास्तव में वॉल्यूम के सीरियल नंबर के लिए एक बंधन है। यह AutoIt के लिए प्रलेखन में स्पष्ट रूप से कहा गया है और यह एक आम गलत धारणा है। डिवाइस के सीरियल नंबर को इसमें तार दिया गया है, यह स्वरूपण के दौरान नहीं बदलता है। फॉर्मेटिंग के दौरान वॉल्यूम सीरियल नंबर बदल जाता है और आसानी से छेड़छाड़ की जा सकती है। निष्कर्ष: आपको लोहे की क्रम संख्या प्राप्त करने की आवश्यकता है, न कि आयतन की। यदि आप वॉल्यूम की क्रम संख्या में परिवर्तन के कारण USB फ्लैश ड्राइव को प्रारूपित करते हैं, तो आपका तरीका कंटेनर तक पहुंच के नुकसान से भरा हुआ है। हालांकि, सब कुछ इतना डरावना नहीं है, अगला पैराग्राफ देखें।

गलती # 3: वास्तव में वॉल्यूम के सीरियल नंबर के लिए कोई बाध्यकारी नहीं है, सीरियल नंबर से md5 की एक तुच्छ तुलना है जो पहले रजिस्ट्री में सहेजी गई थी, लेकिन गलत सीरियल नंबर सही कुंजी को उत्पन्न करने में हस्तक्षेप नहीं करता है - कुंजी उत्पन्न करने के लिए सभी डेटा रजिस्ट्री से लिया जाता है। यह तुलना को पैच करने के लिए पर्याप्त है और प्रोग्राम एक कुंजी फ्लैश ड्राइव के बिना भी सही कुंजी को मुहर देगा। निष्कर्ष: फ्लैश ड्राइव से पढ़ा गया सीरियल नंबर सीधे सही कुंजी की पीढ़ी में भाग लेना चाहिए, और रजिस्ट्री से पहले से सहेजी गई प्रतिलिपि नहीं।

त्रुटि संख्या 4: कुंजी को एक अस्थायी फ़ोल्डर में डिस्क में फ्लश किया जाता है, फिर हटा दिया जाता है। यह वर्तमान उपयोगकर्ता और हमारी कुंजी से% TEMP% फ़ोल्डर के लिए हटाने के अधिकार का चयन करने के लिए पर्याप्त है। हटाई गई फ़ाइलों की वसूली के बारे में - मैं चुप हूं। जब "कुंजी फ्लैश ड्राइव" होती है, तो मैं हार्ड ड्राइव पर कुंजी को डंप करने की इच्छा को नहीं समझता। इस पर कुंजी संग्रहीत करना अधिक तर्कसंगत है, लेकिन कंप्यूटर की डिस्क पर कुंजी का कोई निशान नहीं होगा। हालांकि, गुरु मास्टर हैं, जैसा कि वे कहते हैं।

कुल मिलाकर, संक्षेप में - यह विषय एक सुंदर कहानी है कि कली को अपने हाथों से कैसे सुरक्षित किया जाए, इसे शास्त्रीय अस्पष्टता के साथ बदल दिया जाए। इस मामले में TrueCrypt क्यों स्पष्ट नहीं है। कंटेनर खोलने के लिए लगभग सभी डेटा रजिस्ट्री और चल रहे कार्यक्रम में है, एक फ्लैश ड्राइव क्लासिक के लिए एक सुंदर खिलौने से ज्यादा कुछ नहीं है अगर (पासवर्ड == "mycoolpassword") की जांच करता है।

कार्यक्रम को ऑटिट में लिखा गया था, तीसरे पक्ष के पुस्तकालय md5.au3 का उपयोग किया गया था, जिसे प्रोग्राम फ़ाइलें \ Autoit3 \ फ़ोल्डर में शामिल किया जाना चाहिए (आप इसे यहां डाउनलोड कर सकते हैं )। आपका ध्यान देने के लिए आप सभी का धन्यवाद! ऑल द बेस्ट!

Source: https://habr.com/ru/post/In126751/


All Articles