Una smart card è un dispositivo informatico generale che è Turing completo ; fondamentalmente è un system-on-a-chip (SoC) con una quantità limitata di input / output. Quindi in linea di principio puoi calcolare qualsiasi cosa con una smart card.
L'algoritmo
BigInteger
(bignum) tuttavia è complesso su processori così piccoli. Molte smart card sono dispositivi di calcolo a 16 o anche a 8 bit (anche se ARM a 32 bit sta facendo qualche incursione anche lì). Questo è problematico per i calcoli di grandi numeri come la moltiplicazione e la divisione. L'aggiunta può essere facilmente implementata su qualsiasi CPU, ovviamente - è molto semplice estendere le aggiunte a 8 o 16 bit a un'aggiunta N bit per qualsiasi N grande.
Per questo motivo, molte smart card contengono un coprocessore che contiene un moltiplicatore Montgomery, che viene utilizzato principalmente per eseguire la crittografia asimmetrica come i calcoli RSA ed ECC (curva ellittica). La disponibilità di questo coprocessore per calcoli generici dipende dal sistema operativo. Java Card per esempio contiene un'interfaccia bignum opzionale, ma questa interfaccia non è spesso implementata.
Con questo tipo di calcoli è probabile che sia necessario un accesso di basso livello al coprocessore. Se vuoi mantenere segreto A e B, devi anche tenere a mente l'analisi dei canali laterali (DPA e squali con laser: LFI), quindi se vuoi eseguire i calcoli tu sei in pericolo.
Gli ingressi e le uscite possono essere eseguiti utilizzando la normale interfaccia APDU, che è l'impostazione predefinita per quasi tutte le smart card. Potrebbe essere necessario un APDU di lunghezza estesa o concatenato, se i valori di input o output sono sufficientemente grandi (255 byte è l'input massimo predefinito, 256 byte l'output massimo predefinito).
La modalità di programmazione della smart card dipende dal sistema operativo sulla smart card. Java Card + Global Platform è l'impostazione predefinita per la maggior parte delle applicazioni indipendenti dal produttore , ma ha un'API di livello relativamente elevato (spesso estesa con API proprietarie).