Jump to content

ECDSA

Վիքիպեդիայից՝ ազատ հանրագիտարանից

էլիպտիկ կորի թվային ստորագրության ալգորիթմ (ECDSA), Թվային ստորագրության ալգորիթմի (DSA) տարբերակ, որն օգտագործել է էլիպտիկ կորերի գաղտնագրություն։

Բանալու և ստորագրության չափեր

[խմբագրել | խմբագրել կոդը]

Ինչպես ընդհանուր առմամբ էլիպտիկ կորերի գաղտնագրության դեպքում, ECDSA-ի համար անհրաժեշտ համարվող մասնավոր բանալիի բիթային չափը մոտավորապես երկու անգամ մեծ է եղել անվտանգության մակարդակից՝ բիթերով արտահայտված[1]։ Օրինակ՝ 80 բիթ անվտանգության մակարդակի դեպքում, ինչը նշանակել է, որ հարձակվողին մասնավոր բանալին գտնելու համար առավելագույնը մոտ գործողություն է պահանջվել, ECDSA մասնավոր բանալու չափը պետք է լիներ 160 բիթ։ Մյուս կողմից՝ ստորագրության չափը նույնն է եղել ինչպես DSA-ի, այնպես էլ ECDSA-ի համար՝ մոտավորապես բիթ, որտեղ բանաձևի ցուցիչն է, այսինքն՝ մոտ 320 բիթ՝ 80 բիթ անվտանգության մակարդակի համար, որը համարժեք է գործողության։

Ստորագրության ստեղծման ալգորիթմ

[խմբագրել | խմբագրել կոդը]

Ենթադրենք՝ Ալիսը ցանկացել է ստորագրված հաղորդագրություն ուղարկել Բոբին։ Սկզբում նրանք պետք է համաձայնեցնեն կորի պարամետրերը՝ ։ Բացի կորի դաշտից և հավասարումից, անհրաժեշտ է եղել -ն՝ պարզ կարգ ունեցող բազային կետը կորի վրա։ կետի ադիտիվ կարգն է։

ՊարամետրՆկարագրություն
CURVEօգտագործված էլիպտիկ կորի դաշտը և հավասարումը
Gէլիպտիկ կորի բազային կետը՝ կորի վրա գտնվող կետ, որը առաջացրել է մեծ պարզ կարգ ունեցող ենթախումբ
nG-ի ամբողջ կարգը, ինչը նշանակում է, որ , որտեղ -ն նույնականության տարրն է
մասնավոր բանալին, որը ընտրվել է պատահականորեն
հանրային բանալին՝ , որը հաշվարկվել է էլիպտիկ կորի միջոցով
mուղարկվող հաղորդագրությունը

Բազային կետի կարգը պետք է լինի պարզ։ Իրականում ենթադրվել է, որ օղակի յուրաքանչյուր ոչ զրոյական տարր շրջելի է, ուստի -ը պետք է լինի դաշտ։ Դրանից հետևել է, որ -ը պետք է լինի պարզ թիվ՝ տես նաև Բեզուի նույնություն։

Ալիսը ստեղծել է բանալիների զույգ, որը կազմված է եղել միջակայքից պատահականորեն ընտրված մասնավոր բանալի ամբողջ թվից և հանրային բանալի կետից։ Այստեղ -ը նշանակել է էլիպտիկ կորի կետի բազմապատկում սկալյարով։

հաղորդագրությունը ստորագրելու համար Ալիսը հետևել է այս քայլերին.

  1. Հաշվել ։ Այստեղ HASH-ը գաղտնագրական հեշ ֆունկցիա է, օրինակ՝ SHA-2, որի ելքը փոխակերպվել է ամբողջ թվի։
  2. Թող -ը լինի -ի ձախից վերցված բիթերը, որտեղ խմբի կարգի բիթային երկարությունն է։ Պետք է նշել, որ -ը կարող է լինել մեծ -ից, բայց ոչ ավելի երկար[2]։
  3. Ընտրել գաղտնագրորեն անվտանգ պատահական ամբողջ թիվ միջակայքից։
  4. Հաշվել կորի կետը՝ ։
  5. Հաշվել ։ Եթե , վերադառնալ 3-րդ քայլին։
  6. Հաշվել ։ Եթե , վերադառնալ 3-րդ քայլին։
  7. Ստորագրությունը զույգն է։ Ընդ որում՝ -ը նույնպես վավեր ստորագրություն է։

