آموزش

 برنامه‌نویسی جاواکارت

برای برنامه‌‌نویسی جاواکارت یا به‌‌طور جزئی‌‌تر، برای برنامه‌‌نویسی یک اپلت، ابتدا باید نام بسته‌‌ی اپلت مشخص و درون قالب برنامه آورده شود. پس از آن می‌‌بایست کلاس‌‌هایی را که اپلت مورد نظر از آن‌‌ها استفاده می‌‌کند، درون برنامه import کرد. بدنه‌‌ی اصلی برنامه public class… extends Applet می‌‌باشد که درون آن دوتابع دیگر از نوع Void فراخوانی می‌‌شود. یکی از این توابع هنگام نصب اپلت و دیگری هنگامی که یک APDU (Application Processing Data Unit ) به اپلت فرستاده می‌‌شود، فراخوانی می‌‌گردد. عملکرد اصلی اپلت در قسمت switch…case پیاده‌‌سازی می‌‌شود. قابل ذکر است که فرمت APDU یعنی CLA، INS (و در صورت لزوم P1 و P2) می‌‌بایست در قسمت public class آورده شود.

 یک نمونه اپلت در زیر آورده شده است.

package pkgHello20K;

import javacard.framework.APDU;

import javacard.framework.ISO7816;

import javacard.framework.Applet;

import javacard.framework.ISOException;

//to run the applet run /send b010000010

public class AppHello20K extends Applet {

                final static byte HelloWorld_CLA = (byte)0xB0;

                final static byte HELLO_MESSAGE_INS = (byte)0x10;

                byte[] helloMesage = {'H', 'E', 'L', 'L', 'O','!'};

                public static void install(byte[] bArray, short bOffset, byte bLength) {

                                // GP-compliant JavaCard applet registration

                                new AppHello20K().register(bArray, (short) (bOffset + 1),

                                                                bArray[bOffset]);

                }

