IOTA vs DCI ehk kuidas süütust räsi-kokkupõrkest sai tohutu ego-kokkupõrge

#krüptoanalüütik

Selles artiklis kirjeldatakse minu seisukohta IOTA vs DCI olukorra kohta ja uuritakse, miks ma kasutaksin rõõmsalt Curlit IOTA kindlustamiseks.

Kui olete IOTA ja DCI vahel lekitatud e-kirju lugenud, tundub mulle väga selge, et DCI ületas objektiivsuse piiri, nii et see pole enam isegi naljakas. Huvide konflikt tilgub paljudest meilidest ja vastustest. Jah, ma olen IOTA austaja, kuid veelgi enam olen arendaja. Ja arendaja soovib näha tõde ja tõestust väidetavate väidete kohta. Mul on palju kogemusi, mis võimaldavad inimestel minu vigadele osutada ja nendest õppida, et saaksin kasvada ja tulla toime veelgi paremate vigadega, errmmmm ... pean silmas lahendusi.

Ärge kunagi rullige oma ego ...

Kujutage nüüd ette järgmist stsenaariumi. Olete - või arvate, et olete - kuulus krüptograaf. Ja siis palutakse teil analüüsida uut räsifunktsiooni, mis on mõeldud kasutamiseks täiesti uues krüptovaluutas. Te pole neist varem kuulnud, nii et eeldate, et nad on auastme amatöörid. Hõõrutate kiiresti räsikokkupõrke kokku, analüüsides nende räsifunktsiooni, ja öelge neile võidukalt, et olete leidnud tõsise haavatavuse !. Vau! Oled sa suurepärane või mis? See võttis vaevalt aega.

Nüüd hakkab see tüüp, kellest te pole kunagi varem kuulnud, teile seletama, et leidsite kokkupõrke tekitamiseks loodud funktsioonist koopiakaitsemeetme ja lisaks sellele, et te ei kasutanud seda funktsiooni ka õigesti. Ta selgitab kannatlikult teile (teile! Inimene, kes kirjutas raamatu otseses mõttes) teie mõtlemisvigu ja palub teil uuesti kontrollida ja esitada täiendavaid tõendeid mõne teie poolt põhjendamata väite kohta, kuna see oli teile ilmselge, et see oli ainult aja küsimus, et saaksite selle asja täielikult ära rikkuda.

Selgub, et see räsifunktsioon ei olnud kunagi mõeldud krüptograafiliseks räsifunktsiooniks, vaid kergeks räsifunktsiooniks, mida saab teatud eesmärkidele kohandada (vastavalt häälestada), suurendades lihtsalt räsimisvoorude arvu. Kavandatud kasutusjuhud ulatuvad räsimisest (ilmselgelt) pseudo-juhusliku arvu genereerimiseni, võtme genereerimiseni ning hõlmavad ühesuunalist ja jah, isegi kokkupõrkekindlust. See oli mõeldud kasutamiseks koos teiste olulisemate meetmetega, mis tagavad krüptovaluuta ohutuse.

Nüüd, selle asemel, et põnevil olla, nagu oleks iga avatud teadlane, tuli keegi välja lahedaid uusi ideid, mis võiksid räsimise / krüptograafia valdkonda veelgi edendada, hakkate selle asemel märkima ja varitsema. Sest ilmselgelt ei järginud nad raamatut (mille te kirjutasite!). Nii et ilmselt ei saa nad teada, millest nad räägivad. Lisaks ähvardab see uus krüptovaluuta nüüd saada selle valuuta suur konkurent, millega ise olete seotud.

Seega ignoreerite nende taotlusi täiendavate tõendite saamiseks, et saate selle täielikult katkestada, selle asemel et luua vaid räsitud kokkupõrkeid, kohandades kahte teie valitud sisestussõnumit, ja selle asemel avaldate kahjuliku aruande kehtestatud akadeemilise vastutuse tavade vastu, nii et saate näidata igaüks, kui tark te (arvate) olete. Ignoreerides fakte, et te ei saa tõestada kokkupõrkeid juhuslikult antud sisenditega, et see funktsioon oli ainult üks osa nende turvameetmetest ja et kahjustate tõsiselt valuutasse investeeritud süütuid inimesi, torpedeerides nende investeerimisväärtust.

