Îmi dau seama că asta depinde de implementarea mea și de implementarea bibliotecilor pe care le folosesc. Întreb despre procesul meu presupunând că bibliotecile de criptare și codul meu nu sunt defecte/compromise, parola utilizatorului este sigură și mașina nu este compromisă.
Scopul aici este de a proteja confidențialitatea fișierelor cu o parolă și de a le putea cripta fără a introduce o parolă.
Configurare inițială:
- Generați o pereche de chei RSA
- Solicitați utilizatorului parola și presupuneți că utilizează una suficient de sigură
- Criptați cheia privată în format DER, pkcs=8, schema = scryptAndAES256-CBC cu parola utilizatorului
Pentru fiecare fișier:
- Generați o cheie aleatorie de sesiune de 32 de octeți
- Criptați cheia de sesiune cu cheia publică inițială
- Generați un nonce aleatoriu de 12 octeți
- Scrieți în fișierul de ieșire:
- Cheie de sesiune criptată
- Nonce
- Flux de fișiere criptat cu AES GCM folosind cheia de sesiune aleatorie de 32B și nonce de 12B
La decriptarea unui fișier
- Solicitați utilizatorului parola, decriptați cheia privată inițială
- Citiți cheia de sesiune criptată și nonce de la începutul fișierului
- Decriptați cheia de sesiune cu cheia privată inițială
- Decriptați fluxul de fișiere cu cheia de sesiune și nonce
Singurele alte lucruri de remarcat sunt că am ales GCM pentru viteza sa, peste CBC de exemplu. De asemenea, sunt conștient de problema coliziunii cu utilizarea unui nonce aleatoriu, totuși înțeleg că aceasta ar fi o problemă mai mult dacă aș avea miliarde de fișiere folosind aceeași cheie de sesiune. Și cu o cheie aleatorie de 32 de octeți am practic 44 de octeți de spațiu pentru a evita coliziunea. Este de dorit pentru mine să nu fiu nevoită să țin evidența unui nonce.
Există probleme cu acest plan sau ar fi aceasta o modalitate sigură de a proteja confidențialitatea fișierelor presupunând că pseudocodul a fost implementat corect?