I use NXP JCOP smart-cards for prototyping in my research. I have recently benchmarked the cards using my research code, which contains computational and cryptographic workloads.

I found a couple of surprising results that I want to share, so fellow developers can make informed decisions when choosing their prototyping platforms.

Findings

There is a

**1.5-2x speed difference**between the different revisions of the same high-end chip, the NXP JCOP41 with 72kb of EEPROM. The V2.2 revision for smart-cards (no longer available, replaced by 2.2.1) has the best performance, and the V2.2.1 revision for the SIM (ID 000) form factor has the worst performance.

There is a

**significant speed difference**between the same revision (V2.2.1) of the same chip (NXP JCOP41, 72kb of EEPROM), in different form factors. The chip for the smart-card form factor is almost as fast as the older V2.2 revision, while the chip for the SIM (ID 000) form factor is significantly slower.

There is a

**2-4x speed difference**between the same revisions (V2.2, smart-card form factor) of the NXP JCOP31 and the NXP JCOP41 chips.

The 3DES encryption/decryption engine has

**non-linear performance**. The time it takes to decrypt 128 bytes is not very different from the time it takes to decrypt 24 bytes, on the JCOP41 chips. It seems that there is a huge setup cost for the DES engine, which outweighs the actual encryption cost.

There is a

**4-8x speed difference between RSA and 3DES encryption**on the JCOP41 chips, and a

**3x speed difference**on the JCOP31 chip. This goes against the conventional wisdom that symmetric encryption is 2 orders of magnitude faster then asymmetric encryption. This is probably due to the time it takes to setup the 3DES engine.

Conclusion

Secure processors in smart-cards have non-obvious performance characteristics. I hope my work saves you from the unpleasant surprises that I had.

Motivation

To the best of my knowledge, there are no easy to get benchmarks on smart-card processors. At least, I couldn't find anything when I searched.

Smart-card retailers disclose vital specifications, like EEPROM size and the cryptographic primitives that are implemented on the chip, but tend to be quiet about speed. The sites I used don't mention anything about the type of processor used, or the frequency of the processor.

For some applications (e.g. prototyping, where I want my unit tests to run quickly), speed is just as critical as the other specifications, and its more important than cost.

Data

The data that I used to reach my conclusions is available below. The benchmarks are described in section 5.1 (page 13) in my paper on a successor to the TPM.

decrypt_3des decrypts 24 bytes of data, while decrypt_3des_long and decrypt_rsa work on 128 bytes of data. 3DES is configured in EDE-CBC mode (112 bits of key material) and uses the ISO-9797 method 2 for padding. RSA decryption uses PCKS#1 padding.

The benchmarks can be reproduced by installing Rubygems, then installing the

*tem_ruby*gem, and issuing the following commands

tem_upload_fw # Uploads my JavaCard applet to the active smart-card.

tem_bench # Runs the benchmarks.

NXP JCOP41 v2.2/72k (no longer available)

time_blank_bound_secpack_3des: 0.20757s

time_blank_bound_secpack_rsa: 0.86173s

time_blank_sec: 0.18017s

time_devchip_decrypt_3des: 0.05803s

time_devchip_decrypt_3des_long: 0.08042s

time_devchip_decrypt_rsa_long: 0.74047s

time_post_buffer: 0.08280s

time_simple_apdu: 0.00515s

time_vm_perf: 0.73887s

time_vm_perf_bound_3des: 0.78137s

time_vm_perf_bound_rsa: 1.43647s

NXP JCOP41 v2.2.1/72k (usasmartcard.com product link)

time_blank_bound_secpack_3des: 0.24155s

time_blank_bound_secpack_rsa: 0.89740s

time_blank_sec: 0.18937s

time_devchip_decrypt_3des: 0.08420s

time_devchip_decrypt_3des_long: 0.10800s

time_devchip_decrypt_rsa_long: 0.76480s

time_post_buffer: 0.08577s

time_simple_apdu: 0.00610s

time_vm_perf: 0.83257s

time_vm_perf_bound_3des: 0.90033s

time_vm_perf_bound_rsa: 1.55637s

NXP JCOP41 v2.2.1/72k USB token (usasmartcard.com product link, probably using this card)

time_blank_bound_secpack_3des: 0.41070s

time_blank_bound_secpack_rsa: 1.23089s

time_blank_sec: 0.34530s

time_devchip_decrypt_3des: 0.19010s

time_devchip_decrypt_3des_long: 0.21410s

time_devchip_decrypt_rsa_long: 1.05600s

time_post_buffer: 0.17213s

time_simple_apdu: 0.01000s

time_vm_perf: 1.11310s

time_vm_perf_bound_3des: 1.19703s

time_vm_perf_bound_rsa: 2.01420s

NXP JCOP31 v2.2 (usasmartcard.com product link)

time_blank_bound_secpack_3des: 0.84673s

time_blank_bound_secpack_rsa: 1.78957s

time_blank_sec: 0.78120s

time_devchip_decrypt_3des: 0.23553s

time_devchip_decrypt_3des_long: 0.50060s

time_devchip_decrypt_rsa_long: 1.54990s

time_post_buffer: 0.88864s

time_simple_apdu: 0.02813s

time_vm_perf: 1.84374s

time_vm_perf_bound_3des: 1.92594s

time_vm_perf_bound_rsa: 2.87900s