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:
-
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.
-
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.
-
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.