2010-06-01 15 views
9

मैं यह सत्यापित करना चाहता हूं कि मेरे प्रोग्राम द्वारा बनाई गई टेक्स्ट लॉग फाइलें मेरे ग्राहक की साइट पर चल रही हैं या नहीं। आप कैसे सुझाव देते हैं कि मैं ऐसा करने के लिए जाता हूं? मैंने यहां एक गुच्छा खोजा और Google लेकिन मेरा जवाब नहीं मिला। धन्यवाद!सी ++ में टेक्स्ट फ़ाइल को हस्ताक्षर/प्रमाणित करने का सबसे आसान तरीका?

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

+0

इसमें "gpgpu" टैग क्यों है? जीपीजीपीयू आमतौर पर ग्राफिकल प्रोसेसिंग इकाइयों पर सामान्य प्रयोजन कंप्यूटिंग के लिए खड़ा है। क्या यह एक टाइपो है? –

उत्तर

1

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

बेशक, यदि आप केवल गति में डेटा की रक्षा कर रहे हैं, तो चीजें बहुत आसान हो जाती हैं।

यदि आप निजी कुंजी की रक्षा कर सकते हैं तो डेटा हस्ताक्षर करना आसान है।

एक बार जब आप उच्च-स्तरीय सिद्धांत तैयार करते हैं जो सुरक्षा सुनिश्चित करता है, तो हस्ताक्षर करने के लिए GPGME पर एक नज़र डालें।

+0

