Python 3.7 - secrets

रहस्य - रहस्यों को प्रबंधित करने के लिए सुरक्षित यादृच्छिक संख्या उत्पन्न करें




python

रहस्य - रहस्यों को प्रबंधित करने के लिए सुरक्षित यादृच्छिक संख्या उत्पन्न करें

संस्करण 3.6 में नया।

स्रोत कोड: Lib/secrets.py

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

विशेष रूप से, random मॉड्यूल में डिफ़ॉल्ट छद्म-यादृच्छिक संख्या जनरेटर की वरीयता में secrets का उपयोग किया जाना चाहिए, जो कि सुरक्षा या क्रिप्टोग्राफी नहीं, मॉडलिंग और सिमुलेशन के लिए डिज़ाइन किया गया है।

यह भी देखें

पीईपी 506

रैंडम नंबर

secrets मॉड्यूल यादृच्छिकता के सबसे सुरक्षित स्रोत तक पहुंच प्रदान करता है जो आपके ऑपरेटिंग सिस्टम प्रदान करता है।

class secrets.SystemRandom

ऑपरेटिंग सिस्टम द्वारा प्रदान किए गए उच्चतम-गुणवत्ता वाले स्रोतों का उपयोग करके यादृच्छिक संख्या उत्पन्न करने के लिए एक वर्ग। अतिरिक्त विवरण के लिए random.SystemRandom देखें।

secrets.choice(sequence)

एक गैर-रिक्त अनुक्रम से एक बेतरतीब ढंग से चुना गया तत्व लौटें।

secrets.randbelow(n)

श्रेणी [0, n ) में एक यादृच्छिक int लौटें।

secrets.randbits(k)

K यादृच्छिक बिट्स के साथ एक int लौटें।

टोकन बनाना

secrets मॉड्यूल सुरक्षित टोकन उत्पन्न करने के लिए फ़ंक्शंस प्रदान करता है, जैसे पासवर्ड रीसेट, हार्ड-टू-अनुमान URL और इसी तरह के अनुप्रयोगों के लिए उपयुक्त।

secrets.token_bytes([nbytes=None])

एक यादृच्छिक बाइट स्ट्रिंग लौटें जिसमें बाइट्स की संख्या nbytes हो । यदि nbytes None या आपूर्ति नहीं की गई है, तो एक उचित डिफ़ॉल्ट का उपयोग किया जाता है।

>>> token_bytes(16)  
b'\xebr\x17D*t\xae\xd4\xe3S\xb6\xe2\xebP1\x8b'
secrets.token_hex([nbytes=None])

हेक्साडेसिमल में एक यादृच्छिक पाठ स्ट्रिंग लौटें। स्ट्रिंग में यादृच्छिक बाइट्स हैं, प्रत्येक बाइट को दो हेक्स अंकों में परिवर्तित किया जाता है। यदि nbytes None या आपूर्ति नहीं की गई है, तो एक उचित डिफ़ॉल्ट का उपयोग किया जाता है।

>>> token_hex(16)  
'f9bf78b9a18ce6d46a0cd2b0b86df9da'
secrets.token_urlsafe([nbytes=None])

एक यादृच्छिक URL-सुरक्षित टेक्स्ट स्ट्रिंग लौटाएं , जिसमें nbytes यादृच्छिक बाइट्स हों। पाठ बेस 64 एनकोडेड है, इसलिए औसतन प्रत्येक बाइट लगभग 1.3 वर्णों में परिणाम करता है। यदि nbytes None या आपूर्ति नहीं की गई है, तो एक उचित डिफ़ॉल्ट का उपयोग किया जाता है।

>>> token_urlsafe(16)  
'Drmhze6EPcv0fN_81Bj-nA'

टोकन को कितने बाइट्स का उपयोग करना चाहिए?

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

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

अन्यथा, यदि कोई तर्क प्रदान नहीं किया जाता है, या यदि तर्क None , तो token_* फ़ंक्शन इसके बजाय एक उचित डिफ़ॉल्ट का उपयोग करेगा।

ध्यान दें

वह डिफ़ॉल्ट किसी भी समय परिवर्तन के अधीन है, जिसमें रखरखाव रिलीज़ के दौरान भी शामिल है।

अन्य कार्य

secrets.compare_digest(a, b)

यदि ट्रिंग्स a और b बराबर हैं, तो True लौटें, अन्यथा False , इस तरह से कि समय के हमलों के जोखिम को कम किया जा सके। अतिरिक्त विवरण के लिए hmac.compare_digest() देखें।

व्यंजनों और सर्वोत्तम प्रथाओं

यह खंड सुरक्षा के बुनियादी स्तर का प्रबंधन करने के लिए secrets का उपयोग करने के लिए व्यंजनों और सर्वोत्तम प्रथाओं को दर्शाता है।

आठ वर्णों वाला अल्फ़ान्यूमेरिक पासवर्ड उत्पन्न करें:

import string
alphabet = string.ascii_letters + string.digits
password = ''.join(choice(alphabet) for i in range(8))

ध्यान दें

एप्लिकेशन को पुनर्प्राप्त करने योग्य प्रारूप में पासवर्ड स्टोर नहीं करना चाहिए, चाहे सादे पाठ या एन्क्रिप्टेड। उन्हें एक क्रिप्टोग्राफिक रूप से मजबूत वन-वे (अपरिवर्तनीय) हैश फ़ंक्शन का उपयोग करके नमकीन और हैशेड किया जाना चाहिए।

कम से कम एक लोअरकेस वर्ण, कम से कम एक अपरकेस वर्ण और कम से कम तीन अंकों के साथ एक दस-वर्ण अक्षरांकीय पासवर्ड उत्पन्न करें:

import string
alphabet = string.ascii_letters + string.digits
while True:
    password = ''.join(choice(alphabet) for i in range(10))
    if (any(c.islower() for c in password)
            and any(c.isupper() for c in password)
            and sum(c.isdigit() for c in password) >= 3):
        break

एक XKCD शैली पासफ़्रेज़ उत्पन्न करें:

# On standard Linux systems, use a convenient dictionary file.
# Other platforms may need to provide their own word-list.
with open('/usr/share/dict/words') as f:
    words = [word.strip() for word in f]
    password = ' '.join(choice(words) for i in range(4))

पासवर्ड रिकवरी अनुप्रयोगों के लिए उपयुक्त सुरक्षा टोकन युक्त एक हार्ड-टू-एस्टीमेट अस्थायी URL उत्पन्न करें:

url = 'https://mydomain.com/reset=' + token_urlsafe()