È una strategia sicura per inviare un messaggio crittografato di grandi dimensioni utilizzando Hybrid RSA 2048, AES 256 e autenticato con HMAC SHA-256:
Dato che Alice ha già la chiave pubblica RSA di Bob, Alice:
- Genera un nuovo 128bit IV (strong PRNG)
- Genera una nuova chiave di crittografia AES 256bit / CBC / PKCS7 (Kc)
- Genera una nuova chiave di autenticazione AES 256bit / CBC / PKCS7 (Ka)
- Crittografa il suo messaggio + Timestamp con (Kc) e IV = > (M) e
- Autentica IV + (M) e con (Ka) utilizzando HMAC SHA-256 = > IV + (M) e + tag
- Crittografa (Ka) + (Kc) con la chiave pubblica RSA di Bob con OAEP = > (Kc + Ka + P) e
- Autentica (Kc + Ka + P) e con (Ka) utilizzando HMAC SHA-256 = > IV + (Kc + Ka + P) e + tag
- Invia Bob RSA Encrypted IV + (Kc + Ka + P) e + Tag e AES HMAC-256 Messaggio IV + (M) e + Tag
Bob procede quindi a:
- Estrai IV da IV + (Kc + Ka + P) e + Tag
- verifica IV contro cache nonce, rifiutando messaggi con IV ripetuti
- Estrai e decodifica (Kc + Ka + P) e con la sua chiave privata RSA = > (Ka) + (Kc)
- Verifica IV + (Kc + Ka + P) e + Tag con (Ka) , rifiutando i messaggi non validi
- Verifica IV + (M) e + Tag con (Ka) , rifiutando i messaggi non validi
- Decodifica IV + (M) e + tag con (Kc)
- Estrae Timestamp e Messaggio
- Verifica che Timestamp non è più vecchio di Max Request Age, rifiutando i messaggi scaduti
Fondamentalmente vorrei sapere se ci sono evidenti punti deboli con l'approccio ibrido RSA / AES / HMAC SHA-256 sopra o qualcosa che chiunque farebbe diversamente?
La strategia di cui sopra è stata rivista per includere feedback di @ puzzlepalace di creazione di chiavi AES separate per la crittografia e l'autenticazione invece di derivarli dall'hash SHA-512 della chiave principale.
Qualsiasi altro feedback o suggerimento per miglioramenti sono ben accetti!