Java Card

Bách khoa toàn thư mở Wikipedia
Bước tới: menu, tìm kiếm

JavaCard là một công nghệ cho phép mang đến cho các trình ứng dụng Java applet có thể chạy một cách bảo mật trên các thẻ thông minh và tương tự với các bộ nhớ nhỏ của các thiết bị lưu vết. Javacard là một thành phần nhỏ nhất của Java được tích hợp bên trong các thiết bị. Javacard mang đến cho người dùng khả năng lập trình cho các thiết bị mà tạo các trình ứng dụng chuyên biệt. Nó được sử dụng rộng rãi trong SIM card (trong GSM của điện thoại di động) và thẻ ATM. Đầu tiên JavaCard được giới thiệu vào năm 1996 bởi phòng chuyên trách thẻ Schlumberger và sau đó nó kết hợp với Gemplus để tạo ra hình thức thống nhất là thẻ Gmalto. Các sản phẩm Javacard dựa trên nền tảng Javacard được phát triển bởi Sun Microsystem, là một chi nhánh của tập đoàn Oracle. Nhiều sản phẩm thẻ Javacard được xây dựng trên các tiêu chuẩn của GlobalPlatform với mục đích quản lý bảo mật cho các ứng dụng thẻ (tải, cài đặt, cá nhân hóa, xóa).

Thiết kế chính của Javacard là tính lưu chuyển và bảo mật.[sửa | sửa mã nguồn]

Tính lưu chuyển[sửa | sửa mã nguồn]

Được xác định bởi thẻ thông minh cho phép các applet của Javacard có thể chạy trên các thẻ thông minh khác nhau, nó cũng tương tự như các applet trên máy tính. Tính lưu chuyển làm giảm đáng kể kích thước bộ nhớ, tăng hiệu năng, và hỗ trợ môi trường runtime (ví dụ cho các protocol kết nối hoặc các thuật toán mã hóa).

Tính bảo mật[sửa | sửa mã nguồn]

Javacard đầu tiên được phát triển với mục đích bảo mật thông tin lưu trữ trên thẻ thông minh. Tính bảo mật được xác định bởi các tiêu chuẩn sau:

Tính bao đóng dữ liệu[sửa | sửa mã nguồn]

Dữ liệu được lưu trữ trong các ứng dụng, và các ứng dụng Javacard được chạy trong môi trường cô lập (máy ảo của Javacard) phân tách với hệ điều hành và phần cứng.

Tường lửa applet[sửa | sửa mã nguồn]

Không giống với máy ảo Java, máy ảo JavaCard thường quản lý vài trình ứng dụng, mỗi một trong số chúng điều khiển một dữ liệu nhạy. Các trình ứng dụng khác nhau có thể phân tách với nhau bởi các tường lửa applet được giới hạn và kiểm tra sự truy cập của các thành phần dữ liệu của một applet với các applet khác.

Mã hóa[sửa | sửa mã nguồn]

Sử dụng thuật toán khóa đối xứng như DES, Triple DES, AES và thuật toán bất đối xứng như RSA, mã hóa đường cong Eclipse. Các dịch vụ mã hóa khác như chữ kí, khởi tạo khóa và trao đổi khóa cũng được hỗ trợ.

Javacard và Java[sửa | sửa mã nguồn]

Ngôn ngữ[sửa | sửa mã nguồn]

Theo các mức ngôn ngữ, Javacard là tập con chính xác của Java. Mọi ngôn ngữ khởi tạo của Javacard tồn tại trong Java và được xác thực. Các chương trình Javacard được biên dịch thành các Java class bởi trình biên dịch Java mà không cần đến sự chọn lựa đặc biệt (các file class được xử lý sau bởi các công cụ được chỉ định bởi nền Javacard). Tuy nhiên, nhiều đặc trưng của ngôn ngữ java - như lựa chọn runtime không được tích hợp trong thẻ thông minh (ví dụ loại int là loại mặc định của biểu thức Java; chế độ dọn rác của các đối tượng).

Ví dụ một chương trình Javacard[sửa | sửa mã nguồn]

package dangngochoangthanh.blogspot.com;

import javacard.framework.*;

//* An example Java Card Applet
//* This applet writes back dummy byte sequences. 
//* It shows the Java Card applet development process only.
//* @author HoangThanh.

