Domanda riguardante MAC e crittografia

3

Stavo leggendo la risposta scelta alla seguente domanda -

"MAC vs Encryption"

Si dice che usando semplicemente la crittografia, "un utente malintenzionato potrebbe alterare il testo cifrato per farlo dire qualcos'altro quando è decodificato", e quindi pronunciare l'hashing del messaggio, aggiungendo alla fine e crittografando l'intera cosa, ciò garantisce integrità.

La mia domanda è, se l'attaccante può modificare il testo cifrato anche quando è codificato, l'attaccante non può anche alterare l'hash allegato alla fine del messaggio in modo che corrisponda al testo modificato?

Grazie in anticipo.

    
posta RJSmith92 18.10.2015 - 08:17
fonte

3 risposte

2

L'attaccante può modificare alcuni bit del testo in chiaro (modificando il testo cifrato), ma l'attaccante non non sa quale sia l'intero testo in chiaro in origine. Pertanto, l'attaccante non sa quali bit dell'hash cambieranno a causa delle loro alterazioni del testo in chiaro. Per modificare correttamente l'hash e il testo in chiaro, l'utente malintenzionato dovrebbe conoscere la differenza tra l'hash originale e l'hash del testo in chiaro modificato. L'utente malintenzionato non conosce questa differenza, impedendo così l'attaccante cambiando l'hash in modo che corrisponda al testo in chiaro modificato.

Ora, tutto ciò si basa sull'idea che il destinatario dovrebbe decrittografare i dati, quindi verificarne l'autenticità. Mentre ciò può essere fatto, è anche possibile proteggere l'integrità del testo cifrato , consentendo al destinatario di verificare che il messaggio non sia stato manomesso prima ancora di tentare la decifrazione. Ovviamente, il solo hashing del testo cifrato e l'accodamento fino alla fine non funzionano, perché l'utente malintenzionato potrebbe modificare tale hash. Invece, ci sono due modi per farlo, basato sul tipo di cripto in uso. Sono entrambi basati su hash- ma hanno una sicurezza extra oltre all'hash semplice:

  • Se utilizzi la crittografia asimmetrica, ad esempio il solito modo di utilizzare HTTPS o SSH, allora firma digitalmente l'hash. Senza entrare nella matematica di come funzionano gli schemi di firma digitale, l'idea di base è che si hanno due chiavi: una chiave privata che solo tu conosci e una chiave pubblica che tutti possono avere una copia di. La chiave privata viene utilizzata per firmare l'hash e la chiave pubblica viene utilizzata per verificare la firma. Poiché l'autore dell'attacco non ha la tua chiave privata, se modifica il messaggio e ricalcola l'hash, non sarà in grado di ricreare una firma che può essere verificata utilizzando la tua chiave pubblica. Pertanto, chiunque sarà in grado di utilizzare la tua chiave pubblica per dire che il messaggio che hanno ricevuto non è il messaggio che hai firmato.
  • Se si utilizza solo la crittografia simmetrica, come un file .ZIP crittografato o la maggior parte delle altre forme di crittografia della password, si crea un chiave Hash basato sul codice di autenticazione dei messaggi (o HMAC ). Ancora una volta, senza entrare nei dettagli, l'idea di un HMAC è che quando si computa l'hash del messaggio, si inseriscono anche alcuni dati aggiuntivi basati su una chiave (che potrebbe essere la chiave utilizzata per crittografare il messaggio o potrebbe essere un altro) che ha anche il destinatario previsto del messaggio crittografato. Questi dati aggiuntivi aggiunti all'input della funzione hash modificano l'output (il digest ) in modo tale che se un utente malintenzionato modifica il messaggio, l'utente malintenzionato non sarà in grado di capire quale dovrebbe essere il nuovo HMAC perché l'autore dell'attacco non conosce la chiave e quindi, quando il destinatario utilizza la chiave per calcolare l'HMAC del messaggio modificato, non corrisponderà e il destinatario saprà che il messaggio è stato manomesso.
risposta data 18.10.2015 - 08:45
fonte
2

Forse una vista non molto tecnica aiuta a capire il problema ... Basti pensare a una busta che contiene il messaggio e l'hashsum. È possibile perforare la busta e capovolgere determinati bit del messaggio. Puoi anche dare un pugno dov'è l'hashsum e cambiarne i bit. Tuttavia, dato che non puoi guardare all'interno della busta, non hai (quasi) nessuna possibilità di capovolgere l'hashsum in un modo che fornisca il valore corretto per il messaggio modificato.

Quando il ricevitore apre la busta vedono un messaggio e un hashsum che non corrispondono - una chiara indicazione che qualcosa è stato modificato, il messaggio, il checksum o entrambi.

Modifica:

Ok, più tecnico ...: -)

Considera il seguente messaggio M, che trasferisco in testo semplice.

Please transfer 100$ to my account.

il suo hashsum (SHA1) è 5f7e22d270ca9da68543e3f97f30f1859e20a88a. Il MAC risultante è

f56c10e4264a5173aa97660f7438fc0e12618d1e

Questo MAC è l'hashsum che ho crittografato con una password segreta. È possibile modificare liberamente il messaggio e il MAC, ma non è possibile capire come modificare il MAC in modo che, quando decrittalo, fornisca l'hashsum corretto, corrispondente al messaggio modificato. Di conseguenza, quando decrypt, noterò che l'hashsum non corrisponde al messaggio e qualcosa è stato modificato.

Questo è tutto ciò che riguarda un MAC, che rileva le modifiche.

    
risposta data 18.10.2015 - 13:38
fonte
1

Durante la creazione di un HMAC (codice di autenticazione dei messaggi con hash), il messaggio è solo una parte dell'hash. Ci deve essere anche una chiave. Questa chiave è nota solo al server.

In python:

import hmac
from hashlib import sha256

msg = "The cow jumped over the moon."
key = "My key."

print hmac.HMAC(key, msg, sha256).hexdigest()

Senza la chiave, chiunque potrebbe modificare l'hash. Quindi è importante avere una chiave strong. Una volta che la chiave è trapelata o indovinata, l'HMAC diventa inutile.

    
risposta data 18.10.2015 - 08:40
fonte

Leggi altre domande sui tag