Äau Habr!
Š
Å ajÄ raksta daÄ¼Ä mÄs sÄ«kÄk aplÅ«kosim citu pieeju, kas izmanto sliekÅ”Åa parakstus.
Mazliet kriptogrÄfijas
Lai saprastu, kÄ darbojas sliekÅ”Åa paraksti, jums ir jÄsaprot nedaudz pamata kriptogrÄfija. MÄs izmantosim divus jÄdzienus: skalÄri vai vienkÄrÅ”i skaitļus, kurus apzÄ«mÄsim ar mazajiem burtiem (x, y) un eliptiskÄs lÄ«knes punkti, kurus apzÄ«mÄsim ar lielajiem burtiem.
Lai saprastu sliekÅ”Åa parakstu pamatus, jums nav jÄsaprot, kÄ darbojas eliptiskÄs lÄ«knes, izÅemot dažas pamata lietas.
-
Punktus uz eliptiskÄs lÄ«knes var pievienot un reizinÄt ar skalÄru (reizinÄÅ”anu ar skalÄru mÄs apzÄ«mÄsim kÄ xG, lai gan apzÄ«mÄjums Gx arÄ« bieži lietots literatÅ«rÄ). SaskaitÄ«Å”anas un reizinÄÅ”anas ar skalÄru rezultÄts ir eliptiskÄs lÄ«knes punkts.
-
Zinot tikai bÅ«tÄ«bu G un tÄ reizinÄjums ar skalÄru xG nevar aprÄÄ·inÄt x.
MÄs izmantosim arÄ« polinoma jÄdzienu p(x) grÄds k-1. Jo Ä«paÅ”i mÄs izmantosim Å”Ädu polinomu Ä«paŔību: ja mÄs zinÄm vÄrtÄ«bu p(x) jebkuram k atŔķirÄ«gs x (un mums nav vairÄk informÄcijas par p(x)), mÄs varam aprÄÄ·inÄt p(x) kÄdam citam x.
Interesanti, ka jebkuram polinomam p(x) un kÄdu punktu uz lÄ«knes Gzinot nozÄ«mi p(x)G jebkuram k dažÄdas nozÄ«mes x, mÄs varam arÄ« aprÄÄ·inÄt p(x)G jebkuram x.
Å Ä« ir pietiekami daudz informÄcijas, lai izpÄtÄ«tu, kÄ darbojas sliekÅ”Åa paraksti un kÄ tos izmantot nejauÅ”u skaitļu Ä£enerÄÅ”anai.
NejauÅ”o skaitļu Ä£enerators uz sliekÅ”Åa parakstiem
Teiksim tÄ n dalÄ«bnieki vÄlas Ä£enerÄt nejauÅ”u skaitu, un mÄs vÄlamies, lai tajÄ piedalÄs ikviens k viÅu bija pietiekami daudz, lai Ä£enerÄtu numuru, bet tÄ, lai uzbrucÄji, kas kontrolÄ k-1 vai mazÄk dalÄ«bnieku nevarÄja paredzÄt vai ietekmÄt Ä£enerÄto skaitu.
PieÅemsim, ka pastÄv Å”Äds polinoms p(x) grÄds k-1, ko zina pirmais dalÄ«bnieks p (1), otrs zina p(2), un tÄ tÄlÄk (n- tas zina p(n)). MÄs arÄ« pieÅemam, ka kÄdam iepriekÅ” noteiktam punktam G visi zina p(x)G visÄm vÄrtÄ«bÄm x. MÄs piezvanÄ«sim p(i) "privÄtÄ sastÄvdaļa" idalÄ«bnieks (jo tikai idalÄ«bnieks viÅu pazÄ«st), un p(i)G "publiskais komponents" i-tÄ dalÄ«bniece (jo visi dalÄ«bnieki viÅu pazÄ«st). KÄ jÅ«s atceraties, zinÄÅ”anas p(i)G nepietiek, lai atjaunotu p(i).
Izveidojot Å”Ädu polinomu, lai tikai i-Pirmais dalÄ«bnieks un neviens cits nezinÄja viÅa privÄto komponentu - Ŕī ir vissarežģītÄkÄ un interesantÄkÄ protokola daļa, un mÄs to analizÄsim tÄlÄk. PagaidÄm pieÅemsim, ka mums ir Å”Äds polinoms un visi dalÄ«bnieki zina savus privÄtos komponentus.
KÄ mÄs varam izmantot Å”Ädu polinomu, lai Ä£enerÄtu nejauÅ”u skaitli? Vispirms mums ir nepiecieÅ”ama virkne, kas iepriekÅ” nav izmantota kÄ Ä£eneratora ievade. BlokÄ·Ädes gadÄ«jumÄ pÄdÄjÄ bloka hash h ir labs kandidÄts Å”Ädai lÄ«nijai. Ä»aujiet dalÄ«bniekiem izveidot nejauÅ”u skaitli, izmantojot h kÄ sÄklas. DalÄ«bnieki vispirms konvertÄ h uz punktu uz lÄ«knes, izmantojot jebkuru iepriekÅ” definÄtu funkciju:
H = skalÄrs uz punktu(h)
PÄc tam katrs dalÄ«bnieks i aprÄÄ·ina un publicÄ Hi = p(i)H, ko viÅi var darÄ«t, jo viÅi zina p(i) un H. InformÄcijas atklÄÅ”ana Hes neļauju citiem dalÄ«bniekiem atjaunot privÄto komponentu ith dalÄ«bnieks, un tÄpÄc vienu privÄto komponentu komplektu var izmantot no bloka uz bloku. TÄdÄjÄdi tÄlÄk aprakstÄ«tais dÄrgais polinomu Ä£enerÄÅ”anas algoritms ir jÄizpilda tikai vienu reizi.
Kad k dalÄ«bniekiem tika veikta autopsija Hi = p(i)H, katrs var izskaitļot Hx = p(x)H visiem x pateicoties polinomu Ä«paŔībÄm, par kurÄm mÄs runÄjÄm pÄdÄjÄ sadaļÄ. Å obrÄ«d visi dalÄ«bnieki aprÄÄ·ina H0 = p(0)H, un Å”is ir iegÅ«tais nejauÅ”ais skaitlis. LÅ«dzu, Åemiet vÄrÄ, ka neviens to nezina p(0), un tÄpÄc vienÄ«gais veids, kÄ aprÄÄ·inÄt p(0)H ā tÄ ir interpolÄcija p(x)H, kas ir iespÄjams tikai tad, kad k vÄrtÄ«bas p(i)H zinÄms. Atverot jebkuru mazÄku daudzumu p(i)H nesniedz nekÄdu informÄciju par p(0)H.
IepriekÅ” minÄtajam Ä£eneratoram ir visas vÄlamÄs Ä«paŔības: tikai uzbrucÄji kontrolÄ k-1 vai mazÄk dalÄ«bniekiem nav informÄcijas vai ietekmes uz secinÄjumu, savukÄrt jebkura k dalÄ«bnieki var aprÄÄ·inÄt iegÅ«to skaitli un jebkuru tÄ apakÅ”kopu k dalÄ«bnieki vienmÄr sasniegs vienu un to paÅ”u rezultÄtu ar vienu un to paÅ”u sÄklu.
Ir viena problÄma, no kuras mÄs iepriekÅ” rÅ«pÄ«gi izvairÄ«jÄmies. Lai interpolÄcija darbotos, ir svarÄ«gi, lai vÄrtÄ«ba Hi, kuru publicÄja katrs dalÄ«bnieks i tas tieÅ”Äm bija tas pats p(i)H. TÄ kÄ neviens, izÅemot i-th dalÄ«bnieks nezina p(i), neviens, izÅemot i-dalÄ«bnieks to nevar pÄrbaudÄ«t Hi faktiski aprÄÄ·inÄts pareizi un bez kriptogrÄfiska pareizÄ«bas pierÄdÄ«juma Hes uzbrucÄjs var publicÄt jebkuru vÄrtÄ«bu kÄ Sveiki, un patvaļīgi ietekmÄt nejauÅ”o skaitļu Ä£eneratora izvadi:
DažÄdas H_1 vÄrtÄ«bas, ko nosÅ«tÄ«jis pirmais dalÄ«bnieks, rada atŔķirÄ«gu rezultÄtu H_0
Ir vismaz divi veidi, kÄ pierÄdÄ«t pareizÄ«bu Hi, mÄs tos apsvÄrsim pÄc polinoma Ä£enerÄÅ”anas analÄ«zes.
Polinomu paaudze
PÄdÄjÄ sadaÄ¼Ä mÄs pieÅÄmÄm, ka mums ir Å”Äds polinoms p(x) grÄds k-1 ka dalÄ«bnieks i zina p(i), un nevienam citam nav nekÄdas informÄcijas par Å”o vÄrtÄ«bu. NÄkamajÄ sadaÄ¼Ä mums tas bÅ«s vajadzÄ«gs arÄ« kÄdam iepriekÅ” noteiktam punktam G visi zinÄja p(x)G visiem x.
Å ajÄ sadaÄ¼Ä mÄs pieÅemsim, ka katram dalÄ«bniekam lokÄli ir kÄda privÄtÄ atslÄga xi, tÄ, lai visi zinÄtu atbilstoÅ”o publisko atslÄgu Xi.
Viens no iespÄjamiem polinoma Ä£enerÄÅ”anas protokoliem ir Å”Äds:
-
Katrs dalÄ«bnieks i lokÄli izveido patvaļīgu polinomu pi(x) pakÄpe k-1. PÄc tam viÅi nosÅ«ta katru dalÄ«bnieku j vÄrtÄ«ba pi(j), Å”ifrÄts ar publisko atslÄgu Xj. TÄdÄjÄdi tikai i-th Šø j-th dalÄ«bnieks zina pi(j). DalÄ«bnieks i arÄ« publiski paziÅo pi(j)G visiem j no 1 lÄ«dz k iekļaujoÅ”s.
-
Visi dalÄ«bnieki izmanto zinÄmu vienprÄtÄ«bu, lai izvÄlÄtos k dalÄ«bnieki, kuru polinomi tiks izmantoti. TÄ kÄ daži dalÄ«bnieki var bÅ«t bezsaistÄ, mÄs nevaram gaidÄ«t, lÄ«dz visi n dalÄ«bnieki publicÄs polinomus. Å Ä«s darbÄ«bas rezultÄts ir komplekts Z kas sastÄv vismaz no k 1. solÄ« izveidotie polinomi.
-
DalÄ«bnieki pÄrliecinÄs, ka vÄrtÄ«bas viÅi zina pi(j) atbilst publiski paziÅotajam pi(j)G. PÄc Ŕīs darbÄ«bas Z tikai polinomi, par kuriem nosÅ«tÄ«ti privÄti pi(j) atbilst publiski paziÅotajam pi(j)G.
-
Katrs dalÄ«bnieks j aprÄÄ·ina savu privÄto komponentu p(j) kÄ summa pi(j) visiem i Š² Z. Katrs dalÄ«bnieks arÄ« aprÄÄ·ina visas vÄrtÄ«bas p(x)G kÄ summa pi(x)G visiem i Š² Z.
LÅ«dzu, Åemiet vÄrÄ, ka p(x) ā tas tieÅ”Äm ir polinoms k-1, jo tÄ ir indivÄ«da summa pi(x), no kuriem katrs ir pakÄpes polinoms k-1. PÄc tam Åemiet vÄrÄ, ka, kamÄr katrs dalÄ«bnieks j zina p(j), viÅiem nav informÄcijas par p(x) par x ā j. PatieÅ”Äm, lai aprÄÄ·inÄtu Å”o vÄrtÄ«bu, viÅiem ir jÄzina viss pi(x), un tik ilgi, kamÄr dalÄ«bnieks j nezina vismaz vienu no atlasÄ«tajiem polinomiem, viÅiem nav pietiekamas informÄcijas par p(x).
Å is ir viss polinoma Ä£enerÄÅ”anas process, kas bija nepiecieÅ”ams pÄdÄjÄ sadaļÄ. IepriekÅ” minÄtÄ 1., 2. un 4. darbÄ«ba ir diezgan acÄ«mredzama. Bet 3. solis nav tik triviÄls.
KonkrÄti, mums ir jÄspÄj pierÄdÄ«t, ka tas ir Å”ifrÄts pi(j) tieÅ”Äm atbilst publicÄtajiem pi(j)G. Ja nevaram pierÄdÄ«t, uzbrucÄjs i tÄ vietÄ var nosÅ«tÄ«t atkritumus pi(j) dalÄ«bniekam j, un dalÄ«bnieks j nevarÄs iegÅ«t Ä«sto nozÄ«mi pi(j), un nevarÄs aprÄÄ·inÄt savu privÄto komponentu.
Ir kriptogrÄfijas protokols, kas ļauj izveidot papildu ziÅojumu pierÄdÄ«jumsi(j), tÄ, ka jebkurÅ” dalÄ«bnieks, kam ir kÄda vÄrtÄ«ba e, kÄ arÄ« pierÄdÄ«jums(j) Šø pi(j)G, var to lokÄli pÄrbaudÄ«t e - tas tieÅ”Äm ir pi(j), Å”ifrÄts ar dalÄ«bnieka atslÄgu j. DiemžÄl Å”Ädu pierÄdÄ«jumu apjoms ir neticami liels, un, Åemot vÄrÄ to, ka tas ir jÄpublicÄ O(nk) Å Ädus pierÄdÄ«jumus nevar izmantot Å”im nolÅ«kam.
TÄ vietÄ, lai to pierÄdÄ«tu pi(j) atbilst pi(j)G polinomu Ä£enerÄÅ”anas protokolÄ varam atvÄlÄt ļoti ilgu laika periodu, kura laikÄ visi dalÄ«bnieki pÄrbauda saÅemto Å”ifrÄto pi(j), un ja atÅ”ifrÄtais ziÅojums neatbilst sabiedrÄ«bai pi(j)G, viÅi publicÄ kriptogrÄfisku pierÄdÄ«jumu tam, ka saÅemtais Å”ifrÄtais ziÅojums ir nepareizs. PierÄdiet, ka ziÅa nÄ atbilst pi(G) daudz vieglÄk, nekÄ pierÄdÄ«t, ka tas atbilst. JÄÅem vÄrÄ, ka tas paredz, ka katram dalÄ«bniekam vismaz vienu reizi ir jÄparÄdÄs tieÅ”saistÄ laikÄ, kas atvÄlÄts Å”Ädu pierÄdÄ«jumu izveidei, un paļaujas uz pieÅÄmumu, ka, publicÄjot Å”Ädu pierÄdÄ«jumu, tas sasniegs visus pÄrÄjos dalÄ«bniekus tajÄ paÅ”Ä atvÄlÄtajÄ laikÄ.
Ja dalÄ«bnieks Å”ajÄ laika periodÄ nav ieradies tieÅ”saistÄ un viÅam ir bijis vismaz viens nepareizs komponents, tad konkrÄtais dalÄ«bnieks nevarÄs piedalÄ«ties turpmÄkajÄ numuru Ä£enerÄÅ”anÄ. TomÄr protokols joprojÄm darbosies, ja tÄds bÅ«s k dalÄ«bnieki, kuri vai nu tikko saÅÄma pareizÄs sastÄvdaļas, vai arÄ« spÄja atstÄt pierÄdÄ«jumus par nepareizÄ«bu noteiktajÄ laikÄ.
H_i pareizÄ«bas pierÄdÄ«jumi
PÄdÄjÄ daļa, kas vÄl jÄapspriež, ir tas, kÄ pierÄdÄ«t publicÄtÄ pareizÄ«bu Hes, proti, tas Hi = p(i)H, bez atvÄrÅ”anas p(i).
AtcerÄsimies, ka vÄrtÄ«bas H, G, p(i)G publiski un visiem zinÄmi. SaÅemÅ”anas darbÄ«ba p(i) zinot p(i)G Šø G sauc par diskrÄto logaritmu vai dlog, un mÄs vÄlamies pierÄdÄ«t, ka:
dlog(p(i)G, G) = dlog(Hi, H)
bez izpauÅ”anas p(i). PiemÄram, pastÄv konstrukcijas Å”Ädiem pierÄdÄ«jumiem
Ar Å”o dizainu katrs dalÄ«bnieks kopÄ ar Hi nosÅ«ta pareizÄ«bas apliecinÄjumu atbilstoÅ”i projektam.
Kad nejauÅ”s skaitlis ir Ä£enerÄts, tas bieži ir jÄizmanto citiem dalÄ«bniekiem, nevis tiem, kas to Ä£enerÄja. Å Ädiem dalÄ«bniekiem kopÄ ar numuru jÄnosÅ«ta visi Hi un saistÄ«tie pierÄdÄ«jumi.
ZiÅkÄrÄ«gs lasÄ«tÄjs var jautÄt: tÄ kÄ galÄ«gais nejauÅ”ais skaitlis ir H0 un p(0)G ā TÄ ir publiska informÄcija, kÄpÄc mums vajag pierÄdÄ«jumus katram atseviŔķi Hes, kÄpÄc gan tÄ vietÄ nenosÅ«tÄ«t pierÄdÄ«jumus
dlog(p(0)G, G) = dlog(H0, H)
ProblÄma ir tÄda, ka Å”Ädu pierÄdÄ«jumu nevar izveidot, izmantojot Schnorr protokolu, jo neviens nezina vÄrtÄ«bu p (0), kas nepiecieÅ”ams, lai izveidotu pierÄdÄ«jumu, un vÄl jo vairÄk, viss nejauÅ”o skaitļu Ä£enerators ir balstÄ«ts uz faktu, ka neviens nezina Å”o vÄrtÄ«bu. TÄpÄc ir vajadzÄ«gas visas vÄrtÄ«bas Hi un viÅu individuÄlie pierÄdÄ«jumi, lai pierÄdÄ«tu pareizÄ«bu H0.
TomÄr, ja ar eliptisku lÄ«kÅu punktiem tika veikta darbÄ«ba, kas semantiski ir lÄ«dzÄ«ga reizinÄÅ”anai, pareizÄ«bas pierÄdÄ«jums H0 tas bÅ«tu triviÄli, mÄs vienkÄrÅ”i par to pÄrliecinÄtos
H0 Ć G = p(0)G Ć H
Ja izvÄlÄtÄ lÄ«kne atbalsta
NoslÄgumÄ
Å is raksts ir daļa no tehnisko emuÄru sÄrijas
Protokola kods ir atvÄrts, mÅ«su realizÄcija ir rakstÄ«ta RustÄ, to var atrast
JÅ«s varat redzÄt, kÄ izskatÄs NEAR izstrÄde, un eksperimentÄt tieÅ”saistes IDE
Visiem jaunumiem krievu valodÄ var sekot lÄ«dzi plkst
Uz drÄ«zu redzÄÅ”anos!
Avots: www.habr.com