install Libsodium, use allocation mechanisms by #including
संरक्षित ढेर आवंटन
Malloc() और दोस्तों से धीमे, उन्हें वर्चुअल मेमोरी के 3 या 4 अतिरिक्त पृष्ठों की आवश्यकता होती है।
void *sodium_malloc(size_t size);
sodium_malloc()
और sodium_allocarray()
का उपयोग करके संवेदनशील डेटा को संग्रहीत करने के लिए स्मृति आवंटित करें। इन ढेर गार्ड का उपयोग करने से पहले आपको पहले sodium_init()
को कॉल करना होगा।
void *sodium_allocarray(size_t count, size_t size);
sodium_allocarray()
फ़ंक्शन एक पॉइंटर लौटाता है जिसमें से गिनती ऑब्जेक्ट्स हैं जो मेमोरी के आकार बाइट्स को एक्सेस किया जा सकता है। यह sodium_malloc()
के समान गारंटी प्रदान करता है, लेकिन count * size
SIZE_MAX
से अधिक होने पर अंकगणित ओवरफ़्लो के विरुद्ध भी सुरक्षा करता है।
ये फ़ंक्शंस संरक्षित डेटा के चारों ओर गार्ड पेज जोड़ते हैं ताकि इसे दिल की तरह दिखने वाले परिदृश्य में पहुंचने की संभावना कम हो सके।
इसके अलावा, लॉकिंग मेमोरी ऑपरेशंस का उपयोग करके आवंटित स्मृति क्षेत्रों के लिए सुरक्षा को बदला जा सकता है: sodium_mprotect_noaccess()
, sodium_mprotect_readonly()
और sodium_mprotect_readwrite() ।
sodium_malloc
के बाद आप स्मृति को अनलॉक और डिलीकेट करने के लिए sodium_free()
का उपयोग कर सकते हैं। इस समय आपके कार्यान्वयन में उपयोग के बाद स्मृति को शून्य करने पर विचार करें।
उपयोग के बाद स्मृति शून्य
void sodium_memzero(void * const pnt, const size_t len);
उपयोग के बाद, संवेदनशील डेटा को अधिलेखित किया जाना चाहिए, लेकिन memset() और हाथ से लिखित कोड को एक अनुकूलित कंपेलर या लिंकर द्वारा चुपचाप हटाया जा सकता है।
Sodium_memzero() फ़ंक्शन पीएनटी से शुरू होने वाले प्रभावी रूप से शून्य लेन बाइट्स की कोशिश करता है, भले ही अनुकूलन कोड पर लागू हो रहे हों।
स्मृति आवंटन को लॉक करना
int sodium_mlock(void * const addr, const size_t len);
sodium_mlock()
फ़ंक्शन लॉक कम से कम लेंस बाइट्स मेमोरी से शुरू होता है। यह संवेदनशील डेटा को डिस्क पर स्वैप करने से बचने में मदद कर सकता है।
int sodium_mprotect_noaccess(void *ptr);
Sodium_mprotect_noaccess() फ़ंक्शन sodium_malloc() या सोडियम_लोकैरे() को उपयोग करने योग्य आवंटित क्षेत्र बनाता है। इसे पढ़ या लिखा नहीं जा सकता है, लेकिन डेटा संरक्षित है। इस फ़ंक्शन का उपयोग गोपनीय डेटा को पहुंचने के लिए किया जा सकता है, सिवाय इसके कि जब वास्तव में किसी विशिष्ट ऑपरेशन के लिए आवश्यक हो।
int sodium_mprotect_readonly(void *ptr);
Sodium_mprotect_readonly() फ़ंक्शन केवल सोडियम_मॉलोक() या सोडियम_लोकैरे() को केवल पढ़ने के लिए आवंटित क्षेत्र को चिह्नित करता है। डेटा को संशोधित करने का प्रयास प्रक्रिया को समाप्त करने का कारण बन जाएगा।
int sodium_mprotect_readwrite(void *ptr);
sodium_mprotect_readwrite()
फ़ंक्शन sodium_malloc()
या sodium_allocarray()
को पढ़ने योग्य और लिखने योग्य के रूप में आवंटित क्षेत्र को चिह्नित करता है, <कोड का उपयोग करके संरक्षित होने के बाद > sodium_mprotect_readonly() या sodium_mprotect_noaccess()
।