Bài thực hành số 2: "Các đối tượng trong Java Card"

Bài thực hành số 2: "Các đối tượng trong Java Card" gồm 12 trang nội dung giúp bạn tham khảo và hoàn thành tốt bài thực hành của mình đạt kết quả cao.

BÀI THC HÀNH S 2 CÁC ĐI TƯNG TRONG JAVA CARD
2.1 Đi ng tn ti liên tc
B nh và d liu ca các đi tưng tn ti liên tc đưc lưu tr trong c phiên
ca CAD. Mt đi tưng tn ti liên tc có nhng thuc tính sau:
- Mt đi tưng tn ti liên tc đưc to bi mt toán t new.
- Mt đi tưng tn ti liên tc gi các trng thái và giá tr trong các phiên ca
CAD.
- Bt kì mt cp nht nào cho mt trưng đơn trong đi ng tn ti liên tc đu
là nguyên t. Điu đó nghĩa là nếu th b mt ngun hoc xy ra li trong
quá trình cp nht thì trưng đưc khôi phc v giá tr tc đó.
- Mt đi ng tn ti liên tc có th đưc tham chiếu bi mt trưng trong mt
đi ng tm thi.
- Mt tng trong đi tưng tn ti liên tc th tham chiếu ti mt đi tưng
tm thi.
- Nếu mt đi tưng tn ti liên tc không đưc tham chiếu bi mt đi tưng
khác, nó s không th truy cp hoc khôi phc đưc.
Khi mt th Applet đưc to, ging như bt kì mt đối tưng liên tc nào khác,
không gian và d liu ca Applet vn tn ti vô thi hn t phiên CAD này sang phiên
tiếp theo.
Theo mc đnh, các đi tưng Java Card là liên tc và đưc to trong b nh liên
tc. Không gian và d liu ca các đi tưng như vy tri dài trên các phiên CAD. Vì lý
do bo mt và hiu sut, các Applet có th to các đi tưng trong RAM. Nhng đi
ng như vy đưc gi là đi tưng tm thi. Các đi tưng tm thi cha d liu tm
thi, chúng không liên tc trong các phiên CAD.
2.2 Các đi ng tm thi
Thut ng đi tưng tm thi là mt ch gi chưa thc s chính xác. Nó th
đưc hiu mt cách không chính xác rng bn thân c đi tưng đó là tm thi, nghĩa
là khi b mt đin, đi tượng tm thi b phá hy. Tuy nhiên, trong thc tế, thut ng đi
ng tm thi có nghĩa là ni dung ca các tng trong đi tưng đó có bn cht tm
Downloaded by Linh Chi ??ng (chithcsttst101@gmail.com)
lOMoARcPSD|36451986
thi. Cũng ging như các đi tưng tn ti liên tc, không gian đưc phân b cho c
đi tưng tm thi đưc dành riêng và không đưc thu hi tr khi thc hin quá trình
thu gom rác.
Mt Applet to nên mt đi tưng tm thi ch mt ln duy nht trong sut vòng
đi ca nó và lưu đi tưng tham chiếu trong mt tng liên tc, như hình Hình 2.1.
các ln tiếp theo khi th đưc bt lên, Applet s s dng đi tưng tham chiếu này đ
kết ni vi đi tưng tm thi, mc cho d liu ca đi ng t phiên trưc đã b mt.
Hình 2.1 Đi ng tm thi
2.2.1 Đc đim ca đi ng tm thi
Trong Java Card, ch nhng mng kiu bn hoc mng tham chiếu ti đi
ng thì mi có th khai báo tm thi. Kiu cơ bn trong nn tng Java Card là byte,
short, int và boolean. Xuyên sut giáo tnh này, thut ng đi tưng tm thi và
mng tn ti tm thi đưc s dng hoán đi cho nhau. Đi tưng tm thi trong nn
tng Java Card có mt s đc đim như sau:
- Mt đi tưng tm thi đưc to ra bng cách gi API ca Java Card.
- Mt đi tưng tm thi không gi c trng thái và giá tr trong c phiên
CAD. Vào thi đim xy ra mt s s kin nht đnh, các tng ca mt đi
ng tm thi đưc xóa thành giá tr mc đnh ca chúng (zero, false hoc
null).
- Bt kì mt cp nht nào cho mt trưng đơn trong đi ng tn ti liên tc đu
là không nguyên t. Điu đó có nghĩa là, nếu th b mt ngun hoc xy ra li
Downloaded by Linh Chi ??ng (chithcsttst101@gmail.com)
lOMoARcPSD|36451986
trong quá tnh cp nht thì tng không đưc khôi phc v giá tr tc đó.
Nếu ghi vào các tng ca c đi tưng tm thi trong mt giao dch, khi
giao dch b hy b s không làm cho mt tng trong đi tưng tm thi
đưc khôi phc v giá tr tc đó.
- Mt đi tưng tm thi có th đưc tham chiếu bi mt tng trong đi tượng
tn ti liên tc.
- Mt tng trong đi tưng tm thi có th tham chiếu ti đi tưng tn ti
liên tc.
- Nếu mt đi tưng tm thi không đưc đưc tham chiếu bi mt đi tưng
khác, nó s không th truy cp hoc nhn giá tr rác.
- Vic ghi vào trưng ca mt d liu tm thi s không gây nh hưng đến hiu
năng vì RAM có chu k ghi nhanh hơn rt nhiu so vi EEPROM
Các đc đim ca các đi tưng tm thi làm cho chúng tr nên lý tưng cho mt
ng nh d liu ca Applet tm thi, cái mà thưng xuyên đưc sa đi nhưng không
cn phi lưu gi trong các phiên CAD. Nhà phát trin Applet cn đm bo rng d liu
tm thi như vy đưc lưu tr trong các mng tm thi. Điu này giúp gim hao mòn
tim năng trong b nh liên tc, đm bo hiu sut ghi tt hơn và thêm c phn bo mt
đ bo v các d liu nhy cm. Theo nguyên tc thông thưng, nếu d liu tm thi
đưc cp nht nhiu ln cho mi APDU đưc x lý, nhà phát trin Applet nên chuyn
chúng thành mng tm thi.
2.2.2 Các dng đi ng tm thi
hai đi tượng tm thi là CLEAR_ON_RESET và CLEAR_ON_DESELECT. Mt trong
hai loi đi tưng tm thi đưc liên kết vi s kin, trong đó nếu s kin xy ra thì s
làm cho JCRE xóa các trưng ca đi ng.
Các đi ng tm thi CLEAR_ON_RESET đưc s dng đ duy t d liu cn đưc
lưu tr tn Applet nhưng không phi tn toàn b th. Ví d: khóa phiên chính ca th
phi đưc khai báo là loi CLEAR_ON_RESET đ th chia s khóa phiên tương t gia
các Applet đưc chn trong mt phiên CAD. Khi th đưc i đt li, c tng ca
c đi tưng tm thi CLEAR_ON_RESET s b xóa. Vic i đt li th có th đưc thc
Downloaded by Linh Chi ??ng (chithcsttst101@gmail.com)
lOMoARcPSD|36451986
hin bi tín hiu i đt li gi đến mch th (warm reset) hoc bng cách tt và bt li
ngun đin.
Các đi tưng tm thi CLEAR_ON_DESELECT đưc s dng đ duy t d liu cn
đưc lưu tr khi mt Applet đưc chn và s mt đi khi Applet không đưc chn hay
reset li th. Ví d: Khóa phiên ng vi đi tưng Applet cn đưc khai báo là kiu
CLEAR_ON_DESELECT. Khi đi tưng Applet b b chn, khóa phiên s t đng xóa bi
JCRE. Đây là s phòng nga bo mt đ đi tưng Applet khác không th đc đưc d
liu khóa phiên hoc mo danh là đi ng cha khóa đy.
Thiết lp li th là ngm loi b tt c các la chn hin hành ca Applet. Do đó
các tng ca đi tưng CLEAR_ON_DESELECT ng b xóa bi cùng các s kin đưc
ch đnh cho CLEAR_ON_RESET. Hay nói cách khác là đi tưng CLEAR_ON_DESELECT
ng ging như đi tưng CLEAR_ON_RESET. Thêm vào đó, các đi tưng tm thi
CLEAR_ON_DESELECT các đc đim b sung ca ng la Applet.
2.2.3 To các đi ng tm thi
Trong ng ngh Java Card, các đi tưng tm thi đưc to ra bng cách s dng
mt trong c phương thc xut ng trong lp JCSystem, như trong Bng 2.1.
Bng 2.1 Các phương thc đ to nên các mng tm thi trong class JCSystem
Phương thc
Kết qu
public static boolean[]
makeTransientBooleanArray(short length, byte
event)
To ra mt mng boolean tm
thi
public static byte[]
makeTransientByteArray(short length, byte
event)
To ra mt mng byte tm thi
public static short[]
makeTransientShortArray(short length, byte
event)
To ra mt mng short tm
thi
public static object []
makeTransientObjectArray(short length, byte
event)
To ra mt mng object tm
thi
Downloaded by Linh Chi ??ng (chithcsttst101@gmail.com)
lOMoARcPSD|36451986
Tham s đu tiên: length trong mi li gi phương thc ch rõ li đ dài yêu cu
ca mng tm thi. Tham s th hai: event, ch loi s kin s b xóa ca đi tưng.
Do đó nó ch đnh loi mng tm thi, hoc là CLEAR_ON_RESET hoc là
CLEAR_ON_DESELECT. Hai hng s trong lp JCSystem đu đưc s dng đ din đt
loi mng tm thi:
// dng CLEAR_ON_RESET ca mng tm thi
public static final byte CLEAR_ON_RESET
// loi CLEAR_ON_DESELECT ca mng tm thi
public static final byte CLEAR_ON_DESELECT
Đon mã sau đây to ra mng loi CLEAR_ON_DESELECT
byte[] buffer =
JCSystem.makeTransientByteArray (BUFFER_LENGTH,
JCSystem.CLEAR_ON_DESELECT);
2.2.4 Truy vn các đi ng tm thi
Mt Applet th truy cp vào mt đi tưng có th đưc to ra bi mt Applet
khác. Lp JCSystem cung cp mt phương thc truy vn thun tin cho mt Applet đ
xác đnh xem đi tưng đang đưc truy cpphi là tm thi hay không:
public static byte isTransient(Object theObject)
Phương thc isTransient tr v dng hng s tm thi (có th là
CLEAR_ON_RESET hoc CLEAR_ON_DESELECT) hoc là hng s
JCSystem.NOT_A_TRANSIENT_OBJECT đ ch ra đi ng là null haymt đi ng
liên tc.
Downloaded by Linh Chi ??ng (chithcsttst101@gmail.com)
lOMoARcPSD|36451986
2.3 Ví d
Đ hiu rõ hơn v bn cht ca đi tưng liên tc và đi tưng tm thi, chúng ta
xem xét ví d sau: gi s chúng ta có mt Applet trong đó có biến s dng biến toàn cc
x, đi tưng tn ti liên tc buffer và đi tưng tn ti tm thi buffer1 và buffer2
(buffer1 là đi tưng tm thi dng CLEAR_ON_DESELECT, buffer2 là đi tưng tm
thi dng CLEAR_ON_RESET). Trong Applet s dng 2 lnh INS là: INS_UPDATE dùng đ
cp nht d liu cho các đi tưng và biến, INS_SEND dùng đ gi giá tr ca c đi
ng và biến lên máy ch (giá tr đưc gi lên máy ch theo th t: giá tr ca biến x
giá tr buffer giá tr ca buffer1 giá tr ca buffer2).
Kết qu chúng ta có đưc mt Applet như sau:
package bai2_Object;
import javacard.framework.*;
public class Applet1 extends Applet
{
//khai bao cac doi tuong va bien
private static byte[] buffer, buffer1, buffer2;
private byte x;
// khai bao ma INS trong tieu de cua apdu
final static byte INS_SEND = (byte)0x00;
final static byte INS_UPDATE = (byte)0x01;
public static void install(byte[] bArray, short bOffset, byte
bLength)
{
new Applet1().register(bArray, (short) (bOffset + 1),
bArray[bOffset]);
//khoi tao doi tuong lien tuc
buffer = new byte [2];
//khoi tao doi tuong tam thoi
Downloaded by Linh Chi ??ng (chithcsttst101@gmail.com)
lOMoARcPSD|36451986
buffer1 = JCSystem.makeTransientByteArray ((short)2,
JCSystem.CLEAR_ON_DESELECT);
buffer2 = JCSystem.makeTransientByteArray ((short)2,
JCSystem.CLEAR_ON_RESET);
}
public void process(APDU apdu)
{
if (selectingApplet())
{
return;
}
byte[] buf = apdu.getBuffer();
apdu.setIncomingAndReceive();
switch (buf[ISO7816.OFFSET_INS])
{
case INS_SEND:
//gui gia tri cac doi tuong va bien len may chu
//Buoc 1. Dat huong truyen du lieu
short le = apdu.setOutgoing();
//Buoc 2. Thong bao cho may chu so bytes se gui
apdu.setOutgoingLength((short)7);
//Buoc 3. Gui du lieu
buf[0] = x;
apdu.sendBytes((short)0, (short)1);
apdu.sendBytesLong(buffer, (short)0, (short)2);
apdu.sendBytesLong(buffer1, (short)0, (short)2);
apdu.sendBytesLong(buffer2, (short)0, (short)2);
break;
Downloaded by Linh Chi ??ng (chithcsttst101@gmail.com)
lOMoARcPSD|36451986
case INS_UPDATE:
//cap nhat gia tri cho cac doi tuong va bien
x = 9;
buffer[0] = 0x01; buffer[1] = 0x02;
buffer1[0] = 0x03; buffer1[1] = 0x04;
buffer2[0] = 0x05; buffer2[1] = 0x06;
break;
default:
ISOException.throwIt(ISO7816.SW_INS_NOT_SUPPORTED);
}
}
}
Sau khi viết xong Applet, chúng ta s thc thi Applet này theo c kch bn khác
nhau đ hiubn cht đi ng tm thiliên tc::
- Kch bn 1: b chn (deselect) Applet
- Kch bn 2: reset cng (ngt kết ni th) và reset mm Applet
Đ vic thc hin các kch bn trên, chúng ta tiến hành thông qua phn mm
PyApduTool.
Đu tiên, chúng ta khi đng phn mm PyApduTool, đ có th thc thi Applet s
dng phn mm này, thì chúng ta cn tùy chnh trong phn mm JCIDE đ th làm
vic vi th o do PyApduTool to ra. Chúng ta vào Tool IDE Options, mt ca s
cu hình s hin th ra như Hình 2.2. Ti đây, chúng ta chn Enable PCSC Interface.
Downloaded by Linh Chi ??ng (chithcsttst101@gmail.com)
lOMoARcPSD|36451986
Hình 2.2 Ca s cu hình JCIDE
Sau đó, chúng ta tiến hành chy Applet va viết, ti ca s ca phn mm
PyApduTool, chúng ta nhn Connect đ kết ni vi th o giúp làm vic vi Applet.
Kết qu ca vic kết ni th o đưc th hin như trong Hình 2.3. Đ làm vic vi
Applet, đu tiên chúng ta cn chn Applet. Đ chn Applet, chúng ta chuyn sang tab
Manager (Hình 2.4). Ti đây, chúng ta chn Applet mà chúng ta mun thc thi ( đây,
Applet ca chúng ta AID là : 11 22 33 44 55 02 01). Bây gi chúng ta tiến hành gi
các lnh APDU xung đ thc thi Applet. Chúng ta chuyn sang tab Apdu đ gi lnh
APDU (Hình 2.5). Sau khi nhp lnh ADPU cn gi, chúng ta nhn nút Send đ gi
xung th.
Đu tiên chúng ta gi lnh đ Applet gi giá tr ca các biến lên máy ch, khi đó
Applet va đưc cài đt, các đi ng và biến va đưc khi to s nhn giá tr 0.
Send: 00 00 00 00
Recv: 00 00 00 00 00 00 00 90 00
Tiếp theo, chúng ta gi lnh đ Applet cp nht giá tr ca các đi tưng và biến,
sau đó gi lnh đ Applet gi các giá tr này lên máy ch:
Downloaded by Linh Chi ??ng (chithcsttst101@gmail.com)
lOMoARcPSD|36451986
Send: 00 01 00 00
Recv: 90 00
Send: 00 00 00 00
Recv: 09 01 02 03 04 05 06 90 00
Hình 2.3 Ca s giao din phn mm PyApduTool
Hình 2.4 Ca s qun lý Applet
Downloaded by Linh Chi ??ng (chithcsttst101@gmail.com)
lOMoARcPSD|36451986
Hình 2.5 Ca s gi lnh APDU
Bây gi chúng ta s tiến hành kch bn 1: b chn Applet này. Đ b chn Applet
này, chúng ta chn Applet khác thì Applet ca chúng ta s t đng b b chn. Sau đó
chn li và gi lnh đ Applet gi giá tr ca các đi tưng và biến lên máy ch.
Send: 00 00 00 00
Recv: 09 01 02 00 00 05 06 90 00
Kết qu tn cho chúng ta thy giá tr ca đi tưng buffer1 đã b xóa khi Applet
b b chn, còn giá tr ca biến x, đi tưng buffer và buffer2 vn còn đưc u li.
Tiếp theo, chúng ta tiến hành kch bn 2: reset cng và reset mm Applet. Đ reset
cng, chúng ta nhn nút Disconnect trong tab Reader, đ reset mm chúng ta nhn nút
Reset trong tab Reader
Send: 00 00 00 00
Recv: 09 01 02 00 00 00 00 90 00
đây, giá tr ca c đi tưng tm thi buffer1 và buffer2 đu b xóa, giá tr
ca biến x và đi ng buffer vn đưc lưu gi.
Downloaded by Linh Chi ??ng (chithcsttst101@gmail.com)
lOMoARcPSD|36451986
2.4 i tp
Viết mt Applet th sinh viên lưu thông tin sinh viên gm: sinh viên, h tên,
ngày sinh. Applet gm 2 chc ng:
- Np thông tin sinh viên xung th
- Gi thông tin sinh viên lên máy ch
Downloaded by Linh Chi ??ng (chithcsttst101@gmail.com)
lOMoARcPSD|36451986
| 1/12

