
शुद्ध पायथन ECDSA हस्ताक्षर/सत्यापन और ECDH कुंजी समझौता
यह ECC (एलिप्टिक कर्व क्रिप्टोग्राफी) का उपयोग करने में आसान कार्यान्वयन है, जिसमें ECDSA (एलिप्टिक कर्व डिजिटल सिग्नेचर एल्गोरिथ्म), EdDSA (एडवर्ड्स-कर्व डिजिटल सिग्नेचर एल्गोरिथ्म) और ECDH (एलिप्टिक कर्व डिफी-हेलमैन) के लिए समर्थन है, जो विशुद्ध रूप से Python में लागू किया गया है, और MIT लाइसेंस के अंतर्गत जारी किया गया है। इस लाइब्रेरी से आप शीघ्रता से कुंजी जोड़े (साइनिंग कुंजी और वेरिफाइंग कुंजी) बना सकते हैं, संदेशों पर हस्ताक्षर कर सकते हैं और हस्ताक्षर सत्यापित कर सकते हैं। आप विनिमय की गई सार्वजनिक कुंजियों के आधार पर साझा गुप्त कुंजी पर भी सहमत हो सकते हैं। कुंजियाँ और हस्ताक्षर बहुत छोटे होते हैं, जिससे उन्हें संभालना और अन्य प्रोटोकॉल में शामिल करना आसान होता है।
नोट: इस लाइब्रेरी का उपयोग प्रोडक्शन सेटिंग्स में नहीं किया जाना चाहिए, अधिक जानकारी के लिए सुरक्षा देखें।
यह लाइब्रेरी कुंजी निर्माण, हस्ताक्षर, सत्यापन, और साझा गुप्त
व्युत्पत्ति प्रदान करती है पाँच
लोकप्रिय NIST "Suite B" GF(p) (प्राइम फ़ील्ड) वक्रों के लिए, जिनकी कुंजी लंबाई 192,
224, 256, 384, और 521 बिट है। इन वक्रों के "शॉर्ट नाम", जैसा कि
OpenSSL टूल (openssl ecparam -list_curves) से ज्ञात है, हैं: prime192v1,
secp224r1, prime256v1, secp384r1, और secp521r1। इसमें
Bitcoin द्वारा उपयोग किया जाने वाला 256-बिट वक्र secp256k1 शामिल है। साथ ही
160 से 512 बिट तक के Brainpool वक्रों के नियमित (गैर-मुड़े) संस्करणों के लिए भी समर्थन है।
उन वक्रों के "शॉर्ट नाम" हैं: brainpoolP160r1, brainpoolP192r1,
brainpoolP224r1, brainpoolP256r1, brainpoolP320r1, brainpoolP384r1,
brainpoolP512r1। SEC मानक के कुछ छोटे वक्र भी
शामिल हैं (मुख्य रूप से लाइब्रेरी के परीक्षण को तेज़ करने के लिए), वे हैं:
secp112r1, secp112r2, secp128r1, और secp160r1।
कुंजी निर्माण, हस्ताक्षर और सत्यापन Ed25519 और के लिए भी समर्थित है
Ed448 वक्रों के लिए।
कोई अन्य वक्र शामिल नहीं हैं, लेकिन प्राइम फ़ील्ड पर और अधिक वक्रों के लिए
समर्थन जोड़ना बहुत कठिन नहीं है।
यह लाइब्रेरी केवल Python और 'six' पैकेज का उपयोग करती है। यह Python 2.6, 2.7, और 3.6+ के साथ संगत है। यह वैकल्पिक कार्यान्वयन जैसे pypy और pypy3 पर निष्पादन का भी समर्थन करती है।
यदि gmpy2 या gmpy स्थापित है, तो उनका उपयोग तेज़ अंकगणित के लिए किया जाएगा।
इनमें से किसी को भी इस लाइब्रेरी के स्थापित होने के बाद स्थापित किया जा सकता है,
python-ecdsa स्टार्ट-अप पर उनकी उपस्थिति का पता लगाएगा और उन्हें
स्वचालित रूप से उपयोग करेगा।
इष्टतम प्रदर्शन के लिए आपको Python3 पर gmpy2 को प्राथमिकता देनी चाहिए।
OpenSSL संगतता परीक्षण चलाने के लिए, 'openssl' टूल आपके
PATH में होना चाहिए। इस रिलीज़ का परीक्षण OpenSSL 0.9.8o,
1.0.0a, 1.0.2f, 1.1.1d और 3.0.1 (अन्य के अलावा) के विरुद्ध सफलतापूर्वक किया गया है।
यह लाइब्रेरी PyPI पर उपलब्ध है, इसे pip का उपयोग करके स्थापित करने की अनुशंसा की जाती है:```
pip install ecdsa
यदि उच्च प्रदर्शन की आवश्यकता हो और नेटिव कोड का उपयोग करने में कोई समस्या न हो, तो `gmpy2` के साथ इंस्टॉलेशन निर्दिष्ट करना संभव है:```
pip install ecdsa[gmpy2]
या (धीमा, लीगेसी विकल्प):``` pip install ecdsa[gmpy]
## गति
निम्न तालिका दर्शाती है कि यह लाइब्रेरी कुंजी जोड़े उत्पन्न करने
(`keygen`), डेटा पर हस्ताक्षर करने (`sign`), उन हस्ताक्षरों को सत्यापित करने (`verify`),
एक साझा रहस्य निकालने (`ecdh`), और
बिना कुंजी-विशिष्ट पूर्व-गणना के हस्ताक्षर सत्यापित करने (`no PC verify`) में कितना समय लेती है।
ये सभी मान सेकंड में हैं।
सुविधा के लिए, इन मानों के व्युत्क्रम भी दिए गए हैं:
प्रति सेकंड कितनी कुंजियाँ उत्पन्न की जा सकती हैं (`keygen/s`), प्रति सेकंड कितने हस्ताक्षर
किए जा सकते हैं (`sign/s`), प्रति सेकंड कितने हस्ताक्षर सत्यापित किए जा सकते हैं
(`verify/s`), प्रति सेकंड कितने साझा रहस्य निकाले जा सकते हैं
(`ecdh/s`), और बिना कुंजी-विशिष्ट पूर्व-गणना के प्रति सेकंड कितने हस्ताक्षर
सत्यापित किए जा सकते हैं (`no PC verify/s`)। कच्चे हस्ताक्षर का आकार
(सामान्यतः सबसे छोटा तरीका
जिसमें हस्ताक्षर को एन्कोड किया जा सकता है) भी `siglen` कॉलम में दिया गया है।
अपने स्वयं के कंप्यूटर पर यह तालिका उत्पन्न करने के लिए `tox -e speed` का उपयोग करें।
Intel Core i7 4790K @ 4.0GHz पर मुझे निम्नलिखित प्रदर्शन मिल रहा है:```
siglen keygen keygen/s sign sign/s verify verify/s no PC verify no PC verify/s
NIST192p: 48 0.00032s 3134.06 0.00033s 2985.53 0.00063s 1598.36 0.00129s 774.43
NIST224p: 56 0.00040s 2469.24 0.00042s 2367.88 0.00081s 1233.41 0.00170s 586.66
NIST256p: 64 0.00051s 1952.73 0.00054s 1867.80 0.00098s 1021.86 0.00212s 471.27
NIST384p: 96 0.00107s 935.92 0.00111s 904.23 0.00203s 491.77 0.00446s 224.00
NIST521p: 132 0.00210s 475.52 0.00215s 464.16 0.00398s 251.28 0.00874s 114.39
SECP256k1: 64 0.00052s 1921.54 0.00054s 1847.49 0.00105s 948.68 0.00210s 477.01
BRAINPOOLP160r1: 40 0.00025s 4003.88 0.00026s 3845.12 0.00053s 1893.93 0.00105s 949.92
BRAINPOOLP192r1: 48 0.00033s 3043.97 0.00034s 2975.98 0.00063s 1581.50 0.00135s 742.29
BRAINPOOLP224r1: 56 0.00041s 2436.44 0.00043s 2315.51 0.00078s 1278.49 0.00180s 556.16
BRAINPOOLP256r1: 64 0.00053s 1892.49 0.00054s 1846.24 0.00114s 875.64 0.00229s 437.25
BRAINPOOLP320r1: 80 0.00073s 1361.26 0.00076s 1309.25 0.00143s 699.29 0.00322s 310.49
BRAINPOOLP384r1: 96 0.00107s 931.29 0.00111s 901.80 0.00230s 434.19 0.00476s 210.20
BRAINPOOLP512r1: 128 0.00207s 483.41 0.00212s 471.42 0.00425s 235.43 0.00912s 109.61
SECP112r1: 28 0.00015s 6672.53 0.00016s 6440.34 0.00031s 3265.41 0.00056s 1774.20
SECP112r2: 28 0.00015s 6697.11 0.00015s 6479.98 0.00028s 3524.72 0.00058s 1716.16
SECP128r1: 32 0.00018s 5497.65 0.00019s 5272.89 0.00036s 2747.39 0.00072s 1396.16
SECP160r1: 42 0.00025s 3949.32 0.00026s 3894.45 0.00046s 2153.85 0.00102s 985.07
Ed25519: 64 0.00076s 1324.48 0.00042s 2405.01 0.00109s 918.05 0.00344s 290.50
Ed448: 114 0.00176s 569.53 0.00115s 870.94 0.00282s 355.04 0.01024s 97.69