ECDSA
էլիպտիկ կորի թվային ստորագրության ալգորիթմ (ECDSA), Թվային ստորագրության ալգորիթմի (DSA) տարբերակ, որն օգտագործել է էլիպտիկ կորերի գաղտնագրություն։
Բանալու և ստորագրության չափեր
[խմբագրել | խմբագրել կոդը]Ինչպես ընդհանուր առմամբ էլիպտիկ կորերի գաղտնագրության դեպքում, ECDSA-ի համար անհրաժեշտ համարվող մասնավոր բանալիի բիթային չափը մոտավորապես երկու անգամ մեծ է եղել անվտանգության մակարդակից՝ բիթերով արտահայտված[1]։ Օրինակ՝ 80 բիթ անվտանգության մակարդակի դեպքում, ինչը նշանակել է, որ հարձակվողին մասնավոր բանալին գտնելու համար առավելագույնը մոտ գործողություն է պահանջվել, ECDSA մասնավոր բանալու չափը պետք է լիներ 160 բիթ։ Մյուս կողմից՝ ստորագրության չափը նույնն է եղել ինչպես DSA-ի, այնպես էլ ECDSA-ի համար՝ մոտավորապես բիթ, որտեղ -ն բանաձևի ցուցիչն է, այսինքն՝ մոտ 320 բիթ՝ 80 բիթ անվտանգության մակարդակի համար, որը համարժեք է գործողության։
Ստորագրության ստեղծման ալգորիթմ
[խմբագրել | խմբագրել կոդը]Ենթադրենք՝ Ալիսը ցանկացել է ստորագրված հաղորդագրություն ուղարկել Բոբին։ Սկզբում նրանք պետք է համաձայնեցնեն կորի պարամետրերը՝ ։ Բացի կորի դաշտից և հավասարումից, անհրաժեշտ է եղել -ն՝ պարզ կարգ ունեցող բազային կետը կորի վրա։ -ը կետի ադիտիվ կարգն է։
| Պարամետր | Նկարագրություն |
|---|---|
| CURVE | օգտագործված էլիպտիկ կորի դաշտը և հավասարումը |
| G | էլիպտիկ կորի բազային կետը՝ կորի վրա գտնվող կետ, որը առաջացրել է մեծ պարզ կարգ ունեցող ենթախումբ |
| n | G-ի ամբողջ կարգը, ինչը նշանակում է, որ , որտեղ -ն նույնականության տարրն է |
| մասնավոր բանալին, որը ընտրվել է պատահականորեն | |
| հանրային բանալին՝ , որը հաշվարկվել է էլիպտիկ կորի միջոցով | |
| m | ուղարկվող հաղորդագրությունը |
Բազային կետի կարգը պետք է լինի պարզ։ Իրականում ենթադրվել է, որ օղակի յուրաքանչյուր ոչ զրոյական տարր շրջելի է, ուստի -ը պետք է լինի դաշտ։ Դրանից հետևել է, որ -ը պետք է լինի պարզ թիվ՝ տես նաև Բեզուի նույնություն։
Ալիսը ստեղծել է բանալիների զույգ, որը կազմված է եղել միջակայքից պատահականորեն ընտրված մասնավոր բանալի ամբողջ թվից և հանրային բանալի կետից։ Այստեղ -ը նշանակել է էլիպտիկ կորի կետի բազմապատկում սկալյարով։
հաղորդագրությունը ստորագրելու համար Ալիսը հետևել է այս քայլերին.
- Հաշվել ։ Այստեղ HASH-ը գաղտնագրական հեշ ֆունկցիա է, օրինակ՝ SHA-2, որի ելքը փոխակերպվել է ամբողջ թվի։
- Թող -ը լինի -ի ձախից վերցված բիթերը, որտեղ -ը խմբի կարգի բիթային երկարությունն է։ Պետք է նշել, որ -ը կարող է լինել մեծ -ից, բայց ոչ ավելի երկար[2]։
- Ընտրել գաղտնագրորեն անվտանգ պատահական ամբողջ թիվ միջակայքից։
- Հաշվել կորի կետը՝ ։
- Հաշվել ։ Եթե , վերադառնալ 3-րդ քայլին։
- Հաշվել ։ Եթե , վերադառնալ 3-րդ քայլին։
- Ստորագրությունը զույգն է։ Ընդ որում՝ -ը նույնպես վավեր ստորագրություն է։
Ինչպես նշել է ստանդարտը, -ն ոչ միայն պետք է գաղտնի լինի, այլ նաև շատ կարևոր է տարբեր ստորագրությունների համար ընտրել տարբեր ։ Հակառակ դեպքում 6-րդ քայլի հավասարումը կարող է լուծվել մասնավոր բանալու նկատմամբ։ Եթե տրված են երկու ստորագրություններ՝ և , որոնք օգտագործել են նույն անհայտ -ն տարբեր հայտնի հաղորդագրությունների՝ -ի և -ի համար, հարձակվողը կարող է հաշվարկել -ը և -ը։ Քանի որ , որտեղ այս պարբերության բոլոր գործողությունները կատարվել են ըստ մոդուլ -ի, հարձակվողը կարող է գտնել ։ Քանի որ , հարձակվողը արդեն կարող է հաշվարկել մասնավոր բանալին՝ ։
Այս իրականացման սխալը, օրինակ, օգտագործվել է PlayStation 3 խաղային վահանակի ստորագրման բանալին ստանալու համար[3]։
ECDSA ստորագրությունը կարող է մասնավոր բանալիներ արտահոսել նաև այն դեպքում, երբ -ն ստեղծվել է սխալ պատահական թվերի գեներատորով։ Պատահական թվերի գեներացման այդպիսի ձախողումը 2013 թվականի օգոստոսին պատճառ է դարձել, որ Android Bitcoin Wallet-ի օգտատերերը կորցնեն իրենց միջոցները[4]։
Ապահովելու համար, որ -ն յուրաքանչյուր հաղորդագրության համար եզակի լինի, հնարավոր է ամբողջությամբ շրջանցել պատահական թվերի գեներացումը և ստեղծել դետերմինիստական ստորագրություններ՝ -ն ստանալով ինչպես հաղորդագրությունից, այնպես էլ մասնավոր բանալուց[5]։
Ստորագրության ստուգման ալգորիթմ
[խմբագրել | խմբագրել կոդը]Որպեսզի Բոբը կարողանա վավերացնել Ալիսի ստորագրությունը հաղորդագրության վրա, նա պետք է ունենա նրա հանրային բանալիի կորային կետի՝ -ի պատճենը։ Բոբը կարող է ստուգել, որ -ն վավեր կորային կետ է, հետևյալ կերպ.
- Ստուգել, որ -ն հավասար չէ նույնականության տարրին՝ O-ին, և դրա կոորդինատները վավեր են։
- Ստուգել, որ -ն գտնվում է կորի վրա։
- Ստուգել, որ ։
Դրանից հետո Բոբը հետևել է այս քայլերին.
- Ստուգել, որ r-ը և s-ը միջակայքի ամբողջ թվեր են։ Եթե ոչ, ստորագրությունն անվավեր է։
- Հաշվել , որտեղ HASH-ը նույն ֆունկցիան է, որն օգտագործվել է ստորագրության ստեղծման ժամանակ։
- Թող -ը լինի e-ի ձախից վերցված բիթերը։
- Հաշվել և ։
- Հաշվել կորի կետը՝ ։ Եթե , ստորագրությունն անվավեր է։
- Ստորագրությունը վավեր է, եթե , հակառակ դեպքում՝ անվավեր։
Պետք է նշել, որ արդյունավետ իրականացումը հակադարձը կհաշվեր միայն մեկ անգամ։ Բացի այդ, Շամիրի հնարքի օգտագործմամբ երկու սկալյար բազմապատկումների գումարը՝ , կարող է հաշվարկվել ավելի արագ, քան երկու սկալյար բազմապատկումները առանձին կատարելու դեպքում[6]։
Ալգորիթմի ճշտություն
[խմբագրել | խմբագրել կոդը]Առաջին հայացքից անմիջապես ակնհայտ չէ, թե ինչու է ստուգումը ճիշտ աշխատել։ Դա տեսնելու համար C-ով նշանակենք ստուգման 5-րդ քայլում հաշվարկված կորի կետը.
Հանրային բանալու սահմանումից՝ , ստացվել է.
Քանի որ էլիպտիկ կորի սկալյար բազմապատկումը բաշխական է գումարման նկատմամբ, ստացվել է.
Ստուգման 4-րդ քայլում տրված -ի և -ի սահմանումները բացելով՝ ստացվել է.
Ընդհանուր անդամը դուրս բերելով՝ ստացվել է.
Ստորագրության 6-րդ քայլի s-ի սահմանումը բացելով՝ ստացվել է.
Քանի որ հակադարձի հակադարձը նույն սկզբնական տարրն է, իսկ տարրի և իր հակադարձի արտադրյալը նույնականությունն է, ստացվել է.
r-ի սահմանումից սա ստուգման 6-րդ քայլն է։
Սա ցույց է տվել միայն, որ ճիշտ ստորագրված հաղորդագրությունը ճիշտ կստուգվի։ Անվտանգ ստորագրության ալգորիթմի համար պահանջվել են նաև այլ հատկություններ, օրինակ՝ սխալ ստորագրված հաղորդագրությունների չվավերացվելը և կրիպտանալիզային հարձակումների նկատմամբ դիմադրությունը։
Հանրային բանալու վերականգնում
[խմբագրել | խմբագրել կոդը]Տրված լինելով m հաղորդագրությունը և այդ հաղորդագրության վրա Ալիսի ստորագրությունը՝ Բոբը կարող է, որոշ դեպքերում, վերականգնել Ալիսի հանրային բանալին[7].
- Ստուգել, որ r-ը և s-ը միջակայքի ամբողջ թվեր են։ Եթե ոչ, ստորագրությունն անվավեր է։
- Հաշվել կորի կետ, որտեղ -ը , , և այլն արժեքներից մեկն է, պայմանով, որ -ը չափազանց մեծ չէ կորի դաշտի համար, իսկ -ը այնպիսի արժեք է, որի դեպքում կորի հավասարումը բավարարվում է։ Պետք է նշել, որ կարող են լինել այս պայմաններին համապատասխանող մի քանի կորային կետեր, և յուրաքանչյուր տարբեր R արժեք հանգեցնում է տարբեր վերականգնված բանալու։
- Հաշվել , որտեղ HASH-ը նույն ֆունկցիան է, որն օգտագործվել է ստորագրության ստեղծման ժամանակ։
- Թող z-ը լինի e-ի ձախից վերցված բիթերը։
- Հաշվել և ։
- Հաշվել կորի կետը՝ ։
- Ստորագրությունը վավեր է, եթե -ն համընկնում է Ալիսի հանրային բանալու հետ։
- Ստորագրությունն անվավեր է, եթե բոլոր հնարավոր R կետերը փորձարկվել են, և դրանցից ոչ մեկը չի համընկել Ալիսի հանրային բանալու հետ։
Պետք է նշել, որ անվավեր ստորագրությունը կամ այլ հաղորդագրության ստորագրությունը կհանգեցնի սխալ հանրային բանալու վերականգնման։ Վերականգնման ալգորիթմը կարող է օգտագործվել ստորագրության վավերությունը ստուգելու համար միայն այն դեպքում, երբ ստորագրողի հանրային բանալին կամ դրա հեշը նախապես հայտնի է։
Վերականգնման ալգորիթմի ճշտություն
[խմբագրել | խմբագրել կոդը]Սկսենք վերականգնման 6-րդ քայլում տրված -ի սահմանումից.
Ստորագրման 4-րդ քայլում տրված սահմանումից ստացվել է.
Քանի որ էլիպտիկ կորի սկալյար բազմապատկումը բաշխական է գումարման նկատմամբ, ստացվել է.
Վերականգնման 5-րդ քայլում տրված -ի և -ի սահմանումները բացելով՝ ստացվել է.
Ստորագրության 6-րդ քայլի s-ի սահմանումը բացելով՝ ստացվել է.
Քանի որ տարրի և իր հակադարձի արտադրյալը նույնականությունն է, ստացվել է.
Առաջին և երկրորդ անդամները չեղարկվել են.
սահմանումից սա Ալիսի հանրային բանալին է։
Սա ցույց է տվել, որ ճիշտ ստորագրված հաղորդագրությունը կվերականգնի ճիշտ հանրային բանալին, եթե լրացուցիչ տեղեկությունը փոխանցվել է այնպես, որ հնարավոր լինի ստորագրության r արժեքից միարժեքորեն հաշվարկել կորի կետը։
Անվտանգություն
[խմբագրել | խմբագրել կոդը]2010 թվականի դեկտեմբերին fail0verflow անունով հանդես եկող խումբը հայտարարել է Sony-ի կողմից PlayStation 3 խաղային վահանակի ծրագրերը ստորագրելու համար օգտագործված ECDSA մասնավոր բանալու վերականգնման մասին։ Սակայն այս հարձակումը աշխատել է միայն այն պատճառով, որ Sony-ն պատշաճորեն չի իրականացրել ալգորիթմը, քանի որ -ն եղել է ստատիկ, ոչ թե պատահական։ Ինչպես նշվել է վերևում՝ ստորագրության ստեղծման ալգորիթմի բաժնում, սա -ն դարձրել է լուծելի՝ ամբողջ ալգորիթմը դարձնելով անօգուտ[8]։
2011 թվականի մարտի 29-ին երկու հետազոտող հրապարակել է IACR հոդված[9], որը ցույց է տվել, որ հնարավոր է ստանալ OpenSSL օգտագործող սերվերի TLS մասնավոր բանալին, եթե այն վավերացում է կատարում երկուական դաշտի վրա Էլիպտիկ կորերի DSA-ի միջոցով՝ ժամանակային հարձակման օգնությամբ[10]։ Խոցելիությունը շտկվել է OpenSSL 1.0.0e-ում[11]։
2013 թվականի օգոստոսին բացահայտվել է, որ Java-ի SecureRandom դասի որոշ իրականացումների սխալները երբեմն ստեղծել են արժեքի համընկնումներ։ Սա հաքերներին թույլ է տվել վերականգնել մասնավոր բանալիները՝ նրանց տալով նույն վերահսկողությունը բիթքոյն գործարքների նկատմամբ, ինչ ունեցել են օրինական բանալիների սեփականատերերը։ Օգտագործվել է նույն խոցելիությունը, որը բացահայտել է PS3-ի ստորագրման բանալին Android-ի որոշ հավելվածների իրականացումներում, որոնք օգտագործել են Java և հիմնվել են ECDSA-ի վրա՝ գործարքները վավերացնելու համար[12]։
Այս խնդիրը կարող է կանխվել -ի դետերմինիստական գեներացմամբ, ինչպես նկարագրվել է RFC 6979-ում։
Մտահոգություններ
[խմբագրել | խմբագրել կոդը]ECDSA-ի վերաբերյալ արտահայտվել են որոշ մտահոգություններ.
- Քաղաքական մտահոգություններ. NIST-ի ստեղծած կորերի վստահելիությունը կասկածի տակ է դրվել այն բացահայտումներից հետո, ըստ որոնց NSA-ն կամավոր կերպով հետնամուտքեր է ներառել ծրագրային ապահովման, սարքաշարային բաղադրիչների և հրապարակված ստանդարտների մեջ։ Հայտնի գաղտնագրագետները[13] կասկածներ են հայտնել[14][15] NIST կորերի նախագծման եղանակի վերաբերյալ, իսկ կամավոր աղտոտման դեպք արդեն ապացուցվել է անցյալում[16][17]։ Տե՛ս նաև libssh curve25519 introduction[18]։ Այնուամենայնիվ, դեռևս չկա ապացույց, որ անվանված NIST կորերը շահագործել են հազվադեպ թույլ կողմ։
- Տեխնիկական մտահոգություններ. ստանդարտը ճիշտ իրականացնելու դժվարությունը, դրա դանդաղությունը և նախագծային թերությունները, որոնք նվազեցրել են անվտանգությունը ոչ բավարար պաշտպանական իրականացումներում[19]։
Իրականացումներ
[խմբագրել | խմբագրել կոդը]Ստորև ներկայացված է գաղտնագրական գրադարանների ցանկ, որոնք ապահովում են ECDSA-ի աջակցություն.
Ծանոթագրություններ
[խմբագրել | խմբագրել կոդը]- ↑ Johnson, Don; Menezes, Alfred (1999). «The Elliptic Curve Digital Signature Algorithm (ECDSA)». Certicom Research. Canada. CiteSeerX 10.1.1.38.8014.
- ↑ «NIST FIPS 186-4, July 2013, pp. 19 and 26» (PDF). Արխիվացված (PDF) օրիգինալից 2016 թ․ դեկտեմբերի 27-ին. Վերցված է 2014 թ․ մարտի 17-ին.
- ↑ Console Hacking 2010 - PS3 Epic Fail Արխիվացված Դեկտեմբեր 15, 2014 Wayback Machine, page 123–128
- ↑ «Android Security Vulnerability». Արխիվացված օրիգինալից 2019 թ․ ապրիլի 7-ին. Վերցված է 2015 թ․ փետրվարի 24-ին.
- ↑ Pornin, T. (2013). RFC 6979 - Deterministic Usage of the Digital Signature Algorithm (DSA) and Elliptic Curve Digital Signature Algorithm (ECDSA) (Technical report). doi:10.17487/RFC6979. Վերցված է 2015 թ․ փետրվարի 24-ին.
- ↑ «The Double-Base Number System in Elliptic Curve Cryptography» (PDF). Արխիվացված (PDF) օրիգինալից 2011 թ․ հուլիսի 26-ին. Վերցված է 2014 թ․ ապրիլի 22-ին.
- ↑ Daniel R. L. Brown SECG SEC 1: Elliptic Curve Cryptography (Version 2.0) https://www.secg.org/sec1-v2.pdf
- ↑ Bendel, Mike (2010-12-29). «Hackers Describe PS3 Security As Epic Fail, Gain Unrestricted Access». Exophase.com. Արխիվացված օրիգինալից 2019 թ․ ապրիլի 7-ին. Վերցված է 2011-01-05-ին.
- ↑ «Cryptology ePrint Archive: Report 2011/232». Արխիվացված օրիգինալից 2018 թ․ դեկտեմբերի 8-ին. Վերցված է 2015 թ․ փետրվարի 24-ին.
- ↑ «Vulnerability Note VU#536044 - OpenSSL leaks ECDSA private key through a remote timing attack». www.kb.cert.org. Արխիվացված օրիգինալից 2019 թ․ ապրիլի 7-ին. Վերցված է 2011 թ․ մայիսի 24-ին.
- ↑ «ChangeLog». OpenSSL Project. Արխիվացված օրիգինալից 2020 թ․ օգոստոսի 9-ին. Վերցված է 2014 թ․ ապրիլի 22-ին.
- ↑ «Android bug batters Bitcoin wallets». The Register. 2013 թ․ օգոստոսի 12. Արխիվացված օրիգինալից 2013 թ․ օգոստոսի 15-ին. Վերցված է 2017 թ․ օգոստոսի 27-ին.
- ↑ Schneier, Bruce (2013 թ․ սեպտեմբերի 5). «The NSA Is Breaking Most Encryption on the Internet». Schneier on Security. Արխիվացված օրիգինալից 2017 թ․ դեկտեմբերի 15-ին. Վերցված է 2018 թ․ հունվարի 11-ին.
- ↑ «SafeCurves: choosing safe curves for elliptic-curve cryptography». 2013 թ․ հոկտեմբերի 25. Արխիվացված օրիգինալից 2019 թ․ ապրիլի 7-ին. Վերցված է 2018 թ․ հունվարի 11-ին.
- ↑ Bernstein, Daniel J.; Lange, Tanja (2013 թ․ մայիսի 31). «Security dangers of the NIST curves» (PDF). Արխիվացված (PDF) օրիգինալից 2019 թ․ մայիսի 28-ին. Վերցված է 2018 թ․ հունվարի 11-ին.
- ↑ Schneier, Bruce (2007 թ․ նոյեմբերի 15). «The Strange Story of Dual_EC_DRBG». Schneier on Security. Արխիվացված օրիգինալից 2019 թ․ ապրիլի 23-ին. Վերցված է 2018 թ․ հունվարի 11-ին.
- ↑ Greenemeier, Larry (2013 թ․ սեպտեմբերի 18). «NSA Efforts to Evade Encryption Technology Damaged U.S. Cryptography Standard». Scientific American. Արխիվացված օրիգինալից 2017 թ․ դեկտեմբերի 24-ին. Վերցված է 2018 թ․ հունվարի 11-ին.
- ↑ «curve25519-sha256@libssh.org.txt\doc - projects/libssh.git». libssh shared repository. Արխիվացված օրիգինալից 2019 թ․ մարտի 23-ին. Վերցված է 2018 թ․ հունվարի 11-ին.
- ↑ Bernstein, Daniel J. (2014 թ․ մարտի 23). «How to design an elliptic-curve signature system». The cr.yp.to blog. Արխիվացված օրիգինալից 2014 թ․ մարտի 23-ին. Վերցված է 2018 թ․ հունվարի 11-ին.
Գրականություն
[խմբագրել | խմբագրել կոդը]- Accredited Standards Committee X9, ASC X9 Issues New Standard for Public Key Cryptography/ECDSA, Oct. 6, 2020. Source
- Accredited Standards Committee X9, American National Standard X9.62-2005, Public Key Cryptography for the Financial Services Industry, The Elliptic Curve Digital Signature Algorithm (ECDSA), November 16, 2005.
- Certicom Research, Standards for efficient cryptography, SEC 1: Elliptic Curve Cryptography, Version 2.0, May 21, 2009.
- López, J. and Dahab, R. An Overview of Elliptic Curve Cryptography, Technical Report IC-00-10, State University of Campinas, 2000.
- Daniel R. L. Brown, Generic Groups, Collision Resistance, and ECDSA, Designs, Codes and Cryptography, 35, 119–152, 2005. ePrint version
- Ian F. Blake, Gadiel Seroussi editors, Advances in Elliptic Curve Cryptography, London Mathematical Society Lecture Note Series 317, Cambridge University Press, 2005.
- Hankerson, D.; Vanstone, S.; Menezes, A. (2004). Guide to Elliptic Curve Cryptography. Springer Professional Computing. New York: Springer. doi:10.1007/b97644. ISBN 0-387-95273-X. S2CID 720546.