Tegelikult värbate oma krüptograafide kaaslasi, et nad hakkaksid veelgi rohkem jama piiksuma, sest ilmselgelt on need tüübid ohtlikud. 100% teoreetiliste vaimsete harjutuste tegemise asemel kasutavad nad tegelikult oma teadmisi praktilistel eesmärkidel ja tundub, et see töötab praktikas hästi, tõestades, et te eksite veelgi. Neil kuttidel oli isegi voli, et teil oleks võimalus, et teil oli õigus, asendada nende räsifunktsioon praegu väljakujunenud funktsiooniga, et olla vaid turvalisel poolel, kuid nad kuulutavad, et kavatsevad siiski korra oma räsifunktsiooni kasutada see on korralikult kontrollitud tõeliste krüptograafide poolt, kes pole veel oma meelt suletud.

Naljakas, kuidas hüpoteetilised stsenaariumid mängivad reaalses elus peaaegu identselt. Loo moraal: ärge kunagi minge oma egoga juhtima, egoid on kurikuulsalt raske kontrollida ja kui te peate seda saatma, tuleks see enne kriitilises mõtlejas keskkonnas kasutamist vastastikuseks eksperdihinnanguks esitada.

Miks ma kasutaksin Curlit kõhklemata

Nagu ma ütlesin, olen arendaja. Ma loen koodi nagu teised inimesed loevad raamatut. Niisiis sukeldusin koodi, et kontrollida IOTA enda turvalisust, ja see, mille avastasin, tekitas minus hirmu. Sealne ideekombinatsioon on nii läbimõeldud ja teostamisel nii praktiline, et seab end kergete aastate ees muust hajutatud pearaamatu tehnoloogiast. See mitte ainult ei lahendanud mitmeid tõeliselt suuri plokiahela tehnoloogia probleeme, vaid võimaldab ka täiesti uusi rakendusi, segamata kõiki asjadega, mida nad ei vaja.

Igatahes jõudsin pärast koodi uurimist järeldusele, et kui järgite reegleid, on see praktiliselt võimatu ja IOTA allkirjastamismehhanismi rikkumine on kindlasti ebapraktiline. Allkirja murdmine on võimatu: reegel: Ärge kunagi kasutage aadressi pärast selle kulutamist.

See selleks. Selles on kõik olemas. Kuna IOTA aadressid luuakse privaatvõtme osade kokku segamise teel palju väiksemaks 81-trüte väärtuseks, on võimatu leida tagasitee algse privaatvõtme juurde. Nii kaua, kui te ei logi oma aadressi ülekandmisel tagasi, on kellelgi võimatu oma elu jooksul luua privaatset võtit, mis võimaldaks neil aadressil olevad raha varastada. See on võimatu, kuna samasse aadressi räsitud privaatsete võtmeosade kombinatsiooni leidmine on tänu vapustavale hulgale kombinatsioonidele, mida 81-trüdi väärtus võib eeldada, et meie universumi eluajal pole teostatav, isegi kui teil oleks terveid galaktikaid täis kvantarvutite probleemiga tegelemist.

Teie seas olevate krüptograafide jaoks on siin video, mis selgitab seda väga lihtsasti: https://www.youtube.com/watch?v=p8YIdmwcubc

Ma tean, et soovite tõenäoliselt hakata Twitteris märkima, et see video ei käsitle aadresse, vaid seemneid, kuid uskuge mind, seemned on ühesuguse pikkusega, seega kehtivad samad arvutused ka siin. Võimalus, et olen siin, on kindlasti tühine (pole vaja seda sõna Twitteris arutada, usun, et seda tehti juba piisavalt).

