Esiste un contenitore di dati standard del settore per la crittografia / firma asimmetrica con algoritmi sicuri?

0

Voglio crittografare un grande blob di dati binari (diciamo 1GB), usando la crittografia asimmetrica (in modo che sia necessaria solo la chiave pubblica per crittografare i dati, ma è necessaria la chiave privata per decrittografarli). Come una bella aggiunta, vorrei firmare (e, idealmente, alcuni dati aggiuntivi) con la mia chiave pubblica

Le parti non comunicano in alcun modo prima di trasferire il blob (eccetto che condividono le loro chiavi pubbliche), quindi vari schemi che coinvolgono DH o qualcosa di simile non rientrano in questo scenario.

Ovviamente, non voglio inventare il mio contenitore per questo.

Quale contenitore devo utilizzare per consentirmi di utilizzare la crittografia / firma con algoritmi standard del settore che non hanno difetti noti?

Il modo ovvio sarebbe di andare con CMS / PKCS # 7. Anche lo scenario ideale potrebbe essere raggiunto facendo Encrypt-then-Sign con alcuni array manuali concatenanti, come:

encryptedMessage = createEnvelopedCms(cleartextBlob, recipientPublicKey)
signedMessage = createSignedCms(authenticationData.Length + authenticationData + encryptedMessage

Tuttavia, CMS presenta due inconvenienti significativi:

1) Sembra che possa essere usato solo con le chiavi RSA / DSA / ECDSA, e di queste tre, solo la RSA può essere utilizzata per la crittografia. Tuttavia, RSA non è a prova di futuro (in quanto non è sicuro per quanto riguarda il contenuto).

2) Sembra che CMS supporti solo AES in modalità CBC, che ha anche i suoi difetti.

Poi c'è il contenitore GPG, ma non riesco a trovare informazioni su quali specifici algoritmi utilizza e non sembra configurabile nella stessa misura del CMS.

Se stavo inventando il mio contenitore (che non sono), probabilmente farei qualcosa in questo modo: generare un tasto AES casuale + IV; crittografare il blob utilizzando questi in modalità AES-GCM (aggiungendo le informazioni di autenticazione richieste); crittografare la chiave AES e IV utilizzando la chiave pubblica ECC del destinatario; concatena chiavi crittografate + informazioni di autenticazione + blob crittografato e le impacchetta in un messaggio CMS firmato dalla chiave ECDSA del mittente. C'è un contenitore standard del settore che mi consenta di fare tutto questo?

    
posta penartur 15.07.2017 - 12:07
fonte

1 risposta

1

RFC 5084 risolve il problema dell'utilizzo di AES in modalità GCM all'interno di un messaggio CMS. E la CMC specificata da RFC 5652 non ti impedisce di utilizzare alcun algoritmo a chiave pubblica.

    
risposta data 15.07.2017 - 13:17
fonte

Leggi altre domande sui tag