                public void process(APDU apdu) {

                                // Good practice: Return 9000 on SELECT

                                if (selectingApplet()) {

                                                return;

                                {                             

                                // Get the incoming APDU buffer

                                byte[] buf = apdu.getBuffer();

                                // If unrecognized class, return "unsupported class!"

                                if (buf[ISO7816.OFFSET_CLA] != HelloWorld_CLA)

                                                ISOException.throwIt(ISO7816.SW_CLA_NOT_SUPPORTED);

                                switch (buf[ISO7816.OFFSET_INS]) {

                                case HELLO_MESSAGE_INS:

                                                helloMessage(apdu);

                                                break;

                                default:

                                                // good practice: If you don't know the INStruction, say so:

                                                ISOException.throwIt(ISO7816.SW_INS_NOT_SUPPORTED);

                                }

                {

                private void helloMessage(APDU apdu){

                                short le = apdu.setOutgoing();

                                apdu.setOutgoingLength(le);

                                apdu.sendBytesLong(helloMesage, (short)0, (short)le);

                {

{

 

استانداردهای سیم‌کارت

استانداردهای سیم‌‌کارت به دو دسته‌‌ی کلی سیم‌‌کارت‌‌های نسل دوم و سیم‌‌کارت‌‌های نسل سوم و سوم به‌‌بعد دسته‌‌بندی می‌‌شوند.

استانداردهای سیم‌‌کارت‌‌های نسل دوم شامل 3GPP TS 51.011، 3GPP TS 51.014 و 3GPP TS 43.019 می‌‌شود.

استاندارد 3GPP TS 51.011 (GSM SIM Specification ) مشخصات فیزیکی و منطقی سیم‌‌کارت و ارتباط بین سیم‌‌کارت و دستگاه تلفن همراه را تعیین می‌‌کند. همچنین یه مدل پایه‌‌ای برای طراحی ساختار منطقی سیم‌‌کارت ارائه می‌‌دهد. همچنین ویژگی‌‌های امنیتی، عملکردهای واسط‌‌، فرمان‌‌ها (commandها)، محتوای فایل‌‌های مورد نیاز برای GSM و پروتکل‌‌ها را بیان می‌‌کند

همچنین استاندارد 3GPP TS 51.014 (SAT) مربوط به مشخصات SIM Application Toolkit می‌‌شود. این استاندارد commandها، Application Protocolها و نیازمندی‌‌های اساسی برای هر روالی که بین سیم‌‌کارت و دستگاه تلفن همراه وجود دارد را مشخص می‌‌کند.

 در نهایت استاندارد 3GPP TS 43.019 (SIM JCAPI) مشخصات لازم برای برنامه‌‌نویسی سیم‌‌کارت‌‌های نسل دوم، توانایی‌‌های عملکردی و روند اطلاعات را برای SIM API فراهم می‌‌آورد. اطلاعات موجود در این استاندارد قابل اعمال به اپراتورهای شبکه، فراهم‌‌کننده‌‌های سرویس و SIM و تولیدکننده‌‌های سرور و پایگاه داده می‌‌باشد.

استانداردهای سیم‌‌کارت نسل سوم و سوم به‌‌بعد شامل3GPP TS 31.102 ،3GPP TS 31.103 ، 3GPP TS 31.111 و3GPP TS 31.130  می‌‌باشد.

استاندارد 3GPP TS 31.102 (USIM Application) و 3GPP TS 31.103 (ISIM Application) مشخصات نرم‌‌افزاری سیم‌‌کارت‌‌های این نسل را فراهم می‌‌کنند. این استانداردها شامل پرامترهای لازم برای commandهای خاص، ساختارهای فایل، محتوای فایل‌‌های EF، توابع امنیتی و پروتکل‌‌هایی که در واسط بین USIM (ISIM) و دستگاه تلفن همراه استفاده می‌‌شوند، می‌‌باشند.

 استاندارد 3GPP TS 31.111 (USAT) مربوط به مشخصات USIM Application Toolkit می‌‌شود. USAT مجموعه‌‌ای از commandها و روال‌‌هایی می‌‌باشد که حین عملیات شبکه استفاده می‌‌شوند. این استاندارد شامل commandها، application protocolها و نیازمندی‌‌های اساسی در روال‌‌های UICC و دستگاه تلفن همراه می‌‌باشد.

درنهایت استاندارد 3GPP TS 31.130 (USIM JCAPI) مشخصات لازم برای برنامه‌‌نویسی سیم‌‌کارت‌‌های این نسل را فراهم می‌‌کند. اطلاعات موجود در این استاندارد قابل اعمال به اپراتورهای شبکه، فراهم‌‌کننده‌‌های سرویس و (U)SIM و تولیدکننده‌‌های سرور و پایگاه داده می‌‌باشد.

 

استانداردهای کارت هوشمند

استانداردهای کارت هوشمند به سه دسته تقسیم می‌‌شوند: استاندارد  (Java Card API (JCAPI و (Global Platform (GP و ISO/IEC 7816.

استاندارد JCAPI بیشتر برای برنامه‌‌نویسی کارت هوشمند (برنامه‌‌نویسی اپلت‌‌های کارت) استفاده می‌‌گردد. این استاندارد شامل چند بسته‌‌ی نرم‌‌افزاری و هر بسته شامل چند کلاس می‌‌باشد. کلاس‌‌های هر بسته دارای چندین متد هستند که در واقع عملکرد آن کلاس را نشان می‌‌دهند. یکی از مهم‌‌ترین بسته‌‌های این استاندارد، Javacard.security می‌‌باشد که پیاده‌‌سازی کلاس‌‌های درون آن امنیت کارت هوشمند را فراهم می‌‌کند. همان‌‌طور که از نام استاندارد برمی‌‌آید، پیاده‌‌سازی کلاس‌‌ها با زبان برنامه‌‌نویسی جاوا صورت می‌‌گیرد.

 همچنین استاندارد GP در جهت مدیریت و احراز هویت کارت به‌‌کار می‌‌رود. با دستورات این استاندارد اپلت‌‌های پیاده‌‌سازی شده، روی کارت بارگذاری شده و یک نمونه از ان اپلت روی کارت نصب می‌‌گردد. حتی می‌‌توان اپلت پیاده‌‌سازی شده را از روی کارت حذف نمود. همچنین می‌‌توان با استفاده از دستورات این استاندارد می‌‌توان life cycle کارت هوشمند را تغییر داد.

در نهایت استاندارد ISO/IEC 7816 نیز مشخصات فیزیکی، الکتریکی، پروتکل‌‌های ارتباطی کارت، ابعاد و محل تماس کارت، مجموعه‌‌ای از دستورات، ثبت فراهم‌‌کننده‌‌های سرویس، مکانیزم‌‌ها و دستوراتی برای عملیات امنیتی، دستوراتی برای مدیرت کارت، سیگنال‌‌های الکترونیکی و ATR برای کارت‌‌های آسنکرون، واسط الکتریکی USB و روال‌‌های عملیات آن برای کارت‌‌های تماسی، دستوراتی برای مدیریت Applicationها در محیط‌‌های multi-application و ... را به‌‌همراه دارد.