Ինչպես նշել է ստանդարտը, -ն ոչ միայն պետք է գաղտնի լինի, այլ նաև շատ կարևոր է տարբեր ստորագրությունների համար ընտրել տարբեր ։ Հակառակ դեպքում 6-րդ քայլի հավասարումը կարող է լուծվել մասնավոր բանալու նկատմամբ։ Եթե տրված են երկու ստորագրություններ՝ և , որոնք օգտագործել են նույն անհայտ -ն տարբեր հայտնի հաղորդագրությունների՝ -ի և -ի համար, հարձակվողը կարող է հաշվարկել -ը և -ը։ Քանի որ , որտեղ այս պարբերության բոլոր գործողությունները կատարվել են ըստ մոդուլ -ի, հարձակվողը կարող է գտնել ։ Քանի որ , հարձակվողը արդեն կարող է հաշվարկել մասնավոր բանալին՝ ։

Այս իրականացման սխալը, օրինակ, օգտագործվել է PlayStation 3 խաղային վահանակի ստորագրման բանալին ստանալու համար[3]։

ECDSA ստորագրությունը կարող է մասնավոր բանալիներ արտահոսել նաև այն դեպքում, երբ -ն ստեղծվել է սխալ պատահական թվերի գեներատորով։ Պատահական թվերի գեներացման այդպիսի ձախողումը 2013 թվականի օգոստոսին պատճառ է դարձել, որ Android Bitcoin Wallet-ի օգտատերերը կորցնեն իրենց միջոցները[4]։

Ապահովելու համար, որ -ն յուրաքանչյուր հաղորդագրության համար եզակի լինի, հնարավոր է ամբողջությամբ շրջանցել պատահական թվերի գեներացումը և ստեղծել դետերմինիստական ստորագրություններ՝ -ն ստանալով ինչպես հաղորդագրությունից, այնպես էլ մասնավոր բանալուց[5]։

Ստորագրության ստուգման ալգորիթմ

[խմբագրել | խմբագրել կոդը]

Որպեսզի Բոբը կարողանա վավերացնել Ալիսի ստորագրությունը հաղորդագրության վրա, նա պետք է ունենա նրա հանրային բանալիի կորային կետի՝ -ի պատճենը։ Բոբը կարող է ստուգել, որ -ն վավեր կորային կետ է, հետևյալ կերպ.

  1. Ստուգել, որ -ն հավասար չէ նույնականության տարրին՝ O-ին, և դրա կոորդինատները վավեր են։
  2. Ստուգել, որ -ն գտնվում է կորի վրա։
  3. Ստուգել, որ ։

Դրանից հետո Բոբը հետևել է այս քայլերին.

  1. Ստուգել, որ r-ը և s միջակայքի ամբողջ թվեր են։ Եթե ոչ, ստորագրությունն անվավեր է։
  2. Հաշվել , որտեղ HASH-ը նույն ֆունկցիան է, որն օգտագործվել է ստորագրության ստեղծման ժամանակ։
  3. Թող -ը լինի e-ի ձախից վերցված բիթերը։
  4. Հաշվել և ։
  5. Հաշվել կորի կետը՝ ։ Եթե , ստորագրությունն անվավեր է։
  6. Ստորագրությունը վավեր է, եթե , հակառակ դեպքում՝ անվավեր։

Պետք է նշել, որ արդյունավետ իրականացումը հակադարձը կհաշվեր միայն մեկ անգամ։ Բացի այդ, Շամիրի հնարքի օգտագործմամբ երկու սկալյար բազմապատկումների գումարը՝ , կարող է հաշվարկվել ավելի արագ, քան երկու սկալյար բազմապատկումները առանձին կատարելու դեպքում[6]։

Ալգորիթմի ճշտություն

[խմբագրել | խմբագրել կոդը]

Առաջին հայացքից անմիջապես ակնհայտ չէ, թե ինչու է ստուգումը ճիշտ աշխատել։ Դա տեսնելու համար C-ով նշանակենք ստուգման 5-րդ քայլում հաշվարկված կորի կետը.

Հանրային բանալու սահմանումից՝ , ստացվել է.

Քանի որ էլիպտիկ կորի սկալյար բազմապատկումը բաշխական է գումարման նկատմամբ, ստացվել է.

Ստուգման 4-րդ քայլում տրված -ի և -ի սահմանումները բացելով՝ ստացվել է.

Ընդհանուր անդամը դուրս բերելով՝ ստացվել է.

Ստորագրության 6-րդ քայլի s-ի սահմանումը բացելով՝ ստացվել է.

Քանի որ հակադարձի հակադարձը նույն սկզբնական տարրն է, իսկ տարրի և իր հակադարձի արտադրյալը նույնականությունն է, ստացվել է.

