Puncte:0

Este AES GCM cu PBKDF2 100k iterații încă ok din 2022?

drapel us

Utilizarea AES GCM cu PBKDF2 și 100 000 de iterații este încă considerată sigură din 2022?

În modelul nostru de amenințare, dacă ignorăm riscurile legate de calculul cuantic, este acest lucru sigur?

Iată un exemplu de implementare Python de lucru:

import Crypto.Random, Crypto.Protocol.KDF, Crypto.Cipher.AES
text clar = b"bună lume bună lume bună lume bună lume bună lume lume bună"
parola = b"capsă corectă a bateriei calului"
nonce = Crypto.Random.new().read(16)
cheie = Crypto.Protocol.KDF.PBKDF2(parolă, nonce, număr=100000)
cipher = Crypto.Cipher.AES.new(cheie, Crypto.Cipher.AES.MODE_GCM, nonce=nonce, mac_len=16)
ciphertext = (nonce,) + cipher.encrypt_and_digest(plaintext) # nonce | text cifrat | etichetă
print(text cifrat)

Notă: folosind același lucru nonce pentru PBKDF2 și AES.nou(...) pare să nu fie o problemă dacă nu reutilizam niciodată acest lucru nonce pentru criptări viitoare, vezi Reutilizarea sării PBKDF2 pentru AES/GCM ca IV: periculoasă?

forest avatar
drapel vn
Ce calități necesită pentru ca acesta să fie „încă OK” pentru modelul tău de amenințare? Este mai bine să folosiți un KDF cu memorie, deoarece PBKDF2 este ușor de paralelizat, dar nu este ca și cum ar fi stricat.
drapel us
@forest Prin „OK”, să spunem rezistent la un atacator care are un buget de 1 milion USD de putere de calcul din 2022 pentru sarcina specifică de a sparge un anumit fișier protejat cu parolă :) (și fără acces la calculul cuantic).
forest avatar
drapel vn
Apoi depinde de cât de puternică este parola. 100.000 de runde de PBKDF2 pentru un anumit hash adaugă $\log_2(100000) \aproximativ 16,6$ biți de entropie în comparație cu o singură rundă a acelui hash. Dacă parola în sine este deja foarte puternică, atunci nici măcar nu aveți nevoie de PBKDF2. Singurul scop al unui KDF lent este de a îmbunătăți securitatea parolelor cu putere marginală. Dacă parola dvs. are doar, să zicem, 64 de biți de entropie, atunci 1000.000 de iterații ar pune-o probabil în afara accesului atacatorului pe care l-ați descris.
drapel us
@forest Să presupunem că parolele sunt 10 caractere alfanumerice aleatoare (`a-zA-Z0-9`). 100.000 de iterații ale PBKDF2 îl fac să nu fie la îndemâna atacatorilor din zilele noastre? PS: Cred că ultimul tău comentariu poate fi transformat în răspuns.
Maarten Bodewes avatar
drapel in
Puteți face singuri calculele, vedeți de ex. [aici](https://www.wolframalpha.com/input?i=log_2%28%2826+%2B+26+%2B+10%29+%5E+10%29). Deci ~59,5 + ~16,6 = 76,1 biți de securitate, dar asta presupunând că parola este complet aleatorie, nu doar *care se caută aleatoriu* către un atacator. Rețineți că mai sus se bazează pe căutarea completă, deci aveți cu 1 bit mai puțină securitate în medie (ar fi trebuit să îl elimin cu adevărat).
drapel us
Da @MaartenBodewes, eram curios să aflu câte biți de entropie sunt considerate „puternice” pentru o parolă în zilele noastre. > 70 de biți pare ok, nu?
Maarten Bodewes avatar
drapel in
Depinde cu cine te confrunți, dar să spunem că nu cred că un hacker ocazional va încerca să spargă asta. Veți avea nevoie de o organizație mare, botnet sau guvern pentru a pirata doar o singură parolă (presupunând că utilizați săruri aleatorii), așa că vor fi prea multe cicluri CPU irosite. O problemă este că oamenii nu își amintesc bine parole aleatoare de 10 caractere - și dacă utilizați un manager de chei, atunci ați putea la fel de bine să utilizați unul și mai puternic.
forest avatar
drapel vn
Am scris răspunsul pe baza unuia dintre comentariile mele, deoarece pare a fi cel mai bun lucru care se poate face pe baza informațiilor furnizate.
Puncte:1
drapel vn

Depinde în întregime de cât de puternică este parola. 100.000 de runde de PBKDF2 pentru o parolă cu un hash dat adaugă echivalentul $\log_2(100000) \aproximativ 16,6 $ biți de entropie în comparație cu o singură rundă din acel hash. Dacă parola în sine este deja foarte puternică, atunci nici măcar nu o faci nevoie PBKDF2. Singurul scop al unui KDF lent este de a îmbunătăți securitatea parolelor cu putere marginală. Dacă parola dvs. are doar, să zicem, 64 de biți de entropie, atunci 1000.000 de iterații ar fi probabil să nu fie la îndemâna unui atacator cu \$1 milion de active, deoarece 64 + 16,6 = 80,6 biți, ceea ce ar costa probabil mai mult de \ 1 milion de dolari de spart.

Este mai bine să utilizați un KDF cu memorie. Acest lucru nu se datorează faptului că PBKDF2 este stricat în sine, dar se datorează faptului că un atacator poate extinde mai ușor un atac datorită hashing-ului care se pretează la paralelism extrem.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.