Web3 स्मार्ट अनुबंध सुरक्षा के लिए परीक्षण और औपचारिक सत्यापन

Web3 स्मार्ट अनुबंध सुरक्षा के लिए परीक्षण और औपचारिक सत्यापन

Testing and Formal Verification for Web3 Smart Contract Security PlatoBlockchain Data Intelligence. Vertical Search. Ai.

समय पढ़ें: 9 मिनट

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

1. सुरक्षा की हमेशा जरूरत होती है।

आप निश्चित रूप से दरवाजे को दो या तीन बार बंद कर सकते हैं, इससे कोई फर्क नहीं पड़ता। क्या आप सुनिश्चित हो सकते हैं कि आपके जाते समय आपके घर को नहीं लूटा जा सकता है? आप नहीं कर सकते क्योंकि आप नहीं जानते कि डाकू घर में घुसने के लिए क्या कर सकता है—यही बात हमारे हर सुरक्षा उपाय के लिए भी लागू होती है। कोई पूरी तरह से सुरक्षित तरीका नहीं है जो सुरक्षा की गारंटी देगा। फिर भी, जो कार्रवाई हम तेजी से करते हैं, वह हमारे सुरक्षित होने की संभावना को बढ़ाती है, जो कि खेल है। हम अलग-अलग उपाय अपनाकर सुरक्षित होने की संभावनाओं को बढ़ाना चाहते हैं।

Web3 की दुनिया अलग नहीं है। अपने आप को बचाने के लिए कोई सुरक्षित तरीका नहीं है, लेकिन QuillAudits के अनुभवी लेखा परीक्षकों के होने से आपके प्रोटोकॉल के जबरदस्त रूप से सुरक्षित होने की संभावना बढ़ सकती है और यह आपकी अप-टू-डेट सुरक्षा सुनिश्चित करेगा। वेब3 में, दो महत्वपूर्ण तंत्र हैं जो आपको यह समझने में मदद करते हैं कि आप अपने प्रोटोकॉल पर कुछ परीक्षण करके कितने सुरक्षित हैं:-

  1. स्मार्ट अनुबंध परीक्षण
  2. स्मार्ट अनुबंधों का औपचारिक सत्यापन

आइए उन्हें विस्तार से समझें और सीखें कि कैसे वे हमारे अनुबंधों की कमजोरियों या कमजोरियों को जानने में हमारी मदद करते हैं।

2. स्मार्ट अनुबंध परीक्षण

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

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

2.1 स्वचालित

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

2.1.1. कार्यात्मक परीक्षण

मान लीजिए कि आप दो नंबर, a और b लेने के लिए एक प्रोग्राम लिखते हैं और फिर दोनों नंबरों का जोड़ लौटाते हैं। तो उस प्रोग्राम को चेक करने के लिए, आप 2 और 8 देते हैं और अपेक्षित परिणाम 10 फीड करते हैं। अब जब प्रोग्राम चलता है, तो उसे 10 भी वापस करना चाहिए। यदि यह करता है, तो यह ठीक काम करता है, और हमारा कोड सही है, लेकिन अगर यह नहीं है, तो हमारे कोड में कुछ त्रुटि है। 

कार्यात्मक परीक्षण के लिए यह समझना आवश्यक है कि आपके अनुबंध को कुछ स्थितियों में कैसे व्यवहार करना चाहिए। हम चयनित मानों के साथ गणना चलाकर और लौटाए गए आउटपुट की तुलना करके इसका परीक्षण कर सकते हैं। कार्यात्मक परीक्षण के तीन वर्ग हैं: -

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

2.1.2. स्थैतिक विश्लेषण

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

2.1.3। गतिशील विश्लेषण

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

2.2 मैनुअल

जैसा कि नाम से पता चलता है, स्मार्ट कॉन्ट्रैक्ट टेस्टिंग के इस तरीके में मानव डेवलपर के साथ नियमित बातचीत शामिल है। कोड ऑडिट, जहां डेवलपर्स कोड की लाइनों से गुजरते हैं, स्मार्ट अनुबंध परीक्षण के मैनुअल मोड के अंतर्गत आते हैं।

