Survey
* Your assessment is very important for improving the work of artificial intelligence, which forms the content of this project
* Your assessment is very important for improving the work of artificial intelligence, which forms the content of this project
Programming Smart Cards Rajnish Kumar Comp527. Expect to learn Cardlet Development Installation Coke Machine Interface Implementation Basic Cryptography Smart Cards A Card with built-in micro-processor and memory. Applications : Pre-paid calling card Security needs e-cash Terminology Program Cardlet Applet Application Instance of Program Unique AID APDU Communication format between card and terminal Java Card Architecture Cardlets Loader Application Javacard API SOLO virtual Machine APDU Mgmt FileSystem Crypto Chip Dependent Functions Utilities Developing a Cardlet 1. Develop a .java file Compile to .class -Use the packages provided -Javacard.framework -Javacardx.cryptography -Use “-g” to compile - javac –g wallet.java Developing a Cardlet 1. Compile to .class Develop a .java file 2. Create a .bin file Use MakeSOLO tool to generate .bin file from .class Developing a Cardlet 1. Use CardletManager tool to download .bin file to the card. Compile to .class Develop a .java file 2. 3. Create a .bin file Download as a program file Developing a Cardlet 1. •Instantiate the program Compile to .class Develop a .java file 2. •Assign AID 3. Create a .bin file 4. Download as a program file Install as a Cardlet Methods required for Cardlet install() : instantiate cardlet object select() : prepare the cardlet for execution process() : switch statement Optional : main() : entry point for cardlet Javacard.framework AID APDU ISO OwnerPin Applet Util - Application ID - Handling communication buffer - constants - array functions Beware !! Card resource limitations Total cardlet size : 13.5 kb Limited heap and stack size Operation time out Desynchronization Writing Terminal Application Java Card’s native commands Hosted by Loader utility Loader acts as native OS Loader’s function : Conduct transaction between terminal and cardlet Provide cryptography support Manage card’s files, program files and cardlets. Example Commands CreateFile DeleteFile SelectFile ReadBinary UpadteBinary VerifyCHV VerifyKey Terminal Application Use slb.iop.* classes to write terminal application in Java Example method : SmartCard.sendCardAPDU( CLA, INS, P1,P2, dataArray, Mode ) Command format (APDU) From Terminal CLA From Card, To Terminal INS P1 P2 P3 Data SW1 CLA : Command Class ( 1byte ) 00h for loader class ( Card specific ). 03h for Wallet ( User defined ) SW2 Command format From Terminal CLA INS P1 P2 P3 Data From Card, To Terminal SW1 INS : Command Instruction Identifier (1b) CLA + INS uniquely identifies the command If native, loader process Else, forwarded to suitable cardlet 03h for getBalance(). SW2 Command format From Terminal From Card, To Terminal CLA INS P1 P2 P3 Data SW1 SW2 P1,P2 : Command parameters P3 : number of bytes of data to follow, or expected by the terminal SW1,SW2 : status words. Cryptography Support Cryptography Support Symmetric/Asymmetric Authentication Internal/External Authentication Key Files Supported Encryption Algorithms: DES 3-DES RSA Key Files Key File File ID Details CHV1 CHV2 0000 0100 Card holder verification PIN, unblocking PIN, attempts Ext Key file 0011 Contains DES/3DES keys for external authentication, transport key Int Key file 0001 DES/3DES keys for internal authentication, MAC RSA-PRI RSA-PUB 0012 1012 Private key Public key External Authentication 1. 2. 3. Terminal calls AskRandom. Card has to return a challenge (random number ). Terminal encrypts the challenge. Sends the encrypted challenge back to card using ExternalAuth . Key ID is also specified. Card checks the correctness of terminal response, and authenticates if correct. Internal Authentication 1. Call an CLA INS 00/F0 2. 3. 88 InternalAuth command P1 P2 algo_ID key_nb P3 Mode length S/R Call getResponse to get the cryptogram Check if cryptogram is correct. Javacardx.crypto Classes DES_Key DES3_Key RSA_PrivateKey RSA_PublicKey MessageDigest En/Decryption DES_Key class methods encryptECB, encryptCBC decryptECB, decryptCBC generateMAC, verifyMAC setKey getBlockSize Code Walk Through Reference SDK Guide Cyberflex Access Programmer’s Guide Search google for Java cryptography www.cyberflex.com/Support/support.html