Funzioni EVP di OpenSSL, in particolare EVP_SealInit

4

Riferimento: link

Voglio condividere in modo sicuro una chiave simmetrica tra due endpoint utilizzando l'interfaccia EVP di OpenSSL. Il trasferimento della chiave simmetrica crittografata e la sua decifrazione sull'altra estremità funziona bene, ma questo mi lascia solo con il mittente, poiché la funzione SealInit genera una chiave simmetrica casuale e la crittografa immediatamente con la chiave pubblica del destinatario.

Quindi la mia domanda è, come dovrei usare queste funzioni?

Potrei risolverlo con:

a) Generare preventivamente una chiave simmetrica e crittografarla con la chiave pubblica del ricevitore, il che rende una parte dell'operazione di sigillatura inutile

o

b) Utilizzo di una chiave simmetrica separata per il mittente e il destinatario, che sembra inutilmente complessa

Poiché nessuna delle due opzioni mi sembra una buona soluzione, penso che mi debba mancare qualcosa o fraintendere alcuni concetti di base, poiché la crittografia è nuova per me.

Grazie per aver letto la mia domanda.

    
posta Just a guest 30.03.2016 - 16:41
fonte

1 risposta

1

Sì, EVP_{Seal,Open}* esegue la crittografia "ibrida": simmetrica: crittografa i dati con una chiave nonce e codifica publickey quella chiave per i destinatari e decrittografa di conseguenza. ( EVP_Digest{Sign,Verify}* similmente fa la firma ibrida: hash simmetrico i dati e la chiave pubblica firmano l'hash.) Se non vuoi questa funzionalità, non usare queste routine.

Se vuoi cifrare e decifrare una piccola quantità di dati, come una chiave simmetrica, usa EVP_PKEY_{encrypt,decrypt}{_init,} . La maggior parte delle chiavi simmetriche sono solo byte casuali (o bit) e puoi generare con RAND_bytes . Supponendo di voler successivamente criptare simmetricamente e decrittografare i dati con quella chiave, vedi EVP_{Encrypt,Decrypt}* o EVP_Cipher* che ha un flag per selezionare la direzione.

    
risposta data 31.03.2016 - 07:46
fonte

Leggi altre domande sui tag