Igatahes ma kahanen. Nii et privaatse võtme juhusliku aadressi sundimine on kindlasti läbi. Mis jätab teile Curl-räsi funktsiooni analüüsimise ja viisi, kuidas tulla välja meetodiga, mis kindla aadressi korral saaks ümber kujundada vastava kehtiva allkirjastamisvõtme, mida peaks olema tohutul hulgal, arvestades asjaolu, et igasugune räsi funktsioon räsib suure sisendväärtuse väiksemaks väljundväärtuseks. Ma usun, et te nimetate seda kokkupõrkeks, kui 2 erinevat sisendväärtust on sama väljundväärtusega, eks?

Krüptograafiliste rünnakute tüübid

  1. Kokkupõrke rünnak. Selles stsenaariumis võib ründaja vabalt valida kaks erinevat sisendit m1 ja m2, mis mõlemad genereerivad sama räsiväärtuse. Seda tegi DCI. Nad kasutasid algoritmi ilmset viga, et seda näidata - kui nad seda viga kasutavad - nad suudavad konstrueerida 2 erinevat sõnumit, millel on sama väärtus. Väga kena. Nad ei kasutanud Curl-funktsiooni õigesti, ei kasutanud isegi Curl-funktsiooni kokkupõrkekindlat versiooni ja eirasid tõsiasja, et nende leitud ilmne viga oli koopiakaitsemeede, kuid hei! Keda huvitab! Nad murdsid selle ära, eks?
  2. Teine pildieelne rünnak. Seda on keerulisem maha tõmmata, kuna sisendit m1 ei saa ise konstrueerida. Nüüd peate saama teha sama juhusliku sõnumi korral, kus on väheoluline võimalus. Nii et peate suutma näidata, et mitme juhusliku m1-ga näitamiseks ei olnud see helves. Nüüd jõuame räsi väljundi suuruse probleempiirkonda, mis on 81 trüte. Nii et jõhker sundimine on läbi. Mis tähendab, et peate selle leidmiseks kindlasti leidma puuduse räsimisalgoritmis. See tähendab ka, et peate tõestama, et suudate selle ära tõmmata. Piisab, kui öelda, et suudad. Inimesed peavad olema võimelised kinnitama, et saate teha seda, mida väidate, et saate teha. Hei, DCI! Ikka ootan seda tõendit mitme kuu pärast!
  3. Esimene pildieelne rünnak. See on veelgi keerulisem. Nüüd antakse teile ainult räsi väärtus. Kõik, mida peate tegema, on näidata, et saate konstrueerida selle räsiväärtusega räsitud sõnumi m1. Nii et teil pole sisendteate näidist, mida saaksite puuduste osas kontrollida. Pöörad räsifunktsiooni tagasi ainult ühesuunaliselt. See on samaväärne võimalusega luua aadressilt privaatvõti aadressilt endalt.

Pange tähele, et kui saate teha 3, siis on teil tõenäoliselt võimalik genereerida kaks erinevat räsi väärtusele vastavat sõnumit, mis tähendab, et saate teha ka 2. Ja sel juhul olete loonud räsi kokkupõrke, nii et saate teha 1. Vastupidi pole nii lihtne. Järjestikuseid rünnakuid on järjest raskem teha.

Teeme siis mõned arvutused, kas? Kasutagem allkirjade jaoks madalaimat turvaseadet, et vältida keerukust ja anda teile parim võimalus IOTA-i purustamiseks. Ja me ei arvesta ka sellega, et Curl ise teeb eelnevalt kindlaksmääratud arvu räsi voorusid, mis sõltub selle sihtotstarbest ja mida saab hõlpsasti muuta kokkupõrkekindlaks, suurendades räsi voorude arvu. Selle asemel kutsume Curli kutsumist ühe räsina. Püüame parandada selle purunemise tõenäosust, nõrgestades selgesõnaliselt meie turvalisust.

IOTA aadressi genereerimine

IOTA-s olevad aadressid genereeritakse 81 trüdi alamseemnest, mis saadakse turvalisest juhuslikust seemnest ühekordse räsimisega. Sellel juhuslikul alamseemnel võib olla 27⁸¹ või üle 8,7x101¹⁵ erinevat väärtust. Privaatvõtme loomiseks on see alamseem räsitud 27 81-trüti võtme fragmentideks. See tähendab, et meil on nüüd privaatvõti pikkusega 27 x 81 või 2187 trüti.

