2009-10-08 10 views
8

Ho bisogno di implementare la sicurezza per la comunicazione client-server. Ho implementato il seguente hybrid cryptosystemCome comunicare l'inizializzazione di AES Vector to client per il crittosistema ibrido

Per crittografare un messaggio indirizzato a Alice in un sistema crittografico ibrido, Bob fa la seguente:

  1. Ottiene la chiave pubblica di Alice.
  2. Genera una nuova chiave simmetrica per lo schema di incapsulamento dei dati.
  3. Crittografa il messaggio nello schema di incapsulamento dei dati, utilizzando la chiave simmetrica appena generata.
  4. Cifra la chiave simmetrica nello schema di incapsulamento della chiave, utilizzando la chiave pubblica di Alice.
  5. Invia entrambe queste crittografie ad Alice.

per decifrare questo testo cifrato ibrido, Alice esegue le seguenti operazioni:

  1. usa la sua chiave privata per decifrare la chiave simmetrica contenuta nel segmento incapsulamento chiave.
  2. utilizza questa chiave simmetrica per decrittografare il messaggio contenuto nel segmento di incapsulamento dei dati.

Sto utilizzando RSA per un crittosistema a chiave pubblica e AES per crittosistema a chiave simmetrica. Ogni cosa funziona, ma non sono sicuro di come gestire il vettore di inizializzazione di AES. Attualmente concedo la chiave AES e il vettore di inizializzazione crittografandolo con la chiave pubblica e inviandolo al server.

Volevo solo avere qualche opinione su questo approccio. Come questo problema è risolto da altri protocolli di comunicazione SSL ecc.

Grazie.

risposta

9

Non crittografare la IV. Raggrupparlo con la chiave crittografata e inviarlo (in chiaro) al destinatario.

Gli standard per questo esistono. Questo schema è chiamato "KeyTransRecipientInfo" in CMS (su cui è basato S/MIME) e PGP offre una modalità simile. TLS include anche il vettore di inizializzazione come parametro nell'identificatore dell'algoritmo di crittografia della chiave, utilizzando la stessa sintassi ASN.1 del CMS. Una libreria robusta e open-source per eseguire questa operazione è disponibile per molte, molte piattaforme.

Per lo meno, lo studio delle specifiche CMS potrebbe aiutare ad evitare alcune delle molte insidie ​​in un'implementazione di birra fatta in casa. Vedi §6.1 and §6.2.1 of RFC 3369.

2

Ho fatto la stessa cosa e l'ho gestito allo stesso modo: concatenare la chiave AES con la IV e crittografarli entrambi.

È anche possibile inviare la chiave e utilizzare la chiave stessa per generare una IV, ad esempio utilizzando i primi 128 bit di un hash della chiave come IV. Questo dovrebbe essere OK per quanto riguarda la sicurezza finché si genera una nuova chiave AES per ogni sessione e non si ri-usa lo stesso tasto AES più e più volte con lo stesso IV.

2

Non c'è motivo di crittografare la IV - è possibile inviarla in chiaro. Assicurati di sceglierne uno nuovo ogni volta (nello stesso modo in cui fai il tasto AES).

Detto questo, è spesso conveniente impacchettare insieme la chiave AES e IV. La crittografia di 16 byte non è così costosa.