मैनुअल मोड में काफी समय, कौशल, धन और प्रयास की आवश्यकता होती है। फिर भी, परिणाम अक्सर इसके लायक होते हैं, क्योंकि इसके साथ, हम उन कमजोरियों की पहचान करते हैं जो स्वचालित परीक्षण में किसी का ध्यान नहीं जा सकता है। मैन्युअल परीक्षण के दो आवश्यक प्रकार हैं:-

2.2.1 कोड ऑडिट:- 

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

 जी हां, मैं QuillAudits की बात कर रहा हूं। हम कुशल लेखा परीक्षकों की एक टीम हैं जो आपका मार्गदर्शन कर सकते हैं। स्रोत कोड में सभी संभावित कमजोरियों को खोजने के लिए कोड ऑडिट के लिए हमलावर मानसिकता की आवश्यकता होती है। एक कोड ऑडिट संभावित कमजोरियों और खामियों को उजागर करने के लिए एक स्मार्ट अनुबंध के कोड का विस्तृत मूल्यांकन है।

2.2.2 बग बाउंटी:-

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

3. स्मार्ट अनुबंधों का औपचारिक सत्यापन

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

3.1 औपचारिक विनिर्देश क्या है?

स्मार्ट अनुबंधों के संदर्भ में, औपचारिक विनिर्देश उन संपत्तियों को संदर्भित करते हैं जिन्हें हर संभव परिस्थिति में समान रहना चाहिए। ये "अपरिवर्तनीय" गुण हैं क्योंकि वे अनुबंध के निष्पादन के बारे में तार्किक अभिकथनों को बदल नहीं सकते हैं और उनका प्रतिनिधित्व नहीं कर सकते हैं।

औपचारिक विनिर्देश औपचारिक भाषा में लिखे गए बयानों का एक संग्रह है। विनिर्देश विभिन्न संपत्तियों को कवर करते हैं और वर्णन करते हैं कि अनुबंध के गुणों को अन्य परिस्थितियों में कैसे व्यवहार करना चाहिए। औपचारिक विनिर्देश महत्वपूर्ण हैं क्योंकि यदि अनुबंध निष्पादन के दौरान अपरिवर्तनीय चर या गुणों में परिवर्तन करने में विफल रहता है, तो इससे संपत्ति का संभावित शोषण हो सकता है, जिससे भारी नुकसान हो सकता है।

यह निर्धारित करने में हमारी मदद कर सकता है कि स्मार्ट अनुबंध विनिर्देशों को पूरा करता है या अप्रत्याशित व्यवहार करता है। औपचारिक सत्यापन के तीन घटक होते हैं: एक विनिर्देश, एक मॉडल और एक सत्यापन इंजन।

3.1.1 विशिष्टता

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

// Specification: Adds two numbers
// Inputs: a, b (uint)
// Outputs: the sum of a and b (uint) function add(uint a, uint b) public view returns (uint) {
// Implementation details are not relevant to the specification
// …
}

3.1.2 मॉडल

एक मॉडल औपचारिक रूप से स्मार्ट अनुबंध का प्रतिनिधित्व करता है जिसका उपयोग उसके व्यवहार के कारण के लिए किया जा सकता है। सॉलिडिटी प्रोग्रामिंग भाषा स्मार्ट कॉन्ट्रैक्ट्स के लिए एक लोकप्रिय मॉडल है। ऊपर वर्णित ऐड फ़ंक्शन के लिए एक उदाहरण मॉडल यहां दिया गया है:

// Model: Adds two numbers
// Inputs: a, b (uint)
// Outputs: the sum of a and b (uint) function add(uint a, uint b) public view returns (uint) {
return a + b;
}

3.1.3 सत्यापन इंजन

एक सत्यापन इंजन एक उपकरण है जो एक मॉडल का विश्लेषण कर सकता है और किसी दिए गए विनिर्देश के संबंध में इसकी शुद्धता को सत्यापित कर सकता है। स्मार्ट अनुबंधों के लिए कई सत्यापन इंजन उपलब्ध हैं, जिनमें शामिल हैं:

मिथिल: एक ओपन-सोर्स प्रतीकात्मक निष्पादन उपकरण जो सॉलिडिटी स्मार्ट कॉन्ट्रैक्ट्स में सुरक्षा कमजोरियों की एक विस्तृत श्रृंखला का पता लगा सकता है।

