# Smart Card Basics

I want to implement some of the basic encryption algorithms on smart card, could any body guide me how to program a smart card, which tools (hardware and software) I should have, and if these tools are free?

Also, is it possible to implement Bi-linear pairing on smart cards or ECC algorithms?

-

## 1 Answer

Generally it is not advisable to create your own cryptographic operations on a smart card. When programming a smart card you need to understand the risks of side-channel attacks and perturbation attacks. For instance, you may need to program your way around DPA (Differential Power Analysis) and LFI attacks (Laser Fault Injection).

Normally you program on top of an operating system. This operating system contains cryptographic libraries (normally written in C). These libraries in turn depend on the cryptographic co-processor(s) on the smart card. In general the co-processors consists of one or more specialized implementations of block ciphers (DES and AES) and an asymmetric co-processor that contains a Montgomery multiplier.

If you want to implement your own routines you probably need a development environment for a specific smart card OS. It is likely that your level of access requires an IDE to perform C-written code for a specific processor. I think that the KEIL development tools are most commonly used.

ECC algorithms are present on a lot of high end smart cards. Be aware that RSA may still be more secure regarding side channel attacks. Unfortunately I don't have information about Bi-linear pairing on a smart card.

-
Nice answer. I hesitate to mention Java Card Smart Cards. Development tools for that are easily obtainable. JC is nice for many applications using TDES, RSA, SHA-1, increasingly ECDSA, AES, SHA-256. However, bi-linear pairing performance would be abyssal if using the tiny subset of Java available, and security questionable; and the existing API to the crypto hardware tends to be too high level. Some Java Card implementations allow modular exponentiation in $\mathbb Z_N$ by importing a fake RSA private key then using a raw RSA decryption API, but can bi-linear paring be built on top of that? – fgrieu Jun 8 '13 at 8:47
@fgrieu As you know I'm pretty much involved with Java Card development, but Java Card is not something you use to create (low level) cryptographic algorithms. – Maarten Bodewes Jun 8 '13 at 12:14