Để thực hiện bảo mật thụng tin, mỗi ứng dụng trong SIM cần cú một khoỏ riờng được lưu trong một file khúa (file khoỏ này sẽ được tạo trong quỏ trỡnh nạp ứng dụng vào SIM của khỏch hàng đăng ký với một AID xỏc định, tờn file được đặt là EF_keyfile). Cỏc khoỏ được lưu trong cựng tờn AID nhưng giỏ trị khúa khỏc nhau, kốm với khoỏ là một id_key của chớnh khoỏ đú. Cỏc file khúa này được lưu vào một miền truy nhập (Access Domain) của SIM. Miền truy nhập yờu cầu khoỏ để đọc nội dung file, khoỏ này chỉ cú ứng dụng Thanh toỏn điện tử biết đến.Trờn STK Gateway cũng lưu một cơ sở dữ liệu cỏc khoỏ này (bao gồm key và id_key).
Lớp DataCipher thực hiện mó hoỏ, tạo chuỗi Message Digest để xỏc thực tớnh toàn vẹn thụng tin phớa bờn nhận, lớp này thực hiện bảo mật dữ liệu trước đúng gúi bản tin SMS.
class DataCipher {
byte[] encryptData(byte[] input, byte[] output); byte[] getKey();
Cipher getAlgorith();
byte[] createMD(short id_Alg, byte[] input); }
// Mó hoỏ dữ liệu
// Lấy khoỏ trong EF_keyfile // Lựa chọn thuật toỏn // Tạo chuỗi MD
Lớp khai bỏo ConstantValue định nghĩa cỏc hằng số sử dụng cho ứng dụng SIM.
public interface ConstantValue {
static final byte ERR_EXECUTIVE = (byte)0x46; static final byte SERVER_OPERATION = (byte)0x0F; static final byte CMD_QUALIFIER = (byte)0x80;
static final byte EXIT_REQUESTED_BY_USER = (byte)0x10; }
Lớp MainProcess là lớp xử lý chớnh của ứng dụng, thực hiện cỏc chức năng như tạo cõy thực đơn cho ứng dụng, hiển thị cỏc thụng tin hỗ trợ khỏch hàng sử dụng, tạo cỏc giao diện nhập số liệu người dựng, gửi cỏc bản tin SMS lờn mạng thực hiện cỏc yờu cầu tra cứu thụng tin tài khoản VCB, xem cước thuờ bao MobiFone, yờu cầu thanh toỏn cước qua tài khoản VCB.
class MainProcess { private short providerID; private short bankID; private byte[] account; private byte[] pinCode; private byte[] currencyCode;
private byte[] msisdn; private byte[] billCycle;
private byte[] chargedMoney;
// Mó nhà cung cấp dịch vụ // Mó ngõn hàng
// Số tài khoản ngõn hàng // Mó PIN ứng với tài khoản trờn // Mó của loại tiền tệ
// Số điện thoại MobiFone // Chu kỳ cước
private byte[] keyID; private byte[] smsType;
public void sendSms(byte[] tpduData); public void help();
public short createMenu(object[] itemList); public byte[] getInputData(); }
// Chỉ ra SMS là yờu cầu tra cứu hay thanh toỏn // Chỉ số của khoỏ trong file key
// Gửi SMS ra STK Gateway // Hiển thị thụng tin hỗ trợ sử dụng // Tạo cõy thực đơn
// Lấy thụng tin nhập
Việc đúng gúi dữ liệu vào SMS với cỏc yờu cầu thanh toỏn cần xỏc định độ dài của bản tin được mó hoỏ, độ dài nờn đảm bảo <160 Byte. Ta hoàn toàn cú thể xỏc định độ dài bản tin gửi đi thụng qua cỏc đặc tớnh:
Với việc sử dụng thuật toỏn của hệ mật mó đối xứng DES, bản tin cần mó hoỏ sẽ được mó hoỏ theo từng khối 8 Byte và kết quả đầu ra cũng cú độ dài bằng độ dài bản tin đầu vào nờn ta cú thể xỏc định được độ dài bản tin sau mó hoỏ.
Với việc tạo bản tin Message Digest, cú nhiều thuật toỏn để tạo cỏc bản tin để đảm bảo tớnh toàn vẹn. Tuỳ theo từng thuật toỏn đầu ra bản tin sau mó hoỏ cú thể là 4 byte, 8 byte hay 16 byte với độ dài bản tin đầu vào bất kỳ. Do đú ta hoàn toàn cú thể xỏc định được độ dài của bản tin trước khi gửi đi.
Thuật toỏn được lựa chọn cho mó hoỏ dữ liệu của ứng dụng là thuật toỏn DES, thuật toỏn được sử dụng tạo MD được chọn là ALG_DES_MAC8_PKCS5 (đầu ra là 8 byte sau khi mó hoỏ).
Với bản tin yờu cầu thanh toỏn, ban đầu providerID, bankID, account, pinCode, currencyCode, msisdn, billCycle, chargedMoney sẽ mó hoỏ theo thuật toỏn DES, tạo ra chuỗi dataEnc. Sau đú dataEnc sẽ được tạo thành một MD. Sau đú, đúng gúi cỏc thụng tin bao gồm dataEnc, MD, keyID, smsType sẽ được đúng gúi SMS và gửi đi. Với cỏc SMS yờu cầu tra cứu sẽ được phõn biệt bởi tham số smsType.