Știu că sună nebunesc, dar ascultă-mă. Ca urmare a Eticheta de autentificare AES-GCM poate fi utilizată ca funcție de derivare a cheilor?, mă gândesc și la mai multe creativ soluții pentru a obține chei unice (simetrice) de dispozitiv dintr-o cheie rădăcină stocată în siguranță.
(Fondul este că avem o mulțime de clienți (=dispozitive) care nu pot folosi criptografia asimetrică (mai ales din cauza constrângerilor hardware). Pentru a stabili o conexiune TLS PSK avem nevoie de un secret partajat între backend și client. În loc să stocăm în siguranță o cheie unică per client în backend, derivăm cheia specifică clientului dintr-un secret rădăcină folosind ID-uri unice ale dispozitivului.)
Motivația pentru utilizarea cheilor RSA vine din Schema de prețuri Azure Key Vault și disponibilitatea HSM-urilor în diferite regiuni. Operațiunile cu chei simetrice sunt disponibile doar ca „chei avansate” pe HSM-uri, dacă citesc corect documentația și sunt astfel de 5 ori mai scumpe decât operațiunile RSA (în plus față de tariful HSM orar pe pas). În plus, limitarea de a selecta regiuni (unde sunt disponibile HSM-uri gestionate) ar putea fi, de asemenea, un deal breaker.
Deci, ca să mă descurc cu ECC sau RSA, am următoarea idee:
$\text{KDF}(cheie, date) = \text{SHA256}(\text{RSA-PKCS1v1.5-sign}(cheie, date))$
Cu cuvinte: stocați cheia RSA neexportabilă în seiful de chei și utilizați schema de semnătură deterministă PKCS1 v1.5 ca derivare a cheii folosind date arbitrare ca valoare de derivare (de exemplu, o sare concatenată cu id-ul dispozitivului). Pentru a sparge proprietățile algebrice ale RSA și pentru a concentra materialul de codare până la 256 de biți, semnătura este hashing cu SHA-256.
Intuitiv, acest lucru este sigur, deoarece semnătura este de nefalsificat și astfel valoarea concretă de ieșire a operațiunii semnului nu poate fi ghicită (fără cheie). Deci undeva în această semnătură există suficientă „entropie” (biți de neghicit) pentru a fi rezistente la forța brută, iar această „entropie” ar trebui să fie distribuită uniform în rezultatul operației hash.
Pot unii să ofere un raționament mai riguros (sau chiar o dovadă conform ipotezelor standard)?