रीमिक्स आईडीई: एक एकीकृत विकास वातावरण जिसमें एक औपचारिक सत्यापन उपकरण शामिल है जो स्मार्ट अनुबंधों की शुद्धता को सत्यापित कर सकता है।

सर्टोरा प्रोवर: एक वाणिज्यिक उपकरण जो स्वचालित गणितीय तर्क का उपयोग करके स्मार्ट अनुबंधों की शुद्धता को सत्यापित कर सकता है। यहां एक उदाहरण दिया गया है कि Certora Prover का उपयोग करके स्मार्ट अनुबंध की शुद्धता को सत्यापित करने के लिए औपचारिक सत्यापन का उपयोग कैसे किया जा सकता है:

pragma solidity 0.7.6; // Model: Adds two numbers
// Inputs: a, b (uint)
// Outputs: the sum of a and b (uint)
function add(uint a, uint b) public pure returns (uint) {
return a + b;
} // Model: Adds two numbers
// Inputs: a, b (uint)
// Outputs: the sum of a and b (uint) function add(uint a, uint b) public pure returns (uint) {
return a + b;
} // Specification: Adds two numbers
// Inputs: a, b (uint)
// Outputs: the sum of a and b (uint) function test_add(uint a, uint b) public pure returns (bool) {
uint expected = a + b;
uint actual = add(a, b);
return expected == actual;
} // Verification: Verify the correctness of the add function contract TestAdd {
function test_add(uint a, uint b) public view returns (bool) {
return CertoraProver.verify(test_add, a, b);
}
}

उपरोक्त उदाहरण में, हम एक सॉलिडिटी स्मार्ट कॉन्ट्रैक्ट को परिभाषित करते हैं जिसमें ऐड फ़ंक्शन का एक मॉडल, फ़ंक्शन के लिए एक विनिर्देश और एक सत्यापन इंजन (Certora Prover) शामिल है जो फ़ंक्शन की शुद्धता को सत्यापित कर सकता है। हम एक परीक्षण फ़ंक्शन (test_add) को भी परिभाषित करते हैं जिसका उपयोग फ़ंक्शन की शुद्धता को सत्यापित करने के लिए किया जा सकता है।

3.2 परीक्षण वी.एस. औपचारिक सत्यापन

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

3.3 औपचारिक सत्यापन के लिए तकनीकें

औपचारिक सत्यापन में बढ़ाने के लिए तकनीकों का व्यापक दायरा है स्मार्ट अनुबंध सुरक्षा. ब्लॉग के इस भाग में, हम अलग-अलग कुछ का पता लगाएंगे।

3.3.1 मॉडल जाँच

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

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

मॉडल चेकिंग स्टेट स्पेस एक्सप्लोरेशन नामक एक तकनीक का उपयोग करती है, जो मूल रूप से उन सभी संभावित राज्यों की कोशिश कर रही है जिनमें हमारा स्मार्ट कॉन्ट्रैक्ट हो सकता है और फिर यह जाँच कर रहा है कि क्या इसका कोई संपत्ति उल्लंघन है। हालाँकि, यह असीम रूप से कई राज्यों को जन्म दे सकता है; इसलिए मॉडल चेकर्स स्मार्ट अनुबंधों के कुशल विश्लेषण को संभव बनाने के लिए अमूर्त तकनीकों पर भरोसा करते हैं।

3.3.2 प्रमेय सिद्ध करना

प्रमेय साबित करना कार्यक्रमों की शुद्धता पर गणितीय तर्क के बारे में है। यह अनुबंध की प्रणाली और विनिर्देश की तार्किक छाप बनाने और बयानों के बीच "तार्किक समानता" की पुष्टि करने से संबंधित है। तार्किक तुल्यता एक गणितीय संबंध है जो कहता है कि कथन A सत्य है यदि और केवल यदि कथन B सत्य है।

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

4. निष्कर्ष

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

QuillAudits में हम आपके प्रोटोकॉल को सुरक्षित रखने में मदद करने के मिशन पर हैं। हमारी कुशल और अनुभवी टीम के साथ, हम यह सुनिश्चित करते हैं कि एक भी भेद्यता पर किसी का ध्यान न जाए। हमारी वेबसाइट पर जाएँ और अपने Web3 प्रोजेक्ट को सुरक्षित करें!

28 दृश्य

समय टिकट:

से अधिक क्विलश