Cosa si ottiene tagliando l'ultimo blocco sul dispositivo?

16

Recentemente ho incontrato la nozione di "hashing l'ultimo blocco sul dispositivo".

Significa che quando si calcola una firma digitale, l'hash che funge da input per il calcolo della firma reale non deve essere calcolato interamente nel software ma non interamente nell'hardware - infatti i primi n-1 blocchi del calcolo della digest sono calcolati nel software per motivi di prestazioni e il blocco finale viene calcolato sul dispositivo (tipicamente una smart card) prima che l'hash finale venga utilizzato per il calcolo della firma, eseguito di nuovo sul dispositivo.

Mi è stato detto che il driver di smart card della scheda che usavamo in quel momento faceva esattamente quello quando richiesto per produrre una firma interamente su dispositivo (hashing + calcolo della firma): il driver calcolava i primi n-1 blocchi localmente e quindi inizializzare la smart card con lo stato corrente del digest, quindi inviare i restanti dati per la finalizzazione dell'hash e il calcolo della firma.

Mi è stato detto che ciò avrebbe contribuito alla sicurezza e in un primo momento ho ipotizzato che fosse inteso come una intelligente contromisura contro gli attaccanti che potrebbero intercettare l'hash calcolato nel software, sostituirlo con un hash di propria scelta, ottenendo così un firma valida sui dati di loro scelta.

Ma più ci pensavo, più mi confondeva. Nulla impedisce agli attaccanti di pre-fabbricare i loro hash nello stesso modo, cioè calcolare i passaggi n-1 del calcolo del digest sui dati di loro scelta e inviarli al dispositivo per la finalizzazione, ottenendo di nuovo una firma forgiata perfettamente precisa.

Gli unici argomenti a cui posso pensare perché questo possa essere preferito per il calcolo dell'hash interamente nel software sono di natura legale. Se il dispositivo e i suoi algoritmi sono certificati, vi è la garanzia che i dati di input per il calcolo della firma siano stati forniti da un'implementazione certificata mentre non esiste tale garanzia se l'hash è stato calcolato interamente al di fuori del dispositivo da un non certificato software di terze parti. Potrei immaginare che ciò influenzerebbe le discussioni legali in caso di controversia su una particolare firma.

Ci sono dei guadagni reali nella sicurezza che ho trascurato?

    
posta emboss 06.07.2011 - 22:57
fonte

3 risposte

11

Citando Manuale di smart card Da Wolfgang Rankl, Wolfgang Effing

The HASH option of the PERFORM SECURITY OPERATION command can be used to compute a hash value. The command may transfer either the data to be hashed or a hash value already computed outside the smart card along with the data needed for the final step of the computation. In the latter case, the hash computation for the final block is performed in the card. The advantage of the latter method is that the hash value can be generated significantly faster outside the card, but the final step still occurs inside the card. From a purely cryptological perspective, this provides only a small amount of extra security, but it does somewhat limit the possibilities for manipulating the hash value. For this reason, it is widely used in practice.

L'ultimo blocco di hash di solito contiene la lunghezza dei dati ("dati necessari per il passaggio finale").

Questo blog descrive tutte le modalità di FUNZIONAMENTO DI SICUREZZA PERFORM: comando HASH. Sono: hashing tutto su smart card; hash l'ultima parte dei dati (non dice nulla sulla lunghezza di questo pard); non fare hash, basta fare una firma.

Questo articolo dice:

Let us point out that, for performance reasons, the hash function is generally performed outside the card. In particular, when the digital signature function is a keyed-MAC function, only the last block computation is performed on the card.

    
risposta data 07.07.2011 - 01:18
fonte
10

Come affermato, questa politica è strana. Per una vera firma digitale (come in RSA o ECDSA), il messaggio da firmare viene prima sottoposto a hash e il resto dell'operazione utilizza solo il valore hash risultante. Il calcolo dell'hash utilizza solo elementi pubblici; non c'è chiave nell'hash. Pertanto, richiedere una parte del calcolo dell'hash da eseguire sulla smart card ha senso, in termini di sicurezza, solo se la smartcard può astenersi dal completare la firma in base a quali dati del messaggio ottiene: cioè, se la smartcard può rifiutare il messaggio perché non termina con un byte di valore 0x5F, o con qualsiasi altra regola di filtro arbitraria simile. Tali regole sono piuttosto insolite nei dispositivi di firma. Inoltre, con una politica di "ultimo blocco sulla smartcard" e una normale funzione di hash come SHA-256, la smartcard ottiene solo gli ultimi bit del messaggio (tra 0 e 447 bit, a seconda della lunghezza del messaggio) e la lunghezza totale del messaggio . Questo non è un granché per regole di filtraggio significative. Senza tali filtri improbabili, richiedere l'ultimo blocco del messaggio da elaborare nella smartcard non aggiunge nulla alla sicurezza.