Järgmine samm: aadressi loomine privaatvõtmest. Aadress on ka 81 trütat. Seda peaks kõigil krüptograafidel olema lihtne lahti saada, eks? Ma mõtlen, et meil on 27²¹⁸⁷ võimalikke privaatvõtmete sisendväärtusi, mis kaardistavad 27⁸¹ võimalikud aadressiväljundi väärtused. Mis tähendab, et keskmiselt peaks igal võimalikul aadressil olema umbes 27²¹⁰⁶ privaatvõtit. Tee oma valik! Lol. Jaa, muidugi.

Aadressi loomine on järgmine: toimige järgmiselt: võtke kõik 27 81-trüti võtmefragmenti ja räsige neid 26 korda. Seejärel võtke saadud 27 81-trüte räsiväärtust ja jagage need kokku üheks 81-trüdi väljundväärtuseks. See on sinu aadress. Pange tähele, et peate tegema ainult 27 x 26 + 27 või 729 räsi. Peaks olema lihtne murda, eks?

Allkirjastamise protsess

Nüüd on siin (lihtsustatud) allkirjastamisprotsess. Kogu idee on see, et peate genereerima allkirja, mis annab aadressilt raha ülekandmisel allkirja, ja see allkiri tõestab veenvalt, et selle lõi omanik. Sel juhul lubab Tangle raha üle kanda teisele aadressile.

Kas mäletate ülalkirjeldatud aadressi genereerimise algoritmi? Allkirjastamine toimib täpselt nii. Põhimõtteliselt riivab allkirjastaja iga privaatvõtme fragmenti 0–26-kordselt (keskmiselt umbes poolel teel) aadressi poole ja kasutab tulemuseks saadud 27 vahendavat 81-trüdi väärtust 2187-trüte-allkirjana. Allkirja kontrollimiseks määrame mitu korda igat fragmenti aadressi poole räsiti, teostame ülejäänud 27 räsitud võtmefragmendi järelejäänud räsi arvu 26 räsi saamiseks, seejärel koondame tulemused kokku ühte 81-proovise räsiväärtuseni. ja võrrelge seda tulemust allkirjastatava aadressiga. Ainult privaatvõtme algne omanik oleks tohtinud selle poolel teel oleva räsi allkirja luua.

Iga võtmefragmendi räsimise täpse arvu arvutatakse tehingukimpude kimbu räsi esimese 27 trüki abil. Lihtsuse huvides ärme vaatame seda, et need konverteeritakse tegelikkuses kõigepealt normaliseeritud kimp-räsi, ja ärge jätke tähelepanuta ka asjaolu, et kimpude räsi võib vajada ümberarvutamist alati, kui need trüdid sisaldavad teatud trüki väärtust. Tahan siin lihtsalt näidata, kui keeruline oleks ikkagi allkirja murdmine.

Kimp räsi

Kimpude räsi arvutatakse tehingukomplekti mitme välja järgi. Eeldusel, et kompositsioon on kõige lihtsam, sisaldab tehingukomplekt ühte sisendtehingut sisendiaadressi ja väärtusega, mida sellelt aadressilt üle kanda, ning ühte väljundtehingut koos väljundiaadressi ja väärtusega, mida sellele aadressile üle kanda. Lihtsustagem jällegi. Oletame, et kimpude räsi arvutatakse ainult iga tehingu aadressi- ja väärtuse väljade räsimisega. See on ikkagi juhuslik 81 trüdi väärtus, kuna nii sisend- kui ka väljundiaadress on täiesti juhuslikud väärtused.

Muide, kui olete huvitatud, loovad turvatasemed 2 ja 3 privaatvõtme 2 või 3 korda pikemaks ning kasutavad vastavalt räsi väärtuse esimesi 54 või 81 trüti, et muuta allkirja eksponentsiaalselt keerukamaks .