क्या मैं बाइनरी में निजी कुंजी एम्बेड कर सकता हूं? मुझे यकीन है कि यह पहले किया गया है और ऐसा करने के लिए एक ज्ञात आसान प्रक्रिया है। मैं इसे Google या यहां नहीं ढूंढ सकता :( – user355008

+0

हेक्स संपादक में बाइनरी को देखकर कुंजी को स्पॉट करना मुश्किल हो सकता है। – egrunin

+1

@ user355008: किसी चीज़ के अंदर एक कुंजी एम्बेड करने में मदद नहीं होगी। अगर आप ऐप कर सकते हैं कुंजी को किसी भी तरह से देखें, फिर उपयोगकर्ता भी कर सकता है। – dreamlax

1

adler-32 या कुछ जैसे एल्गोरिदम का उपयोग करके आप अपनी प्रत्येक फ़ाइल लाइन में एक उपसर्ग के रूप में चेकसम डाल सकते हैं। यदि आप अपनी लॉग फ़ाइलों में बाइनरी कोड नहीं डालना चाहते हैं, तो चेकसम को गैर बाइनरी डेटा में बदलने के लिए एक एन्कोड 64 विधि का उपयोग करें। तो, आप केवल उन रेखाओं को त्याग सकते हैं जो छेड़छाड़ किए गए हैं।

+2

यह हमलावर को चेकसम को पुनः संयोजित करने से कैसे रोक देगा? – WhirlWind

+1

विकी पेज से आपने यह साझा किया है कि "एडलर -32 चेकसम आसानी से जाली जा सकती है और इसलिए असुरक्षित है जानबूझकर संशोधन के खिलाफ सुरक्षा "। इसलिए मुझे नहीं लगता कि यह काम करेगा। धन्यवाद हालांकि – user355008

+2

मुझे सुरक्षा के स्तर की आवश्यकता नहीं है, इसलिए मैंने" एडलर -32 या कुछ की तरह "लिखा था। आप एडलर -32 का भी उपयोग कर सकते हैं , एन्क्रिप्टेड होने के लिए स्ट्रिंग में अपनी कुंजी जोड़कर, एमडी 5 128 बिट्स या शाए 1 हैशिंग विधियां। इसलिए किसी के लिए सही चेकसम का पुनर्मूल्यांकन करना बहुत मुश्किल होगा। –

5

Obligatory preamble: यहां हिस्सेदारी कितनी है? आपको यह मानना ​​चाहिए कि छेड़छाड़ संभव होगी, लेकिन यदि आप पर्याप्त समय और पैसा खर्च करते हैं तो आप इसे बहुत मुश्किल बना सकते हैं। तो: यह आपके लिए कितना लायक है?

कहा:

चूंकि यह आपके कोड फ़ाइल लेखन है, तो आप इसे बाहर एन्क्रिप्टेड लिख सकते हैं। यदि आपको मानव पठनीय होने की आवश्यकता है, तो आप एक दूसरी एन्क्रिप्टेड प्रतिलिपि रख सकते हैं, या दूसरी फ़ाइल जिसमें केवल हैश है, या प्रत्येक प्रविष्टि के लिए हैश मान लिखें। (हैश में निश्चित रूप से "गुप्त" कुंजी होनी चाहिए।) यदि यह बहुत जोखिम भरा है, तो हैश या चेकसम को प्रेषित करने या अन्य सर्वरों पर लॉग इन करने पर विचार करें। इत्यादि।

0

यह आपकी फ़ाइल और आपका प्रोग्राम है जिसे इसे संशोधित करने की अनुमति है। जब यह मामला होता है, तो एक सरल समाधान होता है।

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

तो एक अलग प्रक्रिया पृष्ठभूमि में चल रहा है और फ़ाइल आकार में

  • परिवर्तन फ़ाइल या फ़ोल्डर
  • नाम बदलने के लिए फ़ाइल को नष्ट आदि
  • प्रयास की तरह किसी भी परिवर्तन सूचनाओं के लिए फ़ोल्डर पर नज़र रखता है ...

इस अधिसूचना के आधार पर, आप प्रमाणित कर सकते हैं कि फ़ाइल बदल गई है या नहीं! नीचे दिए गए फ़ोल्डर में नजर रखने के लिए (आप और अन्य लोगों अनुमान लगा जा सकता है के रूप में, यहां तक ​​कि अपने प्रक्रिया & DLLs इन फ़ाइलों कि एक सूचना भी बढ़ सकता है बदल जाएगा। आप इस क्रिया को चालाकी से सिंक्रनाइज़ करने के लिए की जरूरत है। यही है)

विंडो एपीआई :

HANDLE FindFirstChangeNotification(
LPCTSTR lpPathName, 
BOOL bWatchSubtree, 
DWORD dwNotifyFilter 
); 

lpPathName: 
Path to the log directory. 

bWatchSubtree: 
Watch subfolder or not (0 or 1) 

dwNotifyFilter: 
Filter conditions that satisfy a change notification wait. This parameter can be one or more of the following values. 
FILE_NOTIFY_CHANGE_FILE_NAME 
FILE_NOTIFY_CHANGE_DIR_NAME 
FILE_NOTIFY_CHANGE_SIZE 
FILE_NOTIFY_CHANGE_SECURITY 
etc... 
(Check MSDN) 

इसे कैसे काम करें?

संदिग्ध एक: हमारी प्रक्रिया

संदिग्ध एक्स: अन्य प्रक्रिया या उपयोगकर्ता

इंस्पेक्टर: प्रक्रिया है कि हम फ़ोल्डर नजर रखने के लिए बनाया गया है।

इंस्पेक्टर फ़ोल्डर में बदलाव देखता है। के साथ क्वेरीज़ पर शक करें कि क्या उसने इसमें कोई बदलाव किया है।

यदि हां, तो

change is taken as VALID. 

नहीं करता है, तो

clear indication that change is done by *Suspect X*. So NOT VALID! 
File is certified to be TAMPERED. 

उसके अलावा, नीचे तकनीक है कि हो सकता है में से कुछ हैं (या नहीं :) सकता है) आपकी मदद!

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

  2. फ़ाइल विशेषाधिकार को पढ़ने के लिए केवल पर लॉग इन करने के बाद बदलें। कुछ कार्यक्रमों में या कोई इसे छेड़छाड़ करना चाहता है, वे केवल पढ़ने योग्य संपत्ति को बदलने का प्रयास करते हैं। यह क्रिया फ़ाइल के लिए संशोधित दिनांक/समय को बदलती है।

  3. अपनी लॉग फ़ाइल को केवल एन्क्रिप्टेड डेटा लिखें। अगर कोई डेटा को डिक्रिप्ट करता है, तो हम कुछ पाठ को ठीक से डिक्रिप्ट नहीं कर सकते हैं।

  4. सेक और अन-संपीड़ित तंत्र (सेक मदद मिल सकती है आप एक पासवर्ड का उपयोग फ़ाइल की रक्षा के लिए) प्रत्येक रास्ता अपने आप ही पक्ष-विपक्ष में हो सकता है