Probabilmente, una tale politica potrebbe essere un subdolo adempimento di rigidi requisiti legali. Ad esempio, alcune normative potrebbero imporre che l'hash "si verifichi nella smartcard" e potrebbero sentire il contenuto solo dell'elaborazione dell'ultimo blocco. Per analogia, c'è stato un tempo in cui l'Unione europea applicava rigide quote alle importazioni di automobili; un costruttore giapponese immaginò allora di inviare automobili senza volanti e anche volanti, in una "fabbrica" in Inghilterra, dove erano montate le quasi-auto e le ruote sterzanti. Questo è stato sufficiente, secondo le normative europee, per rendere le auto "made in Europe", quindi non soggette alla quota.

Tuttavia , esiste uno scenario alternativo in cui la politica di "hashing l'ultimo blocco" sulla smart card ha molto più senso. Questo è con HMAC . HMAC è per autenticazione dei messaggi ; non è una firma digitale "vera", ma usare il termine "firma" per designare un MAC è un uso diffuso (anche se improprio).

HMAC va così: dalla chiave segreta K sono derivati due valori a dimensione di blocco, K 1 e K 2 (la derivazione usa solo un semplice XOR con sequenze convenzionali, niente di particolare, il punto importante è che K 1 e K 2 hanno la dimensione di un blocco funzione hash, cioè 64 byte se la funzione hash è SHA-1 o SHA-256). Quindi, il MAC è calcolato dal messaggio m , usando la funzione di hash h , come: h (K 1 || h (K 2 || m)) .

Quindi la maggior parte del calcolo HMAC è fondamentalmente un hash del messaggio m ; ma deve iniziare con l'hash di un blocco derivato da una chiave, e alla fine vi è un'operazione di hash extra (di nuovo con un altro blocco derivato dalla chiave). Non vogliamo K 1 o K 2 per uscire dalla smartcard (altrimenti ha poco senso usare una smartcard a tutti). Ma una smartcard non è potente (né nella larghezza di banda della CPU o I / O), quindi preferiremmo eseguire la maggior parte del lavoro sul computer esterno (nel driver della smartcard). Il calcolo HMAC andrebbe quindi in questo modo:

  1. Il driver informa la smartcard che dovrebbe aver luogo un calcolo HMAC; la smartcard elabora K 2 tramite la funzione di hash e restituisce al driver lo stato di funzione hash raggiunto in quel punto (non vengono rilevate informazioni utilizzabili su K perché K 2 ha la dimensione di un blocco). Poiché questo passaggio non dipende da m , qui non è necessario un calcolo reale: lo stato dipendente dalla chiave potrebbe essere calcolato una volta per tutte quando la smartcard ha ottenuto (generato) la chiave K in primo luogo.

  2. L'hash del driver m , a partire dallo stato della funzione hash ottenuto dalla smartcard. Il driver completa il calcolo dell'hash (con padding) e invia il valore risultante (che è h (K 2 || m) ) alla smart card.

  3. La smartcard calcola quindi il secondo hash (quello che usa K 1 ). Anche in questo caso, lo stato della funzione hash raggiunto dopo l'elaborazione di K 1 potrebbe essere stato precalcolato, quindi il vero lavoro online consiste nell'elaborazione di un singolo blocco funzione hash.

Questo scenario consente un calcolo veloce, esternalizzato, alla velocità del computer host, mantenendo la chiave segreta nella smart card. La mia ipotesi è che quando viene pubblicizzata una politica di "ultimo blocco nella smartcard", si intende veramente un calcolo HMAC come ho appena descritto. Ciò implica una terminologia scadente (un MAC non è una firma), ma è ancora meglio di un'assurdità burocratica simile a quella dell'UE.

    
risposta data 07.07.2011 - 18:03
fonte
-1

Immagino che si tratti di un'operazione di hash che viene eseguita sul dispositivo all'ultimo passaggio, quindi lo schema ha perfettamente senso: l'ultima operazione di hashing viene eseguita sul dispositivo e l'hash calcolato viene immediatamente firmato usando la chiave privata che risiede nel dispositivo (e che non è esportabile). Altrimenti, se viene eseguito solo l'hashing sul dispositivo, lo schema in realtà non sembra ragionevole.

    
risposta data 07.07.2011 - 08:16
fonte

Leggi altre domande sui tag