Vreau să construiesc un arbore de derivare a cheilor deterministă, în care rădăcina este stocată în siguranță într-un serviciu centralizat, iar frunzele sunt încorporate într-o multitudine de dispozitive. Când un dispozitiv dorește să comunice cu back-end-ul, dispozitivul furnizează ID-ul și sarea, iar serviciile centralizate derivă cheia specifică dispozitivului din cheia rădăcină și ID-ul dispozitivului și sare.
De obicei, aș prefera HKDF sau o altă funcție bine cunoscută de derivare a cheilor în acest scop. Dar, deoarece intenționăm să rulăm întregul serviciu pe un furnizor de cloud, alegerea noastră de stocare securizată a cheilor este mai limitată.
Azure Key Vault are suport experimental pentru AES-GCM pe HSM-urile gestionate. Ideea mea este să folosesc sarea dispozitivului ca intrare nonce (IV) a AES-GCM și ID-ul dispozitivului ca intrare de date asociată și nici un text simplu ca intrare. Ca rezultat al AES-GCM, aș folosi eticheta generată ca cheie pseudo-aleatorie deterministă:
$\text{KDF}(cheie, sare, id) := \text{AES-GCM-encryption}(cheie, \epsilon, sare, id)$
Unde $key$ este secretul rădăcină global stocat în seiful de chei, $\epsilon$ este șirul gol folosit ca intrare GCM text simplu, $sare$ este o valoare de 96 de biți folosită ca $nonce$ în GCM și $id$ este un șir de identificare a dispozitivului de lungime variabilă pe care niciun dispozitiv nu îl partajează cu altul și este utilizat ca intrare de date asociată în GCM.
Este sigură construcția...
- presupunând că sare / nonce este unic la nivel global între întreaga durată de viață a cheii și peste toate ID-urile dispozitivelor?
- presupunând că sare / „nonce” este unic doar pentru un anumit ID și pot exista mai multe dispozitive care împart aceeași sare din întâmplare (din cauza unei coliziuni de valori aleatorii)?
Intuitiv, sunt destul de sigur că, cu o sare unică la nivel global, această construcție ar trebui să fie o funcție sigură de derivare a cheilor. Dar acest lucru este greu de realizat pentru cazul de utilizare pe care îl avem în vedere.