La crittografia asimmetrica garantisce l'integrità dei dati?

2

Ho dei limiti di dimensioni insolite per i miei dati che potrebbero essere rilevanti per la soluzione prescritta.

Lo scenario è il seguente. Il server sicuro A genera 240 byte di dati che devono essere consumati da un client offline B. Il client B deve garantire che il messaggio di 240 byte non sia stato alterato. Tendo a inciampare ingloriosamente sulla semantica e sulla terminologia del mondo della sicurezza, ma credo che quello che cerco sia "l'integrità dei dati".

Se seguo questo processo, garantisce l'integrità dei dati? (Capisco che la garanzia potrebbe essere una parola strong)

  1. Genera una coppia di chiavi pubblica / privata sul server A
  2. Esegue una crittografia asimmetrica sul messaggio da 240 byte utilizzando la chiave privata (un'operazione di firma se ho capito bene)
  3. Al client B viene rilasciata la chiave pubblica e il messaggio crittografato (firmato)

Se il client B riesce a decifrare il messaggio, questa garanzia, almeno accademicamente, che i dati non sono stati modificati con?

Nota 1: il numero di byte disponibili sul supporto di trasferimento per il client B è limitato, un aumento fino al 40% dovuto alla crittografia potrebbe essere tollerato, ad esempio una firma RSA utilizzando un 2048 -bit chiave risultante in 256 byte dal mio messaggio a 240 byte sarebbe accettabile.

Nota 2: non vi è alcuna aspettativa di privacy. Non mi interessa se i dati possono essere letti da chiunque. Solo che lo schema può rilevare se il messaggio è stato manomesso.

Domanda ausiliaria: esiste un algoritmo consigliato? Ho giocato con RSA usando chiavi a 2048 bit.

Grazie ai maghi della sicurezza, non so come lo fate voi ragazzi.

    
posta Chris A. 09.04.2018 - 23:18
fonte

2 risposte

1

Sei sulla strada giusta, quello che vuoi è usare una coppia di chiavi privata / pubblica per creare e verificare le firme.

Ma prima

La tua comprensione degli algoritmi delle firme non è corretta. Ti è stato assegnato lo "standard" per crittografare l'hash della spiegazione dei dati e interpretarlo male.

In primo luogo, la spiegazione comune è che si cripta un hash dei dati, non i dati stessi. Se si cripta un hash dei dati, qualcuno che modifica i dati non saprà come modificare l'hash crittografato in modo che corrisponda. Se si criptano i dati stessi, non c'è nulla che garantisca integrità. Un utente malintenzionato può modificarlo come preferisce (tuttavia non sarà in grado di conoscere il valore decodificato da cui lo sta cambiando da o a).

In secondo luogo, questa spiegazione troppo comune non è corretta (vedi qui per una spiegazione migliore ma più lunga). Questa spiegazione funziona solo per RSA e non è nemmeno molto accurata per RSA. Una delle operazioni eseguite per creare una firma RSA viene anche utilizzata in RSA decryption , quindi sarebbe più accurato dire che una firma RSA è la decrittazione dell'hash dei dati, ma poi decifri qualcosa che non è mai stato criptato per cominciare, il che è ancora più confuso, e che ancora non tiene conto del diverso riempimento richiesto per le firme e la crittografia.

Ora la risposta

Una firma è sicuramente quello che stai cercando, ma le firme RSA sono grandi (256 byte per una chiave a 2048 bit), quindi ti consiglio di consultare ECDSA , poiché le firme sono molto più piccole per un livello di sicurezza simile. Secondo l'articolo di Wikipedia, per avere un livello di sicurezza a 128 bit (molto standard) la tua firma sarà 512 bit, o 64 byte, il che sembra accettabile. Per favore, per favore trova una libreria per farlo per te, è fin troppo facile rovinare queste cose.

    
risposta data 10.04.2018 - 01:59
fonte
0

No, la crittografia asimmetrica non garantisce l'integrità dei dati. Un modo per dimostrarlo è esibire uno schema di crittografia asimmetrico che garantisce la riservatezza ma tuttavia malleabile (e l'avversario può modificare i testi cifrati senza che il destinatario sia in grado di rilevarli).

Il collegamento nel paragrafo precedente spiega che RSA, ElGamal e Paillier (algoritmi di crittografia asimmetrica) sono malleabili, quindi quelli sono già tre esempi. Un'altra forma di esempio deriva dal notare che i quasi pratici sistemi di crittografia asimmetrica sono ibrido - usano asimmetrici primitive per proteggere una chiave di sessione simmetrica e quindi utilizzare un algoritmo di crittografia simmetrica per elaborare il testo del messaggio. E poiché molti algoritmi di crittografia simmetrica sono malleabili, puoi facilmente costruire sistemi ibridi malleabili.

Questa è la risposta teorica. La risposta pratica è non implementare le tue -use implementazioni di crittografia ben studiate che sono state progettate per non cadere nella trappola della malleabilità. Le soluzioni tipiche sono l'utilizzo di firme digitali (asimmetrico) o crittografia autenticata (sia in un sistema simmetrico, sia nella parte simmetrica di un sistema ibrido).

    
risposta data 10.04.2018 - 02:41
fonte

Leggi altre domande sui tag