public class CardTest extends Applet {

//standard APDU input offset values
public final static byte THIS_CLA = (byte)0x90;
public final static byte INITIALIZE_TRANSACTION = (byte)0x20;
public final static byte COMPLETE_TRANSACTION= (byte)0x22;
public final static byte INITIALIZE_UPDATE= (byte)0x24;
public final static byte COMPLETE_UPDATE= (byte)0x26;
// dummy byte sequences returned by this applet
private final static byte[] INIT_SEQUENCE = { (byte)0x1, (byte)0x2 };
private final static byte[] COMPLETE_SEQUENCE = { (byte)0x1, (byte)0x3 };
private final static byte[] INIT_UPDATE_SEQUENCE = { (byte)0x1, (byte)0x2, (byte)0x3 };
private final static byte[] COMPLETE_UPDATE_SEQUENCE = { (byte)0x1, (byte)0x1 };
/**
 * Constructor.
 * Only this class's install method can create the applet object.
 */
private CardTest() {
 //perform some initialization here
 //...
 register();//register this instance
}
/**
 * Installs this applet.
 * @param byteArray the array containing installation parameters
 * @param offset the starting offset in byteArray
 * @param length the length in bytes of the parameter data in byteArray
 */
public static void install(byte[] byteArray, short offset, byte length) {
 new CardTest();
}
/**
 * Implementation of the standard method for processing an incoming APDU.
 * @param apdu the incoming APDU
 * @exception ISOException with ISO 7816-4 response bytes
 */
public void process(APDU apdu) {
 byte buffer[] = apdu.getBuffer();
 if (buffer[ISO7816.OFFSET_CLA] == THIS_CLA) {
  switch (buffer[ISO7816.OFFSET_INS])   {
   case INITIALIZE_TRANSACTION:
    writeBack(apdu, INIT_SEQUENCE);
    break;
   case COMPLETE_TRANSACTION:
    writeBack(apdu, COMPLETE_SEQUENCE);
    break;
   case INITIALIZE_UPDATE:
    writeBack(apdu, INIT_UPDATE_SEQUENCE);
    break;
   case COMPLETE_UPDATE:
    writeBack(apdu, COMPLETE_UPDATE_SEQUENCE);
    break;
   default:
    ISOException.throwIt(ISO7816.SW_INS_NOT_SUPPORTED);
  }
 }
}
/**
 * An example method that writes back a given byte array through the apdu.
 */
protected void writeBack(APDU apdu, byte[] bytes) {
 byte buffer[] = apdu.getBuffer();
 // set apdu for data output
 apdu.setOutgoing();
 apdu.setOutgoingLength((short) (3));
 // output header
 apdu.sendBytes((short)0, (short) 3);
 // writes data
 apdu.sendBytesLong(bytes, (short) 0, (short) 0);
}

}

Applet[sửa | sửa mã nguồn]

Applet là một mức cho phép xử lý bởi một request và đáp trả bằng một response bằng cách gửi dữ liệu hoặc mức response trở lại cho interface của các thiết bị.

Bytecode[sửa | sửa mã nguồn]

Javacard bytecode chạy trên máy ảo Javacard là tập con các chức năng của Java byte code chạy trên JVM, nhưng sử dụng giải mã khác nhau được tối ưu cho kích thước. Một Javacard applet sử dụng ít bytecode hơn Java applet được biên dịch cùng mã nguồn Java. Vùng bộ nhớ này cần thiết trong tài nguyên của các thiết bị nhưu thẻ thông minh. Như một sự cân bằng trong thiết kế, có một sô giới hạn và một số thuộc tính của Java không được hỗ trợ trong Javacard và giới hạn về kích thước. Các kĩ thuật tồn tại cho việc truyền tải kích thước giới hạn, như phân chia vùng code cho các trình ứng dụng sang các gói có kích thước giới hạn nhỏ hơn 64KiB.

Thư viện và runtime[sửa | sửa mã nguồn]

Các lớp thư viện và runtime của Javacard chuẩn hỗ trợ tương đối khác với Java và sự giao thoa của chúng cũng tương đối nhỏ. Ví dụ, các lớp "quản lý bảo mật Java" không được hỗ trợ trong Javacard, thay vào đó nó được thực thi bởi máy ảo Javacard, và điện áp (không ổn định, các biến lưu ở RAM có thể là lớp thành viên) được hỗ trợ thông qua các lớp thư viện Javacard, trong khi chúng có ngôn ngữ truyền thống hỗ trợ Java.

Các đặc trưng chuyên biệt[sửa | sửa mã nguồn]

Javacard runtime và máy ảo cũng hỗ trợ các tính năng nhất định trên nền Javacard

Tính ổn định[sửa | sửa mã nguồn]

Với Javacard, các đối tượng được lưu trữ mặc định trên bộ nhớ ổn định (RAM ít được sử dụng trên các thẻ thông minh và nó chỉ sử dụng cho các đối tượng tạm thời hoặc bảo mật cao). Môi trường runtime cũng tốt như bytecode để quản lý các đối tượng ổn định.

Tính nguyên tử[sửa | sửa mã nguồn]

Khi một thẻ thông minh được nhấn mạnh và được tin tưởng lưu trữ trên vùng bộ nhớ ổn định, tính ổn định này được cập nhật một cách riêng biệt. Các cá nhân viết các hàm để thực thi bởi cấu trúc bytecode riêng và các phương pháp API bảo đảm và Javacard runtime bao gồm một kĩ thuật thực thi giới hạn.

Sự cô lập applet[sửa | sửa mã nguồn]

Tường lửa Javacard là một kĩ thuật cô lập các applet khác nhau được đưa ra trên thẻ và khác nhau với các thẻ khác. Nó cũng bao gồm các kĩ thuật chia sẻ cho phép một applet có thể tạo ra một đối tượng có thể thực thi trên applet khác.

Phát triển[sửa | sửa mã nguồn]

Kĩ thuật lập trình được sử dụng trong Javacard là khác với so với chương trình Java bình thường. Dẫu vậy, javacard sử dụng một số tập con chuẩn mực của ngôn ngữ Java và sử dụng trình môi trường Java để phát triển và biên dịch Javacard.

JAVACARD 3.0[sửa | sửa mã nguồn]

  1. Phiên bản cổ điển.
  2. Phiên bản kết nối.

LIÊN KẾT NGOÀI ĐẾN JAVACARD CỦA ORACLE[sửa | sửa mã nguồn]

Oracle - JavaCard