Preview text:

lOMoARcPSD|36451986
BÀI THỰC HÀNH SỐ 2 CÁC ĐỐI TƯỢNG TRONG JAVA CARD
2.1 Đối tượng tồn tại liên tục
Bộ nhớ và dữ liệu của các đối tượng tồn tại liên tục được lưu trữ trong các phiên
của CAD. Một đối tượng tồn tại liên tục có những thuộc tính sau:
- Một đối tượng tồn tại liên tục được tạo bởi một toán tử new.
- Một đối tượng tồn tại liên tục giữ các trạng thái và giá trị trong các phiên của CAD.
- Bất kì một cập nhật nào cho một trường đơn trong đối tượng tồn tại liên tục đều
là nguyên tử. Điều đó có nghĩa là nếu thẻ bị mất nguồn hoặc xảy ra lỗi trong
quá trình cập nhật thì trường được khôi phục về giá trị trước đó.
- Một đối tượng tồn tại liên tục có thể được tham chiếu bởi một trường trong một đối tượng tạm thời.
- Một trường trong đối tượng tồn tại liên tục có thể tham chiếu tới một đối tượng tạm thời.
- Nếu một đối tượng tồn tại liên tục không được tham chiếu bởi một đối tượng
khác, nó sẽ không thể truy cập hoặc khôi phục được.
Khi một cá thể Applet được tạo, giống như bất kì một đối tượng liên tục nào khác,
không gian và dữ liệu của Applet vẫn tồn tại vô thời hạn từ phiên CAD này sang phiên tiếp theo.
Theo mặc định, các đối tượng Java Card là liên tục và được tạo trong bộ nhớ liên
tục. Không gian và dữ liệu của các đối tượng như vậy trải dài trên các phiên CAD. Vì lý
do bảo mật và hiệu suất, các Applet có thể tạo các đối tượng trong RAM. Những đối
tượng như vậy được gọi là đối tượng tạm thời. Các đối tượng tạm thời chứa dữ liệu tạm
thời, chúng không liên tục trong các phiên CAD.
2.2 Các đối tượng tạm thời
Thuật ngữ “đối tượng tạm thời” là một cách gọi chưa thực sự chính xác. Nó có thể
được hiểu một cách không chính xác rằng bản thân các đối tượng đó là tạm thời, nghĩa
là khi bị mất điện, đối tượng tạm thời bị phá hủy. Tuy nhiên, trong thực tế, thuật ngữ đối
tượng tạm thời có nghĩa là nội dung của các trường trong đối tượng đó có bản chất tạm
Downloaded by Linh Chi ??ng (chithcsttst101@gmail.com) lOMoARcPSD|36451986
thời. Cũng giống như các đối tượng tồn tại liên tục, không gian được phân bổ cho các
đối tượng tạm thời được dành riêng và không được thu hồi trừ khi thực hiện quá trình thu gom rác.
Một Applet tạo nên một đối tượng tạm thời chỉ một lần duy nhất trong suốt vòng
đời của nó và lưu đối tượng tham chiếu trong một trường liên tục, như hình Hình 2.1. Ở
các lần tiếp theo khi thẻ được bật lên, Applet sẽ sử dụng đối tượng tham chiếu này để
kết nối với đối tượng tạm thời, mặc cho dữ liệu của đối tượng từ phiên trước đã bị mất.
Hình 2.1 Đối tượng tạm thời
2.2.1 Đặc điểm của đối tượng tạm thời
Trong Java Card, chỉ những mảng có kiểu cơ bản hoặc mảng tham chiếu tới đối
tượng thì mới có thể khai báo tạm thời. Kiểu cơ bản trong nền tảng Java Card là byte,
short, int và boolean. Xuyên suốt giáo trình này, thuật ngữ đối tượng tạm thời và
mảng tồn tại tạm thời được sử dụng hoán đổi cho nhau. Đối tượng tạm thời trong nền
tảng Java Card có một số đặc điểm như sau:
- Một đối tượng tạm thời được tạo ra bằng cách gọi API của Java Card.
- Một đối tượng tạm thời không giữ các trạng thái và giá trị trong các phiên
CAD. Vào thời điểm xảy ra một số sự kiện nhất định, các trường của một đối
tượng tạm thời được xóa thành giá trị mặc định của chúng (zero, false hoặc null).
- Bất kì một cập nhật nào cho một trường đơn trong đối tượng tồn tại liên tục đều
là không nguyên tử. Điều đó có nghĩa là, nếu thẻ bị mất nguồn hoặc xảy ra lỗi
Downloaded by Linh Chi ??ng (chithcsttst101@gmail.com) lOMoARcPSD|36451986
trong quá trình cập nhật thì trường không được khôi phục về giá trị trước đó.
Nếu ghi vào các trường của các đối tượng tạm thời trong một giao dịch, khi
giao dịch bị hủy bỏ sẽ không làm cho một trường trong đối tượng tạm thời
được khôi phục về giá trị trước đó.
- Một đối tượng tạm thời có thể được tham chiếu bởi một trường trong đối tượng tồn tại liên tục.
- Một trường trong đối tượng tạm thời có thể tham chiếu tới đối tượng tồn tại liên tục.
- Nếu một đối tượng tạm thời không được được tham chiếu bởi một đối tượng
khác, nó sẽ không thể truy cập hoặc nhận giá trị rác.
- Việc ghi vào trường của một dữ liệu tạm thời sẽ không gây ảnh hưởng đến hiệu
năng vì RAM có chu kỳ ghi nhanh hơn rất nhiều so với EEPROM
Các đặc điểm của các đối tượng tạm thời làm cho chúng trở nên lý tưởng cho một
lượng nhỏ dữ liệu của Applet tạm thời, cái mà thường xuyên được sửa đổi nhưng không
cần phải lưu giữ trong các phiên CAD. Nhà phát triển Applet cần đảm bảo rằng dữ liệu
tạm thời như vậy được lưu trữ trong các mảng tạm thời. Điều này giúp giảm hao mòn
tiềm năng trong bộ nhớ liên tục, đảm bảo hiệu suất ghi tốt hơn và thêm cả phần bảo mật
để bảo vệ các dữ liệu nhạy cảm. Theo nguyên tắc thông thường, nếu dữ liệu tạm thời
được cập nhật nhiều lần cho mỗi APDU được xử lý, nhà phát triển Applet nên chuyển
chúng thành mảng tạm thời.
2.2.2 Các dạng đối tượng tạm thời
Có hai đối tượng tạm thời là CLEAR_ON_RESET và CLEAR_ON_DESELECT. Một trong
hai loại đối tượng tạm thời được liên kết với sự kiện, trong đó nếu sự kiện xảy ra thì sẽ
làm cho JCRE xóa các trường của đối tượng.
Các đối tượng tạm thời CLEAR_ON_RESET được sử dụng để duy trì dữ liệu cần được
lưu trữ trên Applet nhưng không phải trên toàn bộ thẻ. Ví dụ: khóa phiên chính của thẻ
phải được khai báo là loại CLEAR_ON_RESET để có thể chia sẻ khóa phiên tương tự giữa
các Applet được chọn trong một phiên CAD. Khi thẻ được cài đặt lại, các trường của
các đối tượng tạm thời CLEAR_ON_RESET sẽ bị xóa. Việc cài đặt lại thẻ có thể được thực
Downloaded by Linh Chi ??ng (chithcsttst101@gmail.com) lOMoARcPSD|36451986
hiện bởi tín hiệu cài đặt lại gửi đến mạch thẻ (warm reset) hoặc bằng cách tắt và bật lại nguồn điện.
Các đối tượng tạm thời CLEAR_ON_DESELECT được sử dụng để duy trì dữ liệu cần
được lưu trữ khi một Applet được chọn và sẽ mất đi khi Applet không được chọn hay
reset lại thẻ. Ví dụ: Khóa phiên ứng với đối tượng Applet cần được khai báo là kiểu
CLEAR_ON_DESELECT. Khi đối tượng Applet bị bỏ chọn, khóa phiên sẽ tự động xóa bởi
JCRE. Đây là sự phòng ngừa bảo mật để đối tượng Applet khác không thể đọc được dữ
liệu khóa phiên hoặc mạo danh là đối tượng chứa khóa đấy.
Thiết lập lại thẻ là ngầm loại bỏ tất cả các lựa chọn hiện hành của Applet. Do đó
các trường của đối tượng CLEAR_ON_DESELECT cũng bị xóa bởi cùng các sự kiện được
chỉ định cho CLEAR_ON_RESET. Hay nói cách khác là đối tượng CLEAR_ON_DESELECT
cũng giống như đối tượng CLEAR_ON_RESET. Thêm vào đó, các đối tượng tạm thời
CLEAR_ON_DESELECT có các đặc điểm bổ sung của tường lửa Applet.
2.2.3 Tạo các đối tượng tạm thời
Trong công nghệ Java Card, các đối tượng tạm thời được tạo ra bằng cách sử dụng
một trong các phương thức xuất xưởng trong lớp JCSystem, như trong Bảng 2.1.
Bảng 2.1 Các phương thức để tạo nên các mảng tạm thời trong class JCSystem Phương thức Kết quả public static boolean[]
Tạo ra một mảng boolean tạm
makeTransientBooleanArray(short length, byte thời event) public static byte[]
Tạo ra một mảng byte tạm thời
makeTransientByteArray(short length, byte event) public static short[]
Tạo ra một mảng short tạm
makeTransientShortArray(short length, byte thời event) public static object []
Tạo ra một mảng object tạm
makeTransientObjectArray(short length, byte thời event)
Downloaded by Linh Chi ??ng (chithcsttst101@gmail.com) lOMoARcPSD|36451986
Tham số đầu tiên: length trong mỗi lời gọi phương thức chỉ rõ lời độ dài yêu cầu
của mảng tạm thời. Tham số thứ hai: event, chỉ rõ loại sự kiện sẽ bị xóa của đối tượng.
Do đó nó chỉ định loại mảng tạm thời, hoặc là CLEAR_ON_RESET hoặc là
CLEAR_ON_DESELECT. Hai hằng số trong lớp JCSystem đều được sử dụng để diễn đạt loại mảng tạm thời:
// dạng CLEAR_ON_RESET của mảng tạm thời
public static final byte CLEAR_ON_RESET
// loại CLEAR_ON_DESELECT của mảng tạm thời
public static final byte CLEAR_ON_DESELECT
Đoạn mã sau đây tạo ra mảng loại CLEAR_ON_DESELECT byte[] buffer =
JCSystem.makeTransientByteArray (BUFFER_LENGTH, JCSystem.CLEAR_ON_DESELECT);
2.2.4 Truy vấn các đối tượng tạm thời
Một Applet có thể truy cập vào một đối tượng có thể được tạo ra bởi một Applet
khác. Lớp JCSystem cung cấp một phương thức truy vấn thuận tiện cho một Applet để
xác định xem đối tượng đang được truy cập có phải là tạm thời hay không:
public static byte isTransient(Object theObject)
Phương thức isTransient trả về dạng hằng số tạm thời (có thể là CLEAR_ON_RESET hoặc CLEAR_ON_DESELECT) hoặc là hằng số
JCSystem.NOT_A_TRANSIENT_OBJECT để chỉ ra đối tượng là null hay là một đối tượng liên tục.
Downloaded by Linh Chi ??ng (chithcsttst101@gmail.com) lOMoARcPSD|36451986 2.3 Ví dụ
Để hiểu rõ hơn về bản chất của đối tượng liên tục và đối tượng tạm thời, chúng ta
xem xét ví dụ sau: giả sử chúng ta có một Applet trong đó có biến sử dụng biến toàn cục
x, đối tượng tồn tại liên tục buffer và đối tượng tồn tại tạm thời buffer1 và buffer2
(buffer1 là đối tượng tạm thời dạng CLEAR_ON_DESELECT, buffer2 là đối tượng tạm
thời dạng CLEAR_ON_RESET). Trong Applet sử dụng 2 lệnh INS là: INS_UPDATE dùng để
cập nhật dữ liệu cho các đối tượng và biến, INS_SEND dùng để gửi giá trị của các đối
tượng và biến lên máy chủ (giá trị được gửi lên máy chủ theo thứ tự: giá trị của biến x
 giá trị buffer  giá trị của buffer1  giá trị của buffer2).
