6

Nel corso degli anni mi sono imbattuto in questo scenario più di una volta. Hai un sacco di dati relativi all'utente che vuoi inviare da un'applicazione a un'altra. La seconda applicazione dovrebbe "fidarsi" di questo "token" e utilizzare i dati al suo interno. Un timestamp è incluso nel token per prevenire un attacco di furto/riutilizzo. Per qualsiasi motivo (non preoccupiamoci qui) è stata scelta una soluzione personalizzata piuttosto che uno standard del settore come SAML.è crittografato ma non firmato: debolezza?

Per me sembra che la firma digitale dei dati sia ciò che si desidera qui. Se i dati devono essere segreti, puoi anche crittografarli.

Ma quello che vedo molto è che gli sviluppatori useranno la crittografia simmetrica, ad es. AES. Stanno partendo dal presupposto che oltre a rendere "segreti" i dati, la crittografia fornisce anche 1) integrità del messaggio e 2) fiducia (autenticazione della fonte).

Ho ragione di sospettare che ci sia una debolezza intrinseca qui? Al valore nominale sembra funzionare, se la chiave simmetrica è gestita correttamente. Mancando quella chiave, certamente non saprei come modificare un token crittografato, o lanciare una specie di attacco crittografico dopo aver intercettato diversi token. Ma un attaccante più sofisticato sarebbe in grado di sfruttare qualcosa qui?

risposta

6

Parte di esso dipende dalla modalità di crittografia. Se usi la BCE (vergogna per te!) Potrei scambiare blocchi in giro, alterando il messaggio. Stackoverflow got hit by this very bug.

Meno minaccioso: senza alcun controllo di integrità, potevo eseguire un attacco man-in-the-middle e scambiare tutti i tipi di bit in giro, e lo avresti ricevuto e tentare di decrittografarlo. Naturalmente fallirai, ma il tentativo potrebbe rivelarsi. Vi sono attacchi da canale laterale da parte di "Bernstein (che sfrutta una combinazione di caratteristiche cache e microarchitetturali) e Osvik, Shamir e Tromer (che sfruttano le collisioni della cache) si basano sull'acquisizione di dati statistici basati su un gran numero di test casuali." 1 L'articolo nota in calce, è da un crittografo di maggior nota di me, e lui ti ricorda riducendo la superficie di attacco con un MAC:

se si può fare in modo che un attaccante che non ha accesso al Mac chiave non può mai nutrire ingresso del male ad un blocco di codice, tuttavia, è ridurre drasticamente la possibilità che egli sarà in grado di sfruttare eventuali bug

+2

Ben fatto! Inoltre, il punto di utilizzo di un MAC invece di una firma digitale (protezione dell'integrità tramite crittografia simmetrica anziché criptografia a chiave pubblica) è eccellente: nessun punto su tutto ciò che riguarda l'RSA/DSA e simili, poiché il sistema è l'unico uno che ha bisogno di verificarlo. – AviD

+1

Vale la pena leggere l'articolo a piedi. –

-5

Un approccio di crittografia simmetrica è sicuro quanto la chiave. Se entrambi i sistemi possono ricevere la chiave e tenere la chiave saldamente, va bene. La crittografia a chiave pubblica è sicuramente una scelta più naturale.

+1

La sua vera crittografia simmetrica È sicura quanto la sua chiave - MA la domanda che dovresti chiedere è "sicuro per cosa?" Come sottolineato dall'OP, la crittografia simmetrica è ottima per RISERVATEZZA, ma non aiuta affatto con INTEGRITY. – AviD

+0

Certo che lo fa. Non è possibile costruire un falso messaggio dal mittente senza la chiave simmetrica, proprio come nella crittografia a chiave pubblica non è possibile falsificare un messaggio dal mittente senza la propria chiave privata. – Draemon

+0

Penso che tu abbia inteso che non è d'aiuto con AUTHENTICATION, cosa che non funziona, ma dal momento che l'OP ha parlato di due applicazioni che comunicano, non sono sicuro di quanto sia rilevante. – Draemon

2

Yup. La sola crittografia non fornisce l'autenticazione. Se si desidera l'autenticazione, è necessario utilizzare un codice di autenticazione dei messaggi come HMAC o firme digitali (in base alle proprie esigenze).

Ci sono un numero piuttosto elevato di attacchi che sono possibili se i messaggi sono solo crittografati, ma non autenticati. Ecco un esempio molto semplice. Supponiamo che i messaggi siano criptati usando CBC. Questa modalità utilizza un IV per randomizzare il testo cifrato in modo che la crittografia dello stesso messaggio due volte non risulti nello stesso testo cifrato. Ora guarda cosa succede durante la decrittazione se l'attaccante modifica solo la IV ma lascia il resto del testo cifrato così com'è. Cambierà solo il primo blocco del messaggio decrittografato. Inoltre, esattamente quei bit sono cambiati nella IV modifica nel messaggio. Quindi l'attaccante sa esattamente cosa cambierà quando il ricevitore decrittografa il messaggio.Se il primo blocco era ad esempio un timestamp, l'hacker sa quando è stato inviato il messaggio originale, quindi può facilmente correggere il timestamp in qualsiasi altro momento, semplicemente capovolgendo i bit corretti.

Altri blocchi del messaggio possono essere manipolati, anche se questo è un po 'più complicato. Nota anche che questa non è solo una debolezza di CBC. Altre modalità come OFB, CFB hanno debolezze simili. Quindi aspettarsi che la sola crittografia fornisca l'autenticazione è solo un'assunzione molto pericolosa