r-ի սահմանումից սա ստուգման 6-րդ քայլն է։

Սա ցույց է տվել միայն, որ ճիշտ ստորագրված հաղորդագրությունը ճիշտ կստուգվի։ Անվտանգ ստորագրության ալգորիթմի համար պահանջվել են նաև այլ հատկություններ, օրինակ՝ սխալ ստորագրված հաղորդագրությունների չվավերացվելը և կրիպտանալիզային հարձակումների նկատմամբ դիմադրությունը։

Հանրային բանալու վերականգնում

[խմբագրել | խմբագրել կոդը]

Տրված լինելով m հաղորդագրությունը և այդ հաղորդագրության վրա Ալիսի ստորագրությունը՝ Բոբը կարող է, որոշ դեպքերում, վերականգնել Ալիսի հանրային բանալին[7].

  1. Ստուգել, որ r-ը և s միջակայքի ամբողջ թվեր են։ Եթե ոչ, ստորագրությունն անվավեր է։
  2. Հաշվել կորի կետ, որտեղ , , և այլն արժեքներից մեկն է, պայմանով, որ -ը չափազանց մեծ չէ կորի դաշտի համար, իսկ -ը այնպիսի արժեք է, որի դեպքում կորի հավասարումը բավարարվում է։ Պետք է նշել, որ կարող են լինել այս պայմաններին համապատասխանող մի քանի կորային կետեր, և յուրաքանչյուր տարբեր R արժեք հանգեցնում է տարբեր վերականգնված բանալու։
  3. Հաշվել , որտեղ HASH-ը նույն ֆունկցիան է, որն օգտագործվել է ստորագրության ստեղծման ժամանակ։
  4. Թող z-ը լինի e-ի ձախից վերցված բիթերը։
  5. Հաշվել և ։
  6. Հաշվել կորի կետը՝ ։
  7. Ստորագրությունը վավեր է, եթե -ն համընկնում է Ալիսի հանրային բանալու հետ։
  8. Ստորագրությունն անվավեր է, եթե բոլոր հնարավոր 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 թվականի օգոստոսին բացահայտվել է, որ JavaSecureRandom դասի որոշ իրականացումների սխալները երբեմն ստեղծել են արժեքի համընկնումներ։ Սա հաքերներին թույլ է տվել վերականգնել մասնավոր բանալիները՝ նրանց տալով նույն վերահսկողությունը բիթքոյն գործարքների նկատմամբ, ինչ ունեցել են օրինական բանալիների սեփականատերերը։ Օգտագործվել է նույն խոցելիությունը, որը բացահայտել է PS3-ի ստորագրման բանալին Android-ի որոշ հավելվածների իրականացումներում, որոնք օգտագործել են Java և հիմնվել են ECDSA-ի վրա՝ գործարքները վավերացնելու համար[12]։

Այս խնդիրը կարող է կանխվել -ի դետերմինիստական գեներացմամբ, ինչպես նկարագրվել է RFC 6979-ում։

Մտահոգություններ

[խմբագրել | խմբագրել կոդը]

ECDSA-ի վերաբերյալ արտահայտվել են որոշ մտահոգություններ.

  1. Քաղաքական մտահոգություններ. NIST-ի ստեղծած կորերի վստահելիությունը կասկածի տակ է դրվել այն բացահայտումներից հետո, ըստ որոնց NSA-ն կամավոր կերպով հետնամուտքեր է ներառել ծրագրային ապահովման, սարքաշարային բաղադրիչների և հրապարակված ստանդարտների մեջ։ Հայտնի գաղտնագրագետները[13] կասկածներ են հայտնել[14][15] NIST կորերի նախագծման եղանակի վերաբերյալ, իսկ կամավոր աղտոտման դեպք արդեն ապացուցվել է անցյալում[16][17]։ Տե՛ս նաև libssh curve25519 introduction[18]։ Այնուամենայնիվ, դեռևս չկա ապացույց, որ անվանված NIST կորերը շահագործել են հազվադեպ թույլ կողմ։
  2. Տեխնիկական մտահոգություններ. ստանդարտը ճիշտ իրականացնելու դժվարությունը, դրա դանդաղությունը և նախագծային թերությունները, որոնք նվազեցրել են անվտանգությունը ոչ բավարար պաշտպանական իրականացումներում[19]։

Իրականացումներ

[խմբագրել | խմբագրել կոդը]

Ստորև ներկայացված է գաղտնագրական գրադարանների ցանկ, որոնք ապահովում են ECDSA-ի աջակցություն.

