NIST elliptic curve seed bounty
(words.filippo.io)- आधुनिक cryptography में व्यापक रूप से इस्तेमाल होने वाले 5 NIST elliptic curves के seeds 1990 के दशक में NSA द्वारा दिए गए values से आए थे, और उनके मूल text को खोजने के लिए $12,288 bounty रखी गई है
- लक्ष्य FIPS 186-2 के P-192, P-224, P-256, P-384, P-521 हैं, और यदि विजेता भुगतान को अमेरिकी 501(c)(3) charity को donate करना चुनता है, तो राशि 3 गुना होकर $36,864 हो जाएगी
- माना जाता है कि seeds Jerry Solinas ने 1997 में बनाए थे, और संभावना है कि इन्हें किसी अंग्रेज़ी वाक्य को SHA-1 से hash करके बनाया गया हो, लेकिन असली text equipment replacement या upgrade के बाद गायब हो गया है
- text format अनिश्चित है—full stop, line break, counter की position और format, curve name शामिल था या नहीं—इसलिए लगभग 12k hashes की list को पहले attack target बनाया गया है
- कम से कम 1 pre-seed सबसे पहले submit करने पर $6,144 मिलेंगे, और सभी 5 सबसे पहले submit करने पर बाकी $6,144 मिलेंगे; submission order mail server के Received header से तय होगा
Bounty के target और payout size
- public bounty का लक्ष्य 5 NIST elliptic curves के seeds बनाने वाले hash input values (pre-seed) को खोजना है
- कुल bounty $12,288, यानी 12 Ki$, तय की गई है
- यदि विजेता cash के बजाय अमेरिकी 501(c)(3) charity को donation चुनता है, तो कुल राशि $36,864 तक बढ़ जाती है
- crack किए जाने वाले hashes ये 5 हैं
3045AE6FC8422F64ED579528D38120EAE12196D5BD71344799D5C7FCDC45B59FA3B9AB8F6A948BC5C49D360886E704936A6678E1139D26B7819F7E90A335926AA319A27A1D00896A6773A4827ACDAC73D09E8800291CB85396CC6717393284AAA0DA64BA
NIST curve seeds पर शक क्यों हुआ
- NIST curves P-192, P-224, P-256, P-384, P-521 को 2000 में FIPS 186-2 में publish किया गया था, और ANSI X9.62 method के अनुसार random seed को SHA-1 से hash करने के output से कुछ parameters निकाले गए थे
- कई cryptographic systems NIST curves का उपयोग करते हैं, खासकर P-256 और P-384 बहुत व्यापक हैं
- ये दोनों curves Commercial National Security Algorithm Suite में शामिल हैं
- वे web के बड़े हिस्से को secure करने वाले ECDSA X.509 certificates में भी इस्तेमाल होते हैं
- Steve Weis का NIST curve seed origins FIPS 186 specification में शामिल random seeds के बारे में ज्ञात जानकारी को संकलित करता है
- seeds संभवतः NSA ने दिए थे
- माना जाता है कि Jerry Solinas ने इन्हें 1997 में generate किया था
- संभव है कि इन्हें अंग्रेज़ी वाक्यों को SHA-1 से hash करके बनाया गया हो
- Jerry Solinas ने कभी उदाहरण के तौर पर कहा था कि उन्होंने
SHA1("Jerry deserves a raise.")जैसी style के seeds इस्तेमाल किए, लेकिन असली text गायब हो गया और मिलते-जुलते phrases भी hash से match नहीं हुए
pre-seed मिलने से कम हो सकने वाला अविश्वास
- हाल के assessments में NIST curves कुछ अधिक सकारात्मक दिखती हैं
- complete addition formulas एक प्रमुख footgun को कम करती हैं
- अधिक सुरक्षित interface design methods ज्ञात हो चुके हैं
- cofactor attacks से immune prime-order curves का मूल्य भी अधिक स्पष्ट हुआ है
- कुछ non-practitioners के बीच यह चिंता बनी हुई है कि NSA ने जानबूझकर कमजोर curves चुनने के लिए seeds चुने होंगे
- Koblitz और Menezes का A riddle wrapped in an enigma मानता है कि अगर NSA ने seeds पर पूरा control रखा भी हो, तब भी ऐसा attack कम convincing है
- क्योंकि इसके लिए कमजोर curves की इतनी बड़ी class चाहिए होती कि academia या industry उसे 25 साल तक detect न कर पाती
- ये चिंताएं पर्याप्त रूप से grounded नहीं लगतीं, लेकिन pre-seed की खोज NIST curves के आसपास के FUD को कम करने में मदद कर सकती है
- English preimage खोजने से rigidity पूरी तरह guarantee नहीं होती, लेकिन यह cryptographic history की एक missing piece भरने जैसा हो सकता है
hash input values के बारे में ज्ञात clues
- input value संभवतः Jerry Solinas का उल्लेख करने वाला कोई English phrase है, और इसमें किसी अन्य व्यक्ति का नाम व counter भी शामिल रहा हो सकता है
- counter की जरूरत होने की संभावना इसलिए अधिक है क्योंकि curve bit size के आधार पर 192~521 hashes में से लगभग 1 ही curve generation के लिए suitable होता है
- सबसे बड़ी curve के लिए counter के 2400 से कम होने की probability 99% है
- P-256 के लिए counter के 1175 से कम होने की probability है
- P-192 और P-256 के seeds पुराने ANSI X9.62 standard में examples के रूप में आए थे, और बाकी FIPS 186-2 में नए आए, इसलिए sentence structure अलग हो सकता है
- bounty target केवल 5 prime-order NIST curves हैं, लेकिन test cost कम हो तो ANSI X9.62 के अन्य examples और FIPS 186-2 के binary curve seeds को भी साथ में try किया जा सकता है
- ANSI prime192v2, prime192v3, prime239v1, prime239v2, prime239v3 bounty target नहीं हैं
- NIST B-163, B-233, B-283, B-409, B-571 भी bounty target नहीं हैं
संभावित string formats और attack list
- string format खुद अब भी mystery है
- sentence full stop पर खत्म हो सकता है या नहीं भी
- line break हो सकता है या नहीं भी
- counter decimal हो सकता है, leading zero हो सकते हैं, या 16-bit/32-bit binary हो सकता है
- counter full stop के बाद आया हो सकता है या किसी दूसरे delimiter method से जोड़ा गया हो सकता है
- सभी seeds बनाने के लिए एक ही sentence में अलग-अलग counters जोड़े गए हो सकते हैं, या हर seed के लिए अलग sentence इस्तेमाल हुआ हो सकता है
- curve name या size phrase में शामिल रहा हो सकता है
- इंसानी याददाश्त में काफी गलतियां होती हैं, इसलिए indirect testimony के कुछ details गलत होने की संभावना भी खुली है
- counter के बजाय
SHA-1(s),SHA-1(SHA-1(s))जैसी repeated hashing इस्तेमाल हुई हो सकती है - एक और candidate यह है कि
SHA-1(s)से शुरू करके ANSI X9.62 Section A.3.3.1 की तरह hash value को increment किया गया हो - attack target list के तौर पर लगभग 12k hashes वाली nist-and-ansi-prime-order-seeds-increments-99-percent.txt दी गई है
- यह list FIPS 186-2 और ANSI X9.62 के हर prime order curve seed के लिए 99% probability space cover करती है
- यदि कई hashes check करने की cost कम है, तो इस list को attack target बनाने की सलाह दी जाती है
- संभव हो तो hashes के पहले 16 bytes compare करने से भी वही result मिल सकता है
- SHA-1 brute force बहुत fast है, इसलिए यह problem passphrase cracking और brainwallet brute force का अनुभव रखने वालों के लिए suitable है
submission method और payout conditions
- 5 prime-order NIST curves के pre-seeds
seeds@filippo.ioपर email द्वारा सबसे पहले submit करने वाला व्यक्ति bounty पाएगा - payout structure दो stages में है
- कम से कम 1 pre-seed सबसे पहले submit करने पर आधा, यानी $6,144, payout
- सभी 5 pre-seeds सबसे पहले submit करने पर बाकी $6,144 payout
- एक ही व्यक्ति दोनों payouts पा सकता है, इसलिए सभी 5 मिलने तक wait करने की जरूरत नहीं
- cash लेने और अमेरिकी 501(c)(3) charity को donation के बीच चुन सकते हैं
- charity donation चुनने पर राशि 3 गुना हो जाती है
- values से बहुत अधिक mismatch करने वाली charity का चयन reject किया जा सकता है
- यदि recipient ऐसा entity है जिसे अमेरिकी या Italian citizen कानूनी रूप से पैसे नहीं भेज सकते, तो charity option चुनना होगा
- cash bounty पर taxes recipient की responsibility हैं
- submission email subject में allowlisting rule पास करने के लिए
ANTISPAMशामिल होना चाहिए - submission order का अंतिम basis mail host का Received header होगा
- seed publicly known हो जाने पर bounty expire हो जाएगी; अन्यथा इस page पर अलग notice आने तक valid रहेगी
- bounty cancel या reduce करने पर 6 महीने पहले notice दिया जाएगा
- seeds खोजने के तरीके पर कोई restriction नहीं है
- brute force, clever guesses, investigation, पुराने NIST backups recover करना—कोई भी तरीका चलेगा
- शर्त यह है कि अगर आप नहीं चाहते, तो method के बारे में नहीं पूछा जाएगा
1 टिप्पणियां
Hacker News की राय
यहां की पृष्ठभूमि काफ़ी मज़ेदार है: हाल में यह बात घूम रही है कि 1990 के दशक में NSA के Jerry Solinas द्वारा बनाए गए NIST P-curve का “random” seed असल में
"Give Jerry a raise"के किसी बदले हुए string को SHA1 hash करने से निकला थाउस समय माना जाता था कि किसी string को SHA1 से गुज़ारने पर seed की संरचना मिट जाती है, इसलिए NSA जानबूझकर कमजोर seed नहीं चुन सकता—यह एक तरह का भरोसा दिलाने वाला उपाय था
लेकिन 2000 के दशक में NIST/NSA ने खुद अपनी साख खराब कर ली, इसलिए सिर्फ़ यह स्पष्टीकरण conspiracy theories को शांत करने के लिए पर्याप्त नहीं रहा; बाद में जब NIST ने यह दिखाने के लिए कि seed benign था, Jerry Solinas से उसे फिर से reconstruct करवाने की कोशिश की, तो कहा जाता है कि वे खुद अपनी इस्तेमाल की हुई string भूल गए थे
असली conspiracy theorist तो यही मानेगा कि इस seed को generate करने वाली string कोई नहीं ढूंढ पाएगा, लेकिन अगर कोई उसे ढूंढ लेता है, तो NIST P-curve को दुर्भावनापूर्वक generate किया गया था—इस theory को काफ़ी बड़ा झटका लग सकता है, इसलिए यह एक दिलचस्प bounty है
"Give Jerry a raise of $100000 dollars now!!!"जैसी string का hash seed से match करता हुआ भी ढूंढ ले, तो भी मुझे नहीं लगता कि यह दुर्भावना न होने का सबूत होगाक्योंकि अगर किसी को पता था कि कमजोर curve में कौन-सी असामान्य properties होनी चाहिए, तो वह मिलती-जुलती string variations को बहुत बड़े पैमाने पर hash करके तब तक चुन सकता था, जब तक desired property वाला constant न मिल जाए
SSLv2 और SSLv3 इसके अच्छे उदाहरण हैं, और output size SHA1 से match करता है, लेकिन अगर pipeline
echo "$string" | md5sum | sha1sumजैसी रही हो तो भी बहुत हैरानी नहीं होगीhttps://eprint.iacr.org/2015/1018
https://eprint.iacr.org/2015/1018.pdf
ऐसी ही backdoor की आशंका (EC)DSA को लेकर भी थी, और RSA समर्थकों ने दावा किया था कि NSA DSA को इसलिए आगे बढ़ा रहा है क्योंकि उसने उसमें backdoor डाला है, लेकिन कोई सबूत नहीं था और 20 साल तक DSA या ECDSA में backdoor डालने का कोई तरीका भी नहीं मिला, ऐसा कहा जाता है
एक और किस्सा है कि एक standardization meeting में NSA का representative फोन करके लौटने के बाद बोला कि NSA मानता है कि ECC Federal Reserve सहित सभी अमेरिकी सरकारी एजेंसियों के secure communications के लिए पर्याप्त है, जिससे सब हैरान रह गए
DES में किए गए adjustments बाद में differential cryptanalysis defense निकले, और original SHA यानी SHA-0 की कमजोरी अंतिम SHA-1 में नहीं थी; इसी तरह NSA की दूसरी कार्रवाइयों को भी संदेह की नज़र से देखा गया
दोनों curves में G का selection ऐसे point का double है जिसके पास संदिग्ध रूप से सही size वाला x-coordinate है, और यह विशेषता दोनों curves में समान है
इन curves में G selection ही अकेला high-entropy input है, लेकिन असल में यह लगभग irrelevant साबित किया जा सकता है; इससे बस उसे चुनने वाले व्यक्ति को एक खास arbitrary discrete log पता हो सकता है
बहुत contrived protocols में यह backdoor बन सकता है, लेकिन वह बेहद बनावटी होगा; फिर भी, क्योंकि यह अकेला अज्ञात parameter है, इसे खोजने लायक समझा गया
P-curve का seed मिल जाए तो वह दूसरी curves के generator points में इस्तेमाल seeds जैसा भी हो सकता है, जिससे वह छोटी-सी mystery भी सुलझ सकती है
कोई phrase theoretically मनचाहा hash पाने के लिए चुना जा सकता है
ब्रिटेन की GCHQ देश के किसी भी research lab या university से ज़्यादा गणितज्ञों को नियुक्त करती है। अमेरिका की समकक्ष एजेंसियों में भी शायद ऐसा ही होगा
Diffie-Hellman key exchange को Diffie और Hellman के दोबारा खोजने से पहले GCHQ और NSA जानते थे
intelligence agencies की बुनियादी क्षमता के बारे में पक्के तौर पर कहना मुश्किल है, और मैं यह नहीं कह रहा कि वे सचमुच ऐसी कमजोर curves की family जानते हैं, लेकिन इसे असंभव भी नहीं माना जा सकता। यह क्षेत्र उनका मुख्य काम है
आम तौर पर कहा जाता है कि academia इतनी सक्षम है कि अगर NSA ने कुछ किया होता तो वह पहले ही मिल गया होता, और अगर आप सहमत नहीं हैं तो आपको अनजान FUD फैलाने वाला मान लिया जाता है। यह लेख भी वही लाइन दोहराता है, लेकिन organized bounty के जरिए समस्या को ज़्यादा गंभीरता से लिया जाना अच्छी बात है
मैंने पहले cryptography पर काम किया है, कई साल तक काम के सिलसिले में crypto papers को नियमित रूप से review किया है, conferences में गया हूं, researchers से बात की है, और कई “अजीब” elliptic-curve crypto implementations भी किए हैं। पूरी तरह insider नहीं, लेकिन पूरी तरह outsider भी नहीं—इस नज़रिए से यह प्रचलित धारणा खतरनाक लगती है
मुख्य दलीलें दो हैं: अगर NIST curves की standardization में kleptography attack संभव होता तो academia या industry उसे पहले ही ढूंढ चुकी होती; और Dual_EC_DRBG पर तुरंत शक हुआ था, इसलिए public crypto community backdoor अच्छे से पकड़ लेती है
पहली दलील कमजोर है। academia में file drawer problem और “publish or perish” incentives होते हैं; किसी युवा researcher के लिए नया zero-knowledge proof algorithm बनाकर citations वाली paper निकालना ज़्यादा फायदेमंद है या ऐसे algorithm पर हमला करना जिसे सब मजबूत मानते हैं और आखिर में कुछ न मिलना—यह साफ है
आधार यह expert consensus है कि “कई होशियार लोगों ने गहराई से study की लेकिन कुछ नहीं मिला,” लेकिन academia में negative results publish करना मुश्किल है, इसलिए यह जानने का तरीका नहीं कि वास्तव में कितना प्रयास लगा
kleptography, यानी standards में backdoor डालने का तरीका, NSA के अलावा लगभग किसी के काम का नहीं, इसलिए यह अच्छा career path भी नहीं है; industry में जाने या citations पाने के लिहाज़ से भी नुकसानदेह है
दूसरी तरफ NSA academia से ज़्यादा salary दे सकती है, पूरे academic जगत से ज़्यादा researchers रखकर उन्हें ऐसे research पर लगा सकती है जिसमें failure की संभावना अधिक हो या जो सिर्फ standard backdoors के लिए उपयोगी हो, और hardware budgets की वजह से दशकों तक ऐसा multidisciplinary research कर सकती थी जो academic crypto research नहीं कर पाता
अगर दांव लगाना हो कि ECC की समझ NSA और academia में किसकी ज़्यादा है, तो firepower सरकार की तरफ है और तुलना ही नहीं है। सरकार कितने math PhD रखती है इसका मोटा अंदाज़ा लगाया जा सकता है, लेकिन academia ने इस problem space में असल में कितनी ताकत लगाई है, यह पता नहीं
दूसरी दलील भी ideal नहीं है। Dual_EC_DRBG ही नहीं, NIST curves पर भी लोगों ने तुरंत चिंता जताई थी। फर्क सिर्फ यह था कि पहले मामले में ज़रूरी attack करने के लिए known algorithm था, और दूसरे में नहीं
शुरू से ही इस तरह की बहस को अनावश्यक बनाने का तरीका दशकों से जाना जाता था, और NIST curves को SHA1 output से बनाने की वजह भी वही थी। NIST curves को phase out करने का सबसे अच्छा समय दशकों पहले था, और दूसरा सबसे अच्छा समय अब है
इस bounty में योगदान देने की वजह यह है कि अगर वाकई यह password-crackable phrase है, तो उसे पता लगाना ऐतिहासिक रूप से बहुत महत्वपूर्ण होगा
यह काफी बेचैन करने वाला है कि NIST elliptic curves NSA द्वारा दिए गए seeds को hash करके बनाई गई थीं
यह कुछ ऐसा सुनाई देता है: “चिंता मत करो, इसे किसी मामूली sentence को hash करके बनाया गया था। अब हमें याद नहीं, लेकिन Jerry ने salary hike पर बस मज़ाक किया था”
यकीन करना मुश्किल है कि पहले ही strong verification क्यों नहीं हुई, और अलग-अलग हितों वाले कई parties के random seeds और hardware random number generators वगैरह को mix करने जैसी ज़्यादा तार्किक seed selection क्यों नहीं की गई
वह तरीका अच्छा होता, लेकिन उस समय शायद बहुत कम लोगों ने इसकी ज़रूरत देखी होगी
https://en.wikipedia.org/wiki/Utah_Data_Center
Professor Dan Boneh का background समझाने वाला एक video है: https://youtu.be/8WDOpzxpnTE?t=892
अगर मैंने सही समझा है, तो community ने अज्ञात source वाली संदिग्ध strings स्वीकार कर लीं, जबकि hash में किसी known दूसरे input को डालकर उन्हें clear-source strings में बदलना बहुत आसान था?
अफसोस की बात है कि NSA और cryptographic standards के संदर्भ में incompetence का उदाहरण, जहां तक मुझे पता है, बस यही है; आम तौर पर कहानियां उल्टी दिशा की होती हैं
इससे भी बड़ी समस्या यह है कि NIST का elliptic-curve related standards में पहले से backdoor डालने का इतिहास है, और यह भी तुरंत बताया गया था कि यह mechanism भरोसा पैदा नहीं करता, लेकिन NIST या NSA ने कुछ नहीं किया। Dual_EC_DRBG जैसा ही
और भी बड़ी समस्या यह है कि NSA ने 2015 में स्पष्ट रूप से कहा था कि NIST curves के बाद वाली दूसरी curves पर upgrade न करें। वजह यह दी गई कि quantum computers जल्द ही पूरे ECC को तोड़ने लायक अच्छे हो जाएंगे, इसलिए सभी को post-quantum cryptography पर जाना चाहिए
अगर ECC ठीक से काम कर रहा हो, quantum computers अभी दूर हों, और आप लोगों को जितना संभव हो उतना लंबे समय तक NIST curves से बांधे रखना चाहते हों, तो आप बिल्कुल यही कहते
इस स्थिति में crypto community को सम्मानजनक कहना मुश्किल है। लगभग 25 साल हो गए, और इस समस्या से मुक्त नई curves मौजूद हैं, तो NIST curves अब भी क्यों इस्तेमाल हो रही हैं? SHA1 की तरह इन्हें phase out करने की कोशिश कहां है? यह लेख तो उल्टा उन curves को promote करता हुआ लगता है
अगर आपको अपनी किस्मत अच्छी लगती है, तो यहाँ SHA1 hash guess करके देख सकते हैं: https://wending.dev/hash_guessing/
अगर NSA के seed generator को cryptography और computer की जरा भी समझ होती, तो वह अच्छी curve मिलने तक 500 अलग-अलग phrases हाथ से डालता नहीं बैठा होता
मान भी लें कि उसने ऐसा किया, तब भी अंत में full stop जोड़ना, uppercase/lowercase बदलना, title case करना जैसी संभावित variations अनंत हैं
आजमाने लायक संभावित variations की सूची कभी पूरी होना मुश्किल है, लेकिन इस page की तरह सिर्फ SHA1 hash generate करने पर, punctuation और capitalization तक सही guess कर लेने के बाद भी असली hash ढूँढना व्यावहारिक रूप से असंभव है
कम से कम यह जांचने के लिए कि result hash incremented value है या नहीं, आगे या पीछे के 10 bytes match करते हैं या नहीं, इतना तो verify कर पाना चाहिए। फिर भी ज्यादातर यह सिर्फ लोगों का समय बर्बाद करेगा, और author को भी पता होगा कि इससे कहीं बात नहीं बनने वाली
page पर लिखा होना चाहिए कि यह सिर्फ demo के लिए toy है, और सही guess करने पर भी यह आपको असली seed खोजने नहीं देगा
cryptographers की तीखी बहसें लंबे समय तक देखते हुए मैंने जो सीखा था, वह था “Bernstein पर bet मत लगाओ, और NIST पर भरोसा मत करो”
अब लगता है इसे बदलकर “Bernstein या Filippo पर bet मत लगाओ, और NIST पर भरोसा मत करो। अगर ये दोनों rules टकराएँ, तब भी NIST पर भरोसा मत करो” करना पड़ेगा
SHA-1 टूट चुका है, यह सही है, लेकिन मुझे लगा था कि समस्या मुख्यतः length extension attack के जरिए collision या known plaintext attack जैसी चीजों में है
सिर्फ hash दिए जाने पर असल में passphrase ढूँढना अब भी कठिन माना जाता है
लेकिन अगर seed structure hypothesis सही है, तो यहाँ preimage resistance उतना महत्वपूर्ण नहीं है। SHA-1 बहुत तेज है और आसानी से parallelize भी हो जाता है, इसलिए
"Jerry needs a raise"के variation space को जिद्दी तरीके से खंगालने वाला कोई व्यक्ति original input खोज ले, इसकी अच्छी-खासी संभावना हैइसका SHA1 खुद से ज्यादा संबंध नहीं है