Ứng dụng Java Card RMI sẽ hoạt động giống như cỏc ứng dụng RMI trờn Java. Trước tiờn, ứng dụng trạm (Host Application) sẽ sinh ra cỏc triệu gọi từ xa bằng việc gửi cỏc RMI APDU tới JCRE. Sau đú JCRE sẽ chuyển cỏc APDU này tới cỏc Java Card RMI Applet tương ứng. Applet nhận được APDU sẽ gửi chỳng tới RMIService và tạo ra lời triệu gọi RMI.
2.3 SIM Toolkit Applet
2.3.1 Định nghĩa
SIM Toolkit Applet [8] là một Java Card Applet với cỏc cỏc tớnh năng như sau:
Nú cú thể đăng ký cỏc sự kiện với SIM Toolkit Framework, như nhận một Envelope Menu Selection , Envelope SMS-PP, v.v…
SIM Toolkit Framework sẽ xỏc định sự kiện xuất hiện và thực hiện kớch hoạt cỏc Applet nào đó đăng ký sự kiện đú.
Khi được kớch hoạt, cỏc Applet cú thể thực hiện hành động như gửi cỏc lệnh yờu cầu ME thực hiện như gửi cỏc lệnh Proactive Command.
Hoặc cỏc Applet cú thể truy nhập hệ thống file GSM bằng cỏch sử dụng API.
Để cú thể cài đặt cỏc Applet trờn thẻ SIM và trao đổi dữ liệu với nú, người ta đó định nghĩa một mụi trường Java Card hỗ trợ GSM gọi là SIM Toolkit Framework. SIM Toolkit Framework này bao gồm JCRE, Toolkit Registry, Toolkit Handler, và File System. JCRE sẽ chọn một Applet tương ứng và gửi APDU để xử lý. Toolkit Registry quản lý tất cả cỏc thụng tin đăng ký của cỏc Toolkit Applet. Toolkit Handler quản lý sự tồn tại của System Handler và giao thức Toolkit.
2.3.2 Cấu trỳc SIM Toolkit Applet
Một ứng dụng SIM Toolkit Applet bao gồm cỏc hàm chớnh như sau:
import sim.toolkit.*; import sim.access.*;
import javacard.framework.*;
public class AppletLoad extends Applet implements ToolkitInterface, ToolkitConstants{ private static SIMView sim;
private final static byte HIGH_PRIORITY = (byte)0x01; // Constructor of the applet
private AppletLoad() {
// Get the GSM application reference
SIMView gsmFile = SIMSystem.getTheSIMView(); // Register to the SIM Toolkit Framework
// Method called by the JCRE at the installation of the applet public static void install(byte bArray, short bOffset, byte blength) {
AppletLoad app = new AppletLoad(); app.register();
}
// Method called by the SIM Toolkit Framework public void processToolkit(byte event)
{
// Get the handler references
EnvelopeHandler envHdlr = EnvelopeHandler.getTheHandler(); ProactiveHandler proHdlr = ProactiveHandler.getTheHandler(); switch(event)
{..} }
// Method called by the JCRE, once selected public void process(APDU apdu)
{
// Handle the Select AID apdu if(selectingApplet()) return;
switch (apdu.getBuffer()[1]) {
// Specific APDU for this applet to configure the MenuTitle from SelectItem case (byte)MY_INSTRUCTION: if(apdu.setIncomingAndReceive() > (short)0) { Util.arrayCopy(apdu.getBuffer(),(short)0x0005,menuTitle,(short)0x0000,(short)0x0006); } break; default: ISOException.throwIt(ISO7816.SW_INS_NOT_SUPPORTED); }
Ứng dụng SIM Toolkit bao gồm một hay nhiều Applet khỏc nhau được đúng gúi thành một file .cap. File .cap này sẽ được tải vào SIM qua đường cỏp nối cú đầu đọc gọi là SIM Card Reader hoặc qua OTA do nhà quản trị mạng di động thực hiện.
Ứng dụng SIM Toolkit xõy dựng dựa trờn nền Java Card cú hỗ trợ cỏc gúi lập trỡnh Java chuẩn. Cỏc gúi sim.toolkit, sim.access là cỏc API theo chuẩn GSM 03.19.
Gúi sim.toolkit định nghĩa cỏc lớp Handler cho phộp ứng dụng thực hiện cỏc chức năng phỏt hành lệnh, nhận trả lời từ Handset, xử lý cỏc thao tỏc thụng tin nhận được, cung cấp cỏc giao tiếp ToolkitInterface, ToolkitConstant chứa cỏc hằng số như mó lệnh TAG, giỏ trị cỏc sự kiện và cỏc dịch vụ đăng ký.
Gúi sim.access cung cấp cỏc dịch vụ truy cập hệ thống file GSM, cho phộp ứng dụng trong SIM cú thể chọn và đọc nội dung của một file GSM thụng qua lớp SIMView.
Trong cỏc thành phần của ứng dụng, phương thức install() được truy cập bởi JCRE như một thủ tục cuối cựng trong tiến trỡnh cài đặt một Applet, cỏc tham số cài đặt được cung cấp trong tham số của phương thức. Cỏc tham số được sử dụng để thiết lập cỏc thực thể ứng dụng Applet. Mỗi Applet được cài đặt vào SIM cú một AID (Application Identifier) duy nhất được tạo khi tải ứng dụng vào SIM.
Khi xõy dựng ứng dụng SIM Toolkit cần xỏc định khả năng hỗ trợ của từng loại SIM, khả năng hỗ trợ thực thi ứng dụng của điện thoại di động. Tuy cỏc thụng số như phiờn bản của cỏc gúi SIM API sẽ được cung cấp bởi cỏc nhà cung cấp SIM nhưng do cỏc gúi SIM API đó được chuẩn hoỏ thành GSM 03.19 nờn thụng thường SIM API đều hỗ trợ cỏc hàm và phương thức như nhau. Đặc tớnh hỗ trợ thực thi ứng dụng trờn Handset là tuỳ chọn đối với những nhà sản xuất Handset khỏc nhau, thụng thường với cỏc điện thoại phase 2+ đều hỗ trợ cỏc lệnh được định nghĩa trong chuẩn GSM 03.19.
Khi triển khai ứng dụng thụng thường tập trung vào cỏc vấn đề như:
Giới hạn kớch thước ứng dụng trong SIM. Điều này chỉ phụ thuộc vào khụng gian cũn lại trong bộ nhớ EEPROM, thụng thường ứng dụng SIM cú kớch thước < 10 KByte.
Số lượng cỏc mục trong thực đơn tối đa cho một ứng dụng. Do lệnh hiển thị thực đơn từ SIM lờn Handset được đúng gúi dạng TLV được chứa chỉ trong một đơn vị dữ liệu APDU cú độ dài phần dữ liệu tối đa 249 byte nờn khi hiển thị thực đơn với số lượng lớn mục thực đơn con cần chỳ ý điều này.
2.4 Mụ hỡnh phỏt triển ứng dụng SIM Toolkit
2.4.1 Mụ hỡnh phỏt triển ứng dụng SMS TCP/IP GSM SMS Security Customer SIM GSM SIM Toolkit Applet SmartTrust Wireless Internet Gateway Internet TCP/IP Internet Server Customer’s Bank Transport Security (GSM 03.48)
End-to-end Security (3DES) SMSC
SMPP
STK Gateway
Hệ thống triển khai ứng dụng SIM Toolkit [3,4] gồm cú cỏc thành phần cơ bản:
Phớa khỏch hàng:
Điện thoại phase 2+ hoặc cú hỗ trợ SIM Toolkit.
Ứng dụng được nạp vào trong SIM phase 2+ hay SIM cú nền Java Card Phớa nhà cung cấp dịch vụ:
SMSC: Trung tõm dịch vụ bản tin ngắn.
STK Gateway: Trung tõm nhận thụng tin từ ứng dụng trong thẻ SIM.
Information Management Platform: Nền quản trị thụng tin, là một OTA Server.
Content Provider: Nhà cung cấp thụng tin, trung tõm cung cấp thụng tin này được kết nối tới STK Gateway.
Trong mụ hỡnh trờn, ứng dụng trong SIM gọi là cỏc SIM Toolkit Applet được tải và nạp vào SIM từ OTA Server. Việc tải ứng dụng hay dữ liệu vào SIM hoàn toàn thuộc quyền điều khiển của cỏc nhà quản lý và khai thỏc dịch vụ di động (Network Operator). Trờn mạng của nhà quản lý và khai thỏc dịch vụ di động luụn cú một OTA Server. OTA Server này thường được thiết kế và cung cấp bởi nhà sản xuất thẻ SIM bỏn cho nhà khai thỏc dịch vụ di động.
Về nguyờn tắc, toàn bộ cỏc dữ liệu được tải về thẻ SIM luụn được đảm bảo tớnh bớ mật. Để thực hiện điều này giữa OTA Server và SIM luụn thiết lập một kờnh bảo mật được thực hiện theo chuẩn GSM 03.48. Chuẩn bảo mật GSM 03.48 dành riờng cho cụng nghệ SIM Toolkit. Nú sử dụng hệ bảo mật đối xứng với cỏc khúa mó được biết đến ở hai đầu kết nối trờn SIM và trờn OTA Server. Thuật toỏn được sử dụng là thuật toỏn DES.
Mụ hỡnh trờn cũng mụ tả hoạt động của một ứng dụng SIM Toolkit đơn giản thụng qua cỏc bước:
1. Người dựng khởi tạo một ứng dụng tỡm kiếm thụng tin qua thực đơn dịch vụ được lưu trong thẻ SIM.
2. Ứng dụng trong thẻ SIM (SIM Toolkit Applet) thực hiện đúng gúi thụng tin khỏch hàng nhập hoặc lựa chọn yờu cầu vào bản tin SMS, và yờu cầu Handset gửi ra mạng.
3. SMSC nhận bản tin này, kiểm tra đớch đến và chuyển nú tới STK Gateway (SIM Toolkit Gateway này cú thể là OTA Server).
4. STK Gateway nhận được thụng tin do SMSC chuyển tới sẽ tiến hành phõn tớch yờu cầu và gửi yờu cầu tới một Application Server.
5. Application Server tham khảo yờu cầu và gửi thụng tin trả lời lại STK Gateway.
6. STK Gateway nhận thụng tin trả lời, đúng gúi thụng tin dạng SMS và chuyển nú tới SMSC.
7. SMSC sẽ chuyển SMS này tới ứng dụng trong thẻ SIM.
8. Ứng dụng trong thẻ SIM sẽ nhận thụng tin xử lý và hiển thị cho người dựng.
2.4.2 Cỏc bước xõy dựng phần mềm
Để xõy dựng một ứng dụng chạy trờn cỏc thiết bị đầu cuối, cần phải trải qua nhiều cụng đoạn, cú thể kể ra một số cụng đoạn chớnh như sau:
2.4.2.1 Xỏc dịnh bài toỏn
Tương tự như J2SE, J2ME việc phỏt triển ứng dụng phần mềm cho thẻ SIM cú thể chia làm hai loại phần mềm chớnh:
Ứng dụng đơn trờn thẻ SIM: tức là cỏc ứng dụng này chỉ chạy trờn SIM mà khụng cần giao tiếp với cỏc ứng dụng chạy trờn mỏy khỏc.
Vớ dụ: Lịch làm việc, trũ chơi.
Ứng dụng mạng: tức là ứng dụng khi chạy cú thể phải giao tiếp với cỏc ứng dụng chạy trờn mụi trường khỏc như cỏc ứng dụng duyệt WAP cần giao tiếp với cỏc WAP Server, ứng dụng này sử dụng cỏc chức năng qua kờnh SMS hay GPRS.
Vớ dụ: Tra cứu thụng tin, Mobile-Banking, M-Commerce, đũi hỏi với tớnh bảo mật cao.
Cả hai loại ứng dụng trờn nền SIM Toolkit đó cung cấp một số hàm API sẵn cú để thực hiện cỏc nhiệm vụ. Ngoài ra người phỏt triển ứng dụng cú thể tự xõy dựng cỏc lớp khỏc từ cỏc lớp cơ bản của SIM để thực hiện chức năng cho từng ứng dụng cụ thể.
Ngoài ra, SIM Toolkit cũn hỗ trợ cơ chế bảo mật, đõy là một đặc tớnh rất quan trọng cho phộp phỏt triển cỏc ứng dụng đũi hỏi tớnh bảo mật cao như: Mobile- Banking, M-Commerce.
2.4.2.2 Phõn tớch thiết kế hệ thống
Cũng như cỏc ứng dụng khỏc, khụng chỉ trờn nền Java, việc phõn tớch thiết kế hệ thống cho chương trỡnh phần mềm là rất cần thiết. Điều này càng cú ý nghĩa hơn khi cỏc chương trỡnh ứng dụng trờn thẻ SIM đũi hỏi cỏc yờu cầu và điều kiện nghiờm ngặt hơn khi cỏc thẻ SIM luụn bị hạn chế về dung lượng cũng như tốc độ xử lý.
Từ yờu cầu khắt khe trong mụi trường thực thi trờn nền SIM Toolkit, cỏc ứng dụng cần phải được thiết kế đảm bảo tớnh đơn giản, gọn nhẹ và phải đảm bảo về tốc độ xử lý cũng như tốc độ truy cập tại cỏc thiết bị di động đầu cuối cũng như tại cỏc mỏy chủ xử lý thụng tin.
2.4.2.3 Viết chương trỡnh
Khi phõn tớch thiết kế ứng dụng đầy đủ, chi tiết thỡ việc viết chương trỡnh sẽ trở nờn hết sức đơn giản. Một ứng dụng hoàn thiện bao gồm một lớp Applet duy nhất chớnh là lớp chạy chương trỡnh. Cỏc chức năng của chương trỡnh cú thể tổ chức thành cỏc hàm hoặc cỏc lớp riờng để lớp Applet chớnh tham chiếu tới nú.
2.4.2.4 Tối ưu hoỏ chương trỡnh
Như đó trỡnh bày, tài nguyờn cũng như khả năng đỏp ứng của hệ điều hành trong SIM rất hạn chế do đú cần tối ưu hoỏ chương trỡnh sau khi viết. Đõy là thao tỏc căn chỉnh lại chương trỡnh nhằm mục đớch tăng tốc độ xử lý, tiết kiệm tài nguyờn. Cụng việc gồm cỏc thao tỏc:
Tổ chức lại chương trỡnh.
Hạn chế khai bỏo biến khụng cần thiết.
Hạn chế sử dụng vũng lặp vụ hạn.
2.4.2.5 Kiểm tra tớnh tương thớch
Vỡ SIM Toolkit Framework khụng cú tớnh đặc thự cao nờn cú thể yờn tõm khi phỏt triển ứng dụng SIM Toolkit. Để chương trỡnh chạy ổn trờn thiết bị nào đú cần nắm rừ thiết bị đú hỗ trợ những API nào. Để thực hiện điều này cú thể kiểm tra cỏc thụng tin do nhà cung cấp SIM đưa ra.
2.4.2.6 Biờn dịch
Đõy là quỏ trỡnh dịch cỏc file .java thành cỏc .class, cú thể chạy được trờn JCVM, thực hiện việc này như với cỏc ứng dụng Java bỡnh thường.
2.4.2.7 Đúng gúi
Việc đúng gúi thực chất là tạo ra cỏc file .cap. Khi cài đặt file này sẽ được nạp vào hệ thống.
2.4.2.8 Cài đặt
Việc cài đặt ứng dụng gồm việc nạp gúi chương trỡnh, thiết lập cỏc tham số trong nền SIM, cỏc yờu cầu bảo mật.
Cú thể cài đặt ứng dụng vào SIM theo hai cỏch:
Nạp qua cỏp dữ liệu, qua thiết bị SIM Card Reader.
Tải ứng dụng qua OTA Gateway của nhà cung cấp SIM.
2.5 Lập trỡnh với cỏc hàm giao diện của SIM Toolkit
2.5.1 Tạo và gửi lệnh Proactive Command
Để xõy dựng lệnh Proactive Command, lớp ProactiveHandler được sử dụng như đoạn mó dưới đõy:
{
ProactiveHandler proHdlr = ProactiveHandler.getTheHandler(); proHdlr.init(PRO_CMD_SELECT_ITEM,(byte)0x00,DEV_ID_ME);
proHdlr.appendTLV((byte) (TAG_ALPHA_IDENTIFIER | TAG_SET_CR), menuTitle, (short)0x0000, (short)menuTitle.length);
proHdlr.send(); }
SIM Toolkit Applet gọi hàm ProactiveHandler.init() để định nghĩa lệnh gửi đi như được mụ tả trong GSM 11.14, và tham số chi tiết lệnh. Để cộng thờm cỏc TLV vào TLV list, khi đú phương thức EditHandler.appendTLV() được gọi. Khi xõy dựng xong lệnh, Toolkit Applet gọi hàm proactiveHandler.send() để gửi lệnh tới ME.
2.5.2 Cỏc lệnh quản lý sự kiện
2.5.2.1 Đăng ký sự kiện
Một Toolkit Applet đăng ký một hay nhiều sự kiện bằng cỏch gọi hàm
setEvent() của lớp ToolkitRegistry như đoạn mó dưới đõy:
{
reg = ToolkitRegistry.getEntry();
// Đăng ký sự kiện EVENT_UNFORMATTED_SMS_PP_ENV reg.setEvent(EVENT_UNFORMATTED_SMS_PP_ENV); }
Danh sỏch cỏc sự kiện được liệt kờ trong chuẩn GSM 11.14.
2.5.2.2 Huỷ đăng ký sự kiện
Một Toolkit Applet cú thể khụng đăng ký một sự kiện, tuỳ theo cỏc sự kiện sử dụng cỏc phương thức sau:
clearEvent(), realeaseTimer() , hay phương thức requestPollInterval(). Vớ dụ:
{
ToolkitRegistry reg = ToolkitRegistry.getEntry(); reg.clearEvent(EVENT_FORMAT_SMS_PP_ENV); }
2.5.3 Đọc nội dung file GSM
Để đọc một file GSM sử dụng lớp SIMView trong gúi sim.access.
{
private static SIMView sim = SIMSystem.getTheSIMView(); sim.select(SIMView.FID_EF_SMS, buf, (short)0, (short)buf.length);
sim.readRecord((short)1, SIMView.REC_ACC_MODE_ABSOLUTE_CURRENT, (short)0, buf, (short)0, (short)buf.length);
}
2.5.4 Nhận và gửi bản tin SMS
2.5.4.1 Gửi bản tin SMS
SIM Toolkit cung cấp cỏc hàm cơ sở trong API để thực hiện nhắn tin. Để thực hiện gửi một bản tin ngắn, SIM Toolkit Applet gửi lệnh Proactive Command cho ME, việc này thực hiện được qua lớp ProactiveHandler sử dụng ba phương thức cơ bản: init(), appendTLV() và send() như dưới đõy:
{
ProactiveHandler proHdlr = ProactiveHandler.getThehandler();
proHdlr.init(PRO_CMD_SEND_SHORT_MESSAGE, (byte)0, DEV_ID_NETWORK); proHdlr.appendTLV(TAG_SMS_TPDU, tpduSubmit, (short)0, (short)tpduSubmitLength); proHdlr.send();
Đoạn mó trờn mụ tả việc gửi một bản tin ngắn trờn mạng với cấu trỳc TPDU được ta định nghĩa trước. Giống như việc viết cỏc ứng dụng như gửi một bản tin ngắn, việc thực hiện cuộc gọi cũng được xõy dựng tương tự. Với cỏc ứng dụng bảo mật, trước khi gửi SMS, nội dung trong TPDU đó được mó hoỏ sử dụng cỏc phương thức trong gúi javacard.security, javacard.crypto.
2.5.4.2 Nhận bản tin SMS
Để nhận SMS, Applet cần thực hiện đăng ký sự kiện nhận SMS, sau đú chờ khi sự kiện xuất hiện sẽ đọc thụng tin từ SMS nhận được.
reg.setEvent(EVENT_FORMATTED_SMS_PP_ENV);
public void processToolkit (byte event) throws ToolkitException { ProactiveHandler proHdlr = ProactiveHandler.getTheHandler(); switch (event) { // receive SMS case EVENT_FORMATTED_SMS_PP_ENV: EnvelopeHandler eh = EnvelopeHandler.getTheHandler(); eh.findTLV(TAG_SMS_TPDU, (byte)1); tpudLengthOffset = eh.getTPUDLOffset(); userDataLength = (short)(eh.getValueByte(tpudLengthOffset) - 19); for (i=0; i<userDataLength; i++) {
userData [i] = eh.getValueByte((short)(tpudLengthOffset + i + 20)); }
} }
2.5.5 Mó hoỏ và giải mó dữ liệu
private static void desEncryptDecrypt () { short i = 0;
if (desCipher == null) {
desCipher = Cipher.getInstance(Cipher.ALG_DES_CBC_NOPAD, true); desKey = (DESKey)KeyBuilder.buildKey(KeyBuilder.TYPE_DES, KeyBuilder.LENGTH_DES3_2KEY,false);
desKey.setKey(plaintext, (short)0); }
// fill Buff Array with value 0x12 in length bytes
Util.arrayFillNonAtomic(buf, (short)0, (short)buf.length, (byte)0x12); do {
// encrypt
desCipher.init(desKey, Cipher.MODE_ENCRYPT);
desCipher.doFinal(buf,(short)0,(short)buf.length, buf, (short)0);
// decrypt
} while(++i < 1000);
if (Util.arrayCompare(buf, (short)0, plaintext, (short)0, (short)plaintext.length) != 0) ISOException.throwIt((short)0x6f00);
}
2.6 Kết luận
SIM Toolkit là một cụng cụ hữu hiệu dành cho cỏc nhà khai thỏc mạng di động để phỏt triển và cung cấp cỏc dịch vụ giỏ trị gia tăng tới cỏc thuờ bao của họ một cỏch nhanh chúng và hiệu quả.
Cỏc ứng dụng cú thể hoạt động được trong SIM cần cú một hệ nền SIM Java Card hay cũn gọi là SIM Toolkit Framework. Cỏc thành phần chớnh của SIM Toolkit Framework là cỏc lớp hỗ trợ thực thi Tookit Applet, truy cập dữ liệu trờn SIM và điều khiển cỏc sự kiện của cỏc Applet.
Java Card là phiờn bản đặc biệt của Java hỗ trợ lập trỡnh cho thẻ thụng minh. Khỏc với Java Card, J2ME hỗ trợ lập trỡnh trờn nền Java cho thiết bị di động. Như vậy, cỏc ứng dụng của J2ME được nạp vào mỏy, trong khi cỏc ứng dụng của SIM Toolkit lại được nạp trực tiếp trờn thẻ SIM.
Chƣơng 3 - XÂY DỰNG HỆ THỐNG THANH TOÁN ĐIỆN TỬ VÀ TRA CỨU THễNG TIN TÀI KHOẢN QUA NGÂN
HÀNG NGOẠI THƢƠNG VIỆT NAM
3.1 Giới thiệu bài toỏn
Trong những năm vừa qua cựng với việc nõng cao chất lượng dịch vụ, khõu xử lý thanh toỏn cước phớ sử dụng dịch vụ viễn thụng là mối quan tõm hàng đầu của cỏc Bưu điện Tỉnh/Thành trong cả nước. Hiện nay, việc thu cước tại cỏc Bưu điện