Ծանոթագրություններ

[խմբագրել | խմբագրել կոդը]
  1. Johnson, Don; Menezes, Alfred (1999). «The Elliptic Curve Digital Signature Algorithm (ECDSA)». Certicom Research. Canada. CiteSeerX 10.1.1.38.8014.
  2. «NIST FIPS 186-4, July 2013, pp. 19 and 26» (PDF). Արխիվացված (PDF) օրիգինալից 2016 թ․ դեկտեմբերի 27-ին. Վերցված է 2014 թ․ մարտի 17-ին.
  3. Console Hacking 2010 - PS3 Epic Fail Արխիվացված Դեկտեմբեր 15, 2014 Wayback Machine, page 123–128
  4. «Android Security Vulnerability». Արխիվացված օրիգինալից 2019 թ․ ապրիլի 7-ին. Վերցված է 2015 թ․ փետրվարի 24-ին.
  5. 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-ին.
  6. «The Double-Base Number System in Elliptic Curve Cryptography» (PDF). Արխիվացված (PDF) օրիգինալից 2011 թ․ հուլիսի 26-ին. Վերցված է 2014 թ․ ապրիլի 22-ին.
  7. Daniel R. L. Brown SECG SEC 1: Elliptic Curve Cryptography (Version 2.0) https://www.secg.org/sec1-v2.pdf
  8. Bendel, Mike (2010-12-29). «Hackers Describe PS3 Security As Epic Fail, Gain Unrestricted Access». Exophase.com. Արխիվացված օրիգինալից 2019 թ․ ապրիլի 7-ին. Վերցված է 2011-01-05-ին.
  9. «Cryptology ePrint Archive: Report 2011/232». Արխիվացված օրիգինալից 2018 թ․ դեկտեմբերի 8-ին. Վերցված է 2015 թ․ փետրվարի 24-ին.
  10. «Vulnerability Note VU#536044 - OpenSSL leaks ECDSA private key through a remote timing attack». www.kb.cert.org. Արխիվացված օրիգինալից 2019 թ․ ապրիլի 7-ին. Վերցված է 2011 թ․ մայիսի 24-ին.
  11. «ChangeLog». OpenSSL Project. Արխիվացված օրիգինալից 2020 թ․ օգոստոսի 9-ին. Վերցված է 2014 թ․ ապրիլի 22-ին.
  12. «Android bug batters Bitcoin wallets». The Register. 2013 թ․ օգոստոսի 12. Արխիվացված օրիգինալից 2013 թ․ օգոստոսի 15-ին. Վերցված է 2017 թ․ օգոստոսի 27-ին.
  13. Schneier, Bruce (2013 թ․ սեպտեմբերի 5). «The NSA Is Breaking Most Encryption on the Internet». Schneier on Security. Արխիվացված օրիգինալից 2017 թ․ դեկտեմբերի 15-ին. Վերցված է 2018 թ․ հունվարի 11-ին.
  14. «SafeCurves: choosing safe curves for elliptic-curve cryptography». 2013 թ․ հոկտեմբերի 25. Արխիվացված օրիգինալից 2019 թ․ ապրիլի 7-ին. Վերցված է 2018 թ․ հունվարի 11-ին.
  15. Bernstein, Daniel J.; Lange, Tanja (2013 թ․ մայիսի 31). «Security dangers of the NIST curves» (PDF). Արխիվացված (PDF) օրիգինալից 2019 թ․ մայիսի 28-ին. Վերցված է 2018 թ․ հունվարի 11-ին.
  16. Schneier, Bruce (2007 թ․ նոյեմբերի 15). «The Strange Story of Dual_EC_DRBG». Schneier on Security. Արխիվացված օրիգինալից 2019 թ․ ապրիլի 23-ին. Վերցված է 2018 թ․ հունվարի 11-ին.
  17. Greenemeier, Larry (2013 թ․ սեպտեմբերի 18). «NSA Efforts to Evade Encryption Technology Damaged U.S. Cryptography Standard». Scientific American. Արխիվացված օրիգինալից 2017 թ․ դեկտեմբերի 24-ին. Վերցված է 2018 թ․ հունվարի 11-ին.
  18. «curve25519-sha256@libssh.org.txt\doc - projects/libssh.git». libssh shared repository. Արխիվացված օրիգինալից 2019 թ․ մարտի 23-ին. Վերցված է 2018 թ․ հունվարի 11-ին.
  19. 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.

Արտաքին հղումներ

[խմբագրել | խմբագրել կոդը]