Allkirja purustamine

Kehtiva allkirja genereerimiseks ilma aadressi privaatset võtit võtmata peate tegema järgmist:

Looge kimp, mis kannab summa (juhuslikult) sisestusaadressilt teie (juhuslikule) väljundiaadressile. Pange tähele, et mõlemad aadressid on nii juhuslikud, kuna need genereeriti juhuslikust seemnest 729 korda räsimisega. Pärast nende varastamist peate saama raha juurde pääseda, seega peate saama oma aadressi allkirjastada. Seetõttu pole mingit võimalust petta ja kasutada lihtsalt mis tahes eelnevalt määratletud väljundiaadressi. Nüüd kasutate komplekti räsi arvutamiseks tehinguvälju.

Nüüd peate välja tulema allkirjaga, mida iga võtmefragmendi jaoks räsitakse allesjäänud arv kordi, et saada 26 räsi, nagu on määratletud vastava trükiga kimbu räsi. Nii et keskmiselt oleks umbes 13 räsi fragmendi kohta. Seejärel peate fragmendid kokku räsima ja sisestama sisestusaadressi. Kõlab keeruliselt? Sest see on nii!

Pange tähele, et ründaja ei vaja üldse algset privaatvõtit. Tal on vaja ainult välja tuua kehtiv vahepealne võtmefragmentide komplekt. Tangle aktsepteerib kehtivaid allkirju, mis pärast kimbu räsitrütaatide edasist räsimist annavad sisendiaadressi. Tangle'il pole aimugi aadressi täpse privaatvõtme kohta ega pea seda teadma. Vaja on ainult kontrolliprotsessi.

Sellise allkirja konstrueerimisel on probleemiks sõltuvus kimbu räsist ja kaasatud räsi kogus. Isegi kui analüüsida räsifunktsiooni nõrkade külgede osas, ei saa te hõlpsalt kimp-räsi sisendväärtusi valida ega tulla hõlpsalt kokku allkirjade fragmentidega, mis lõppevad aadressi loomise protsessi lõpetamisel aadressina. Aadressilt allkirjade fragmentide juurde tagasi jõudmine on üsna võimatu. Lisaks sõltub see kimpude räsi esimese 27 trütaadi täpsetest väärtustest. Mis teeb selle eriti keeruliseks. Samuti ei saa genereerida kimbu räsi, mis muudab järelejäänud räsi koguse minimaalseks.

Sirge julma sundimine on kindlasti väljas. Ainus viis seda teha on piirata julma sundimise hulka, kasutades räsimise algoritmi nõrkust. Noh, kas pole mitte see, kust kogu arutelu alguse sai? Puudub tõend selle kohta, et oleks võimeline esimest pildieelset rünnakut tegema. Ja kui nüri, ilma tõenditeta, peaksite paremini oma lõksu kinni panema. See tõend pole mingil juhul olemas, sest see oleks olnud kõige lihtsam viis tõestada, et teil on õigus ja nad eksivad. Tegelikult on nüüd terve hulk krüptograafisid, keda on manipuleeritud poolte võtmiseks ja kes seetõttu tahavad tõestada, et seal on tõepoolest viga. Ja ikkagi pole ühtegi tõendit. Paljude kuude pärast. Arvake, et kasutan siin oma võimalusi….

Aga kuidas oleks juba allkirjastatud aadressidega?

Oh, nii et soovite selle asemel teha teise pildieelse rünnaku?

Noh, kui suudate kedagi petta mõnelt aadressilt tehingu allkirjastamiseks ja selgete reeglite kohaselt saate samal aadressil uuesti raha, suurendasite lihtsalt oma võimalusi märkimisväärselt. Isiklikult teades, mida tean, ütlen inimestele kogu aeg, et nad eiraks varem kulutatud aadressidele tehtud makseid, kuni neil on õnnestunud raha turvaliselt kasutamata aadressile viia. Ma eeldan, et pahatahtlik kavatsus on, kui saadate raha mujale kui aadressile, mille ma varem teile reserveerisin.

