Domanda

Ho il compito di trasferire piccoli messaggi binari (lunghi 1 o 2 kb) tra un'applicazione desktop e dispositivi mobili.I messaggi dovrebbero essere crittografati in modo asimmetrico (ad esempio RSA).Da quello che ho imparato si dovrebbe usare un sistema crittografico ibrido per questo tipo di attività:

  1. Genera una chiave simmetrica casuale
  2. Crittografa il testo normale con chiave simmetrica (utilizzando AES per esempio)
  3. Crittografare la chiave simmetrica con la chiave pubblica
  4. Trasmette testo cifrato e chiave simmetrica crittografata

Mi piacerebbe non inventare un formato proprio per memorizzare il testo cifrato e la chiave simmetrica crittografata.Così mi sono imbattuto nello standard CMS (sintassi dei messaggi crittografici).A prima vista sembra esattamente quello di cui ho bisogno.Se ho capito bene lo standard incorpora il testo cifrato e la chiave simmetrica crittografata, nonché le informazioni sugli algoritmi utilizzati.

Qualcuno può dire se si dovrebbe utilizzare lo standard CMS per l'attività delineata?Il supporto CMS di OpenSSL è sufficiente per le mie esigenze?

Saluti, Cristiano

È stato utile?

Soluzione

CMS supporta sicuramente la sequenza operativa che stai cercando.Lo svantaggio è che sia il formato CMS stesso che la relativa API OpenSSL sono piuttosto complessi.

Un piccolo problema è che il CMS funziona principalmente in termini di certificati X.509 piuttosto che di chiavi pubbliche.Potresti gestire questo problema nel tuo sistema implementando effettivamente una PKI o semplicemente utilizzando certificati autofirmati (che sono sostanzialmente equivalenti al passaggio di chiavi RSA semplici, ma hanno il vantaggio di essere un formato generico per associare la chiave e i metadati che a volte è comunque abbastanza utile avere).

OpenSSL non ha quasi nessuna documentazione dell'API CMS;il miglior riferimento che ho trovato è cms.c nella directory apps/ della distribuzione sorgente OpenSSL;il codice è strutturato come una funzione principale di 1000 righe, il che è un po' inquietante, ma esegue la crittografia con una chiave pubblica, quindi probabilmente puoi usarla come guida.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top