Codice di autenticazione del messaggio basato su un singolo blocco AES

4

Penso di aver bisogno di utilizzare un MAC per garantire l'integrità di un URL che il mio sistema fornirà a un utente finale che lo utilizzerà per scaricare un contenuto da un altro componente del sistema, cioè, un URL deve passare da un componente del mio sistema a un altro componente che utilizza l'utente finale come un canale non sicuro.

Avevo pensato di utilizzare qualcosa come AES256 (shared_key, MD5 (URL)), cioè utilizzando l'output di MD5 (URL) ci saranno 16 byte che saranno l'input per AES256, cioè una sola crittografia a blocchi.

Il punto è che la chiave non sarà molto cambiata, cioè molti MAC verranno generati usando la stessa chiave e quindi non sono sicuro che questo metodo sia sicuro sulla falsificazione esistenziale, perché, usando la stessa chiave multipla con AES non è sicuro per CPA.

Per favore qualcuno potrebbe aiutarci?

Aggiornamento: Grazie mille per le risposte

Ho dimenticato di dire che in qualche modo sono obbligato a usare questo approccio.

Tuttavia sono un po 'turbato dal fatto di generare MAC usando la stessa chiave, voglio dire, AES con un singolo blocco non è sicuro con CPA se viene usata la stessa chiave e non sono sicuro di come questo influenzi la sicurezza di il MAC utilizzando l'approccio che ho descritto.

Grazie in anticipo

    
posta saturn 28.10.2013 - 18:04
fonte

3 risposte

3

Se hai davvero bisogno di usare AES, allora puoi usare CBC-MAC . Fai attenzione, tuttavia, alle condizioni: CBC-MAC è sicuro solo se:

  • tutti i messaggi hanno la stessa lunghezza o (in alternativa) si calcola sempre il MAC su una struttura che inizia con un'intestazione che definisce la lunghezza del messaggio;
  • tu mai usa la chiave per nient'altro che CBC-MAC (e, in particolare, non cripti nulla con la stessa chiave).

Se sei già pronto per utilizzare una funzione di hash, troverai più semplice affidarti a HMAC . HMAC usa solo una funzione di hash, non un codice a blocchi, quindi è meno complesso della combinazione di un codice a blocchi e una funzione di hash. HMAC è già implementato in molti framework crittografici (come al solito, meno codice di crittografia devi scrivere da solo, meglio è). HMAC / MD5 è, per quanto ne sappiamo, sicuro, nonostante i noti punti deboli di MD5. Tuttavia, se solo per le pubbliche relazioni, potresti voler usare HMAC / SHA-1 o HMAC / SHA-256. Puoi anche troncare l'output HMAC: questo è noto per essere sicuro, cioè se si tronca l'output di HMAC / SHA-256 a, ad esempio, 80 bit, allora si ottiene un buon MAC a 80-bit, che l'attaccante non essere in grado di bypassare con probabilità superiore a 2 -80 (e questo è già completo per la maggior parte degli scopi).

    
risposta data 28.10.2013 - 18:49
fonte
0

Il normale algoritmo da usare per questo è HMAC. È possibile basare un HMAC su qualsiasi algoritmo di hash; HMAC-MD5, HMAC-SHA1, qualunque cosa tu voglia usare. Il calcolo di un HMAC implica una doppia applicazione della funzione di hash e alcune altre operazioni. Wikipedia: HMAC

Non riesco a pensare ad alcun attacco pratico contro lo schema che proponi. Tuttavia, è possibile che ci sia qualche attacco sottile - che si tratti di falsificazione esistenziale o qualcos'altro. Ecco perché sei ben consigliato di utilizzare l'approccio standard.

    
risposta data 28.10.2013 - 18:21
fonte
0

Il tuo metodo è errato perché l'URL ripetuto avrà lo stesso testo cifrato.

Tutto quello che devi fare è salare la chiave.

Genera un sale casuale. XOR con la SECRET_KEY. Utilizza tale risultato come chiave di crittografia per AES.

Invia il testo SALT e cipher.

Sistemi di ricevitore XOR riceve il SALT con SECRET_KEY (precondiviso) e utilizza tale chiave per decodificare il testo cifrato.

Nessun attacco è possibile perché: Salt è solo un numero casuale. Il testo della cifratura sarà diverso per ogni sale, indipendentemente dal contenuto del testo normale.

    
risposta data 29.10.2013 - 06:20
fonte

Leggi altre domande sui tag