Aga okei. Vaatame. Sellegipoolest pettisite mind ja teil on nüüd kehtiv allkiri, nii et teil on vaja ainult genereerida kimbu räs, mis põrkub kokku ainult samades 27 esimeses trüdis kui enne allkirjastatud kimp.

Välja arvatud see originaalkimp, mis kanti minu valitud aadressile. Nüüd, kui soovite luua oma aadressile saatva kimbu, peate looma väga spetsiifilise paketi, mis sisaldab teie juhuslikku aadressi ja mis räsib samasse kimbu räsi. Tavaliselt proovib ründaja sellist kimpu jõuga suruda, kasutades ühte kimbu väljadest (nagu sildiväli) nonce-väljana ja suurendades siis noomeni, kuni kimbul on nõutavad 27 trüdi eesliidet. Keskmiselt tähendaks see, et peate proovima 27²⁷ / 2 võimalikku nonce-kombinatsiooni. Loodan, et teil on selleks aega ja / või töötlemisjõudu.

Ausalt öeldes on olemas lihtsam viis, kuna allkirja olemasolu tähendab, et saate arvutada allkirjad ka kõrgemate trüteiväärtuste jaoks, kui need on kimbu räsi kõigis esimeses 27 trütis. Teate, kui palju räsi tehti juba algsest paketist, ja nii saate genereerida ka kõik allkirjafragmendid, mida on räsitud rohkem kui see summa on. Muidugi tähendab see täiesti teistsugust permutatsioonimängu, sest nüüd peate ainult kontrollima, kas esimesed 27 eraldi trüte on suuremad või võrdsed originaalse kimbu räsi vastavate eraldi trükkidega. Selle saavutamiseks on siiski vaja märkimisväärset räsimisjõudu. Sõltuvalt kimp-räsi täpsetest väärtustest, muidugi, kuid statistiliselt peate keskmiselt kontrollima 13,5²⁷ / 2 võimalikku nonce-kombinatsiooni.

See viimane trikk, muide, on see, kuidas vargad saavad teatud optimaalsetel juhtudel teie raha varastada, kui te samal aadressil teist korda kulutate / allkirjastate. Neil on nüüd veelgi rohkem võtmefragmente, kui võrrelda, ja statistiliselt peavad nad kontrollima ainult 6,75²⁷ / 2 võimalikku nonce-kombinatsiooni. Praktikas võiks juhuslikkuse olemuse tõttu olla nende tõenäosus isegi parem.

Loo moraal: ärge kunagi kasutage aadressi uuesti ja peaksite olema kindel. Samuti: veenduge alati, et kui keegi teile raha saadab, kasutab ta määratud vastuvõtuaadressi ega ürita seda teie ühele varem kulutatud aadressile saata. Nad või mõni muu häkker võib sel juhul proovida raha oma kontole suunata. Ma keeldun isiklikult kõigist valele aadressile saadetud maksetest kehtiva maksena, kuni mul oli võimalus need ohutult varem kasutamata aadressile üle kanda. Kui nad selle protsessi käigus varastatakse, on makse tühine ja teen selle kõikides arvetes väga selgeks.

Järeldus

Räsifunktsioon moodustab ainult väikese osa süsteemi üldisest turvalisusest. Rämpskokkupõrke tekkimise võimalus teatud valitud juhtudel ei ole kogu süsteemi lõhenemise retsept, nagu ka see, et mul on võimalik panga direktorilt valitud võti pangale dubleerida, ei luba see mul ikkagi panka röövida. .

Väärinformatsioon on tänapäeva internetimaailmas väga võimas tööriist, kuna vähesed inimesed ei võta nõude kontrollimiseks aega, eriti kui tegemist on „autoriteedi” tegelasega. Teile niiviisi antud võimu kuritarvitamine on pehmelt öeldes taunitav. Eelkõige akadeemikud peaksid olema alati erapooletud ja pühendunud tõele, mitte oma egole, ja tähistama kindlasti kõik huvide konfliktid.