Hvor usikker er AES-128-CTR for at kryptere enhver form for data ved hjælp af filformatet Ethereum keystore?
On november 18, 2020 by adminJeg bruger filformatet Ethereum keystore til at kryptere andre data, såsom almindelig tekst eller JSON.
Her er et eksempel på pseudokode til implementeringen:
MY_PASSWORD = "VeryDifficultPasword432131!@!#%" MY_TEXT = "This is my secret text" iv = randomBytes(16) kdfparams = { dklen: 32, n: 262144, r: 1, p: 8, salt: randomBytes(32) } key = scrypt(MY_PASSWORD, kdfparams) ciphertext = encryptCipheriv("aes-128-ctr", MY_TEXT, key, iv) mac = sha3(key[16:32], ciphertext)
Med denne kode kan jeg generere keystore-filen, der ser sådan ud:
{ "crypto" : { "cipher" : "aes-128-ctr", "cipherparams" : { "iv" : "83dbcc02d8ccb40e466191a123791e0e" }, "ciphertext" : "d172bf743a674da9cdad04534d56926ef8358534d458fffccd4e6ad2fbde479c", "kdf" : "scrypt", "kdfparams" : { "dklen" : 32, "n" : 262144, "r" : 1, "p" : 8, "salt" : "ab0c7876052600dd703518d6fc3fe8984592145b591fc8fb5c6d43190334ba19" }, "mac": "102aedfe8c308c735a76295f9908d9b7de40fb1c07f2f71e05de7a0b2f323a12" } }
Dette er standardfilen, der gemmer millioner af dollars i Ethers.
Spørgsmål:
- Er dette sikkert?
- Hvis ikke, hvorfor?
- Hvis ja, er også sikker kryptering af almindelig tekst eller JSON (intet hexadecimalt format)?
- Er sikker at indstille en mindre
kdfparams.n
?
Rediger: For at afklare, hvorfor jeg spørger dette, er det fordi en anden person sagde dette:
Dette er slet ikke sikkert. Denne implementering indeholder mange grundlæggende fejl. Et eksempel er at bruge en usikker tilfældig talgenerator, der fuldstændig ødelægger krypteringens sikkerhed. Et andet bruger AES- 128-CTR uden godkendelse.
Kommentarer
- Definér først ” sikker ” . Men efter enhver rimelig definition af det med et kodeord i samme liga som ‘ 1234 ‘, og almindelig tekst, der er stor og overflødig, intet anvendeligt er sikker.
- Sikker med hensyn til meget meget vanskeligt at bryde, selvom det er en god kryptograf et me rediger for at afklare, at det ville være en meget stærk adgangskode.
- Definer nu ” break ” . Finder det den originale adgangskode? Gæt almindelig tekst fra én krypteringstekst? Gæt noget af almindelig tekst fra mange ciphertext-dele, som nogle? Gæt en almindelig tekst fra mange krypteringstekster og al den anden almindelig tekst? Kan vi få hjælp fra en eksekverbar fil, der kører på den samme maskine (og hvis ja, nøjagtigt hvilken CPU med hvilken mikrocodeplaster? Bruges AES-NI?). Kan vi bruge EMI som en sidekanal? En keylogger, hardware eller sotfare? Faktisk, hvad ‘ er implementeringen af randomBytes, som har indflydelse?
- Du kan ikke besvare dette spørgsmål ved at se på psuedocode. Den aktuelle implementering kan indeholde alle mulige sårbarheder og sidekanaler . Sikkerhed er heller ikke en binær, det ‘ er et spørgsmål om, hvor langt du ‘ er villig til at gå for at beskytte mod stadig mere eksotiske angreb .
- @ fgrieu undskyld, det eneste spørgsmål, jeg kan besvare, er: nodejs.org / api / … @EllaRose Jeg antager, at de biblioteker, jeg bruger, ikke har sårbarheder. Så min pseudokode ovenfor er bare en implementering af disse biblioteksfunktioner, sådan en randomBytes.
Svar
Det værste ren kryptografisk svaghed er adgangskoden (1). De værste (og meget værre) praktiske svagheder er sandsynligvis i implementeringen (6) (7), og de (4) (5), som kryptografer afviser som uden for krypteringens omfang (spørgsmålet er kun angivet mål).
Kandidater til svagheder, fra kryptografisk (men stadig at overveje) til implementering:
- Adgangskoden: det er svært at huske en adgangskode med over 48 bit entropi ( at “omtrent svarer til et 16-cifret nummer som 3141592653589793 eller 2718281828459045, og mere end planlagt af den obligatoriske XKCD ). Brug af N = 262144 = 2 18 , r = 1, p = 8 = 2 3 , køber mindst 18 + 3 + 1 = 22 bits (se dette ) sammenlignet med en lige SHA-256 hash efterfulgt af AES-128, antager jeg omkring 32 bit stærkere, så nøglen kan være omkring 80-bit god, hvilket er ikke helt ubrydeligt med brutal kraft, men stadig ret sikker.
- AES-128: dette har en 128-bit nøgle, ingen kendt rent kryptanalytisk angribe bedre end brutal kraft, og er således meget bedre end adgangskoden.
- CTR-tilstand: med AESs 128-bit blok, ville den eneste måde, som key-stream genbrug kunne sparke i være et dårligt tilfældigt tal generator til IV (se 6)
- Størrelsen af almindelig tekst kan uden problemer udledes af krypteringstekstens størrelse. Dette er eksplicit ikke en teoretisk svaghed ved kryptering, da længde er udelukket fra, hvad en cipher skal skjule om almindelig tekst. Det kan dog være en praktisk svaghed. Sig, at analyse af ciphertext konkluderer, at det er 17267095423 oktetter; og der eksisterer, et eller andet sted i anklagemyndigheden udviser en fil med nøjagtig den størrelse, der beviseligt går forud for søgning og beslaglæggelse af krypteringsteksten, og som blot tilbageholdelse er ulovlig.
- Manglende påvisning af (forsætlig eller utilsigtet) ciffertekstændring, svarende til forudsigelig ændring i almindelig tekst: igen er dette eksplicit ikke en teoretisk svaghed ved kryptering, men kan tillade nogle angreb hvis modstanderen kan ændre krypteringsteksten (eksempel: hvis almindelig tekst er en eksekverbar eller PDF med en kendt brøkdel, kan det ændre, hvad den eksekverbare gør med noget, eller gøre PDF-visningen som om alt). Godkendt kryptering ( AES-GCM ..) løser det.
- Tilfældig talgenerator: hvis dette er dårligt, eller værre sidder mere eller mindre fast (obligatorisk XKCD og Dilbert som alt for ofte vender sig til virkeligheden), der muliggør gendannelse af almindelig tekst i mange scenarier, herunder gentagne gange kryptering af forskellige engelske tekst- eller e-mail-adresser med samme adgangskode.
- En sidekanal, det er bredt taler uforudsete eller uhindret lækage af information i implementerings- eller brugssammenhæng. Der er så mange:
- Adgangskodegendannelse fra adgangskodeholderen ved at udnytte et proceduremæssigt goof (adgangskode på en postnote, masteradgangsliste), gummislange kryptanalyse (obligatorisk XKCD ), juridiske varianter (involverer brug af udtryk i retning af foragt for retten ), bestikkelse, kemisk imprægnering ..
- Gendannelse af adgangskode ved shoulder surfing , key logger (software eller hardware), kamera, mikrofon (en god lydoptagelse af lyden af taster, når du indtaster en adgangskode, lækker en masse information om adgangskoden, især når den er korreleret med kendt tastaturindtastning af samme operatør under samme forhold) ..
- Lige kompromis med almindelig tekst som vist på skærmen (med TEMPEST varianter af det), udskrevet, mens det sendes til en printer eller fjernadgang til et netværk, eller bare “midlertidigt” gemt ..
- Lige kompromis med operativsystemet til mach ine gør kryptering eller dekryptering (at få midlertidig rodadgang er nok, betyder i 7.7 er spil for angriberen).
- Kryptanalytisk sidekanal i en afstand, inklusive DPA og den elektromagnetiske variant DEMA og hypotetisk timing , hvis maskinen, der foretager kryptering / dekryptering, får adgang til et netværk og ikke bruger AES-instruktioner .
- Kryptanalytisk sidekanal fra en proces, der kører på den samme hardware (inklusive en anden VM), inklusive cache-baseret målretning til AES, når AES ikke bruges instruktioner eller mere generelle (Meltdown, Spectre), der er raseri i disse dage.
- Udnyttelse af forskellige softwarefejl; det er enormt.
Kommentarer
- Det ville være mere nyttigt, hvis jeg har adgangskoden før krypteringen? Som ved at bruge sha eller md5?
key = scrypt(sha(MY_PASSWORD), kdfparams)
- @EnZo: Hashing-adgangskode før indtastning i scrypt ændrer ikke meget sværhedsgraden ved angreb af adgangskoden ( punkt 1). For at forbedre dette har man brug for en bedre adgangskode, en bedre parametrisering for scrypt eller en bedre adgangskodebaseret nøgledivationsordning (Argon? Balloon?)
Svar
Det vigtigste sikkerhedselement, der kan angribes i ovenstående skema, er – selvfølgelig – pass-sætningen. Nu er saltet vigtigt for at undgå angreb fra regnbuebordet, men ellers tilføjer ikke så meget sikkerhed. Hvis salt og adgangskode er rimeligt unikke, så er nøglen også unik. I så fald er IV ikke det vigtigt.
Så selvom det er dårligt at bruge en usikker tilfældig talgenerator, vil den sandsynligvis ikke have så meget indflydelse på den praktiske sikkerhed. , betyder det, at der faktisk blev implementeret dårlig praksis. Hvad hvis adgangssætningen blev genereret ved hjælp af den samme usikre tilfældige generator? Hvad hvis andre implementeringsfejl dukker op?
Brug af ikke-godkendt ciphertext er mere af et problem, da det ville give modstanderen mulighed for at ændre almindelig tekst for hver bit. Modstanderen kan simpelthen vende enhver ciphertext-bit, og almindelig tekstbit på samme position vil også vende. Dette vil betyde, at du får en fejl eller et problem, når du bruger tegnebogen. Fortroligheden af indholdet af tegnebogen går sandsynligvis ikke tabt, men det er bestemt bedste praksis at bruge godkendt kryptering.
Kommentarer
- Tak! Kunne du forklare knap hvordan man opnår godkendt ciphertext med denne tilstand? Jeg vil redigere th eksemplerne ovenfor, fordi jeg tror er relateret til den originale mac-egenskab, som jeg fjernede fra den originale keystore-fil.
- CTR-tilstand er den underliggende tilstand af CCM, GCM, EAX, SIV og en hel masse andre godkendte cifre. En kombination af CTR-tilstand med en (H) MAC kan dog bestemt også være sikker.Begge producerer et godkendelsesmærke med omtrent samme størrelse / sikkerhed. CCM og EAX er lidt mere end specifikke kombinationer af CTR og en MAC, hvor den samme nøgle kan bruges til chiffer og MAC.
- Bemærk at jeg ‘ ve besvarede dette spørgsmål efter bedste evne ved at bruge generisk viden om cifre (ikke så meget Ethereum). Ella Rose er korrekt, at vi ikke kan konkludere sikkerheden ved systemet ud fra den information, der er givet os i spørgsmålet. Så jeg ‘ har fokuseret udelukkende på brugen af CTR.
- Det tilfældige ser ud til at stole – i sidste ende – på systemet tilfældigt. Ofte er system tilfældige kilder relativt sikre, og udtrykket CSPRNG er faktisk nævnt af kilden. Så påstanden om, at det ikke er tilfældigt, er forkert, medmindre systemet tilfældigt ikke er godt implementeret eller seedet.
- Oprettelse af en MAC fra SHA-3 anbefales ikke, KMAC burde have været brugt i stedet (det sandsynligvis blev simpelthen ikke ‘ t specificeret endnu på det tidspunkt). Men jeg kan ikke tænke på nogen situation, hvor brugen af sammenkædningen af nøglen og krypteringsteksten nogensinde ville udgøre et problem.
Skriv et svar