Kết quả chúng ta có được một Applet như sau: package bai2_Object; import javacard.framework.*;
public class Applet1 extends Applet {
//khai bao cac doi tuong va bien
private static byte[] buffer, buffer1, buffer2; private byte x;
// khai bao ma INS trong tieu de cua apdu final static byte INS_SEND = (byte)0x00;
final static byte INS_UPDATE = (byte)0x01;
public static void install(byte[] bArray, short bOffset, byte bLength) {
new Applet1().register(bArray, (short) (bOffset + 1), bArray[bOffset]); //khoi tao doi tuong lien tuc buffer = new byte [2]; //khoi tao doi tuong tam thoi
Downloaded by Linh Chi ??ng (chithcsttst101@gmail.com) lOMoARcPSD|36451986
buffer1 = JCSystem.makeTransientByteArray ((short)2, JCSystem.CLEAR_ON_DESELECT);
buffer2 = JCSystem.makeTransientByteArray ((short)2, JCSystem.CLEAR_ON_RESET); }
public void process(APDU apdu) { if (selectingApplet()) { return; }
byte[] buf = apdu.getBuffer(); apdu.setIncomingAndReceive();
switch (buf[ISO7816.OFFSET_INS]) { case INS_SEND:
//gui gia tri cac doi tuong va bien len may chu
//Buoc 1. Dat huong truyen du lieu
short le = apdu.setOutgoing();
//Buoc 2. Thong bao cho may chu so bytes se gui
apdu.setOutgoingLength((short)7); //Buoc 3. Gui du lieu buf[0] = x;
apdu.sendBytes((short)0, (short)1);
apdu.sendBytesLong(buffer, (short)0, (short)2);
apdu.sendBytesLong(buffer1, (short)0, (short)2);
apdu.sendBytesLong(buffer2, (short)0, (short)2); break;
Downloaded by Linh Chi ??ng (chithcsttst101@gmail.com) lOMoARcPSD|36451986 case INS_UPDATE:
//cap nhat gia tri cho cac doi tuong va bien x = 9;
buffer[0] = 0x01; buffer[1] = 0x02;
buffer1[0] = 0x03; buffer1[1] = 0x04;
buffer2[0] = 0x05; buffer2[1] = 0x06; break; default:
ISOException.throwIt(ISO7816.SW_INS_NOT_SUPPORTED); } } }
Sau khi viết xong Applet, chúng ta sẽ thực thi Applet này theo các kịch bản khác
nhau để hiểu rõ bản chất đối tượng tạm thời và liên tục::
- Kịch bản 1: bỏ chọn (deselect) Applet
- Kịch bản 2: reset cứng (ngắt kết nối thẻ) và reset mềm Applet
Để việc thực hiện các kịch bản trên, chúng ta tiến hành thông qua phần mềm PyApduTool.
Đầu tiên, chúng ta khởi động phần mềm PyApduTool, để có thể thực thi Applet sử
dụng phần mềm này, thì chúng ta cần tùy chỉnh trong phần mềm JCIDE để có thể làm
việc với thẻ ảo do PyApduTool tạo ra. Chúng ta vào Tool IDE Options, một cửa sổ
cấu hình sẽ hiển thị ra như Hình 2.2. Tại đây, chúng ta chọn Enable PCSC Interface.
Downloaded by Linh Chi ??ng (chithcsttst101@gmail.com) lOMoARcPSD|36451986
Hình 2.2 Cửa sổ cấu hình JCIDE
Sau đó, chúng ta tiến hành chạy Applet vừa viết, tại cửa sổ của phần mềm
PyApduTool, chúng ta nhấn Connect để kết nối với thẻ ảo giúp làm việc với Applet.
Kết quả của việc kết nối thẻ ảo được thể hiện như trong Hình 2.3. Để làm việc với
Applet, đầu tiên chúng ta cần chọn Applet. Để chọn Applet, chúng ta chuyển sang tab
Manager (Hình 2.4). Tại đây, chúng ta chọn Applet mà chúng ta muốn thực thi (ở đây,
Applet của chúng ta có AID là : 11 22 33 44 55 02 01). Bây giờ chúng ta tiến hành gửi
các lệnh APDU xuống để thực thi Applet. Chúng ta chuyển sang tab Apdu để gửi lệnh
APDU (Hình 2.5). Sau khi nhập lệnh ADPU cần gửi, chúng ta nhấn nút Send để gửi xuống thẻ.
Đầu tiên chúng ta gửi lệnh để Applet gửi giá trị của các biến lên máy chủ, khi đó
Applet vừa được cài đặt, các đối tượng và biến vừa được khởi tạo sẽ nhận giá trị 0. Send: 00 00 00 00
Recv: 00 00 00 00 00 00 00 90 00
Tiếp theo, chúng ta gửi lệnh để Applet cập nhật giá trị của các đối tượng và biến,
sau đó gửi lệnh để Applet gửi các giá trị này lên máy chủ:
Downloaded by Linh Chi ??ng (chithcsttst101@gmail.com) lOMoARcPSD|36451986 Send: 00 01 00 00 Recv: 90 00 Send: 00 00 00 00
Recv: 09 01 02 03 04 05 06 90 00
Hình 2.3 Cửa sổ giao diện phần mềm PyApduTool
Hình 2.4 Cửa sổ quản lý Applet
Downloaded by Linh Chi ??ng (chithcsttst101@gmail.com) lOMoARcPSD|36451986
Hình 2.5 Cửa sổ gửi lệnh APDU
Bây giờ chúng ta sẽ tiến hành kịch bản 1: bỏ chọn Applet này. Để bỏ chọn Applet
này, chúng ta chọn Applet khác thì Applet của chúng ta sẽ tự động bị bỏ chọn. Sau đó
chọn lại và gửi lệnh để Applet gửi giá trị của các đối tượng và biến lên máy chủ. Send: 00 00 00 00
Recv: 09 01 02 00 00 05 06 90 00
Kết quả trên cho chúng ta thấy giá trị của đối tượng buffer1 đã bị xóa khi Applet
bị bỏ chọn, còn giá trị của biến x, đối tượng buffer và buffer2 vẫn còn được lưu lại.
Tiếp theo, chúng ta tiến hành kịch bản 2: reset cứng và reset mềm Applet. Để reset
cứng, chúng ta nhấn nút Disconnect trong tab Reader, để reset mềm chúng ta nhấn nút
Reset trong tab Reader Send: 00 00 00 00
Recv: 09 01 02 00 00 00 00 90 00
Ở đây, giá trị của các đối tượng tạm thời buffer1 và buffer2 đều bị xóa, giá trị
của biến x và đối tượng buffer vẫn được lưu giữ.
Downloaded by Linh Chi ??ng (chithcsttst101@gmail.com) lOMoARcPSD|36451986 2.4 Bài tập
Viết một Applet thẻ sinh viên lưu thông tin sinh viên gồm: Mã sinh viên, họ tên,
ngày sinh. Applet gồm 2 chức năng:
- Nạp thông tin sinh viên xuống thẻ
- Gửi thông tin sinh viên lên máy chủ
Downloaded by Linh Chi ??ng (chithcsttst101@gmail.com)
Document Outline

  • BÀI THỰC HÀNH SỐ 2 CÁC ĐỐI TƯỢNG TRONG JAVA CARD
    • 2.1 Đối tượng tồn tại liên tục
    • 2.2 Các đối tượng tạm thời
      • 2.2.1 Đặc điểm của đối tượng tạm thời
      • 2.2.2 Các dạng đối tượng tạm thời
      • 2.2.3 Tạo các đối tượng tạm thời
      • 2.2.4 Truy vấn các đối tượng tạm thời
    • 2.3 Ví dụ
    • 2.4 Bài tập