का उपयोग करना। अपनी जरूरत के आधार पर तर्क को मजबूत करें। आप प्रस्तावित तकनीकों के संयोजन का भी प्रयास कर सकते हैं।

+1

बिंदु 1 और बिंदु 2 के लिए: फ़ाइल के संशोधन समय को सेट करना आसान है, और इसकी लंबाई को बदलने के बिना फ़ाइल की सामग्री को बदलना आसान है। बिंदु 3 और बिंदु 4 के लिए: आपको यह समझना होगा कि यदि आपका एप्लिकेशन इन कार्यों को निष्पादित कर सकता है, तो कोई उपयोगकर्ता भी कर सकता है (केवल एप्लिकेशन की नकल करके)। – dreamlax

+0

@dreamlax: उन सभी बिंदुओं को केवल लक्षित उपयोगकर्ताओं को कुछ अंतर्दृष्टि प्रदान करने के लिए प्रदान किया गया। मुझे पता है कि इसमें लूप छेद हैं। प्राथमिक फोकस उन मूर्खों के ऊपर प्रदान की गई डेटा पर है (यदि आप इसे इस तरह देखते हैं) अंक! – AKN

1

यह वास्तव में इस बात पर निर्भर करता है कि आप क्या हासिल करने की कोशिश कर रहे हैं, दांव पर क्या है और बाधाएं क्या हैं।

मूल रूप से: जो आप पूछ रहे हैं वह केवल सादा असंभव है (अलगाव में)।

अब, यह फ़ाइल को संशोधित करने की कोशिश कर रहे व्यक्तियों के जीवन को जटिल बनाने का विषय है ताकि संशोधित करके कमाई की तुलना में इसे संशोधित करने के लिए उन्हें और अधिक खर्च आए। बेशक इसका मतलब है कि सुरक्षा के अपने उपायों में क्रैकिंग के एकमात्र लक्ष्य से प्रेरित हैकर्स को इतना नहीं रोका जाएगा ...

मान लीजिए कि इसे एक स्टैंडअलोन कंप्यूटर (कोई नेटवर्क नहीं) पर काम करना चाहिए, जैसा कि मैंने कहा था असंभव है। जो भी प्रक्रिया आप उपयोग करते हैं, जो भी कुंजी/एल्गोरिदम है, यह अंततः बाइनरी में एम्बेडेड है, जो कि हैकर की जांच के संपर्क में है। इसे डिसेबल करना संभव है, हेक्स-पाठकों के साथ इसकी जांच करना संभव है, विभिन्न इनपुट के साथ जांच करना, डीबगर आदि में प्लग करना संभव है ... आपका एकमात्र विकल्प तर्क को तोड़कर एक दर्द को डिबगिंग/परीक्षा देना है , पथ बदलने के लिए डीबग पहचान का उपयोग करके, और यदि आप स्वयं-संशोधित कोड का उपयोग करके बहुत अच्छे हैं। इसका मतलब यह नहीं है कि प्रक्रिया के साथ छेड़छाड़ करना असंभव हो जाएगा, इसका मतलब यह नहीं है कि यह इतना मुश्किल हो जाना चाहिए कि कोई भी हमलावर त्याग देगा।

यदि आपके पास अपने निपटान में नेटवर्क है, तो आप एक दूर (अपने नियंत्रण में) ड्राइव पर हैश स्टोर कर सकते हैं और फिर हैश की तुलना कर सकते हैं। यहां 2 कठिनाइयों:

  • भंडारण (? कैसे सुनिश्चित करने के लिए इसे अपने द्विआधारी है)
  • पुन: प्राप्त (कैसे सुनिश्चित करने के लिए आप सही सर्वर से बात कर रहे हैं?)

और बेशक, दोनों में मामलों, मध्य सिंड्रोम्स में आदमी से सावधान रहें ...

सलाह की एक आखिरी बात: यदि आपको सुरक्षा की आवश्यकता है, तो आपको एक असली विशेषज्ञ से परामर्श करने की आवश्यकता होगी, कुछ अजीब लोगों (जैसे खुद) पर भरोसा न करें एक मंच पर बात कर रहे हैं। हम शौकिया हैं।