**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.
----------------------------------------------------------

### Tính lưu chuyể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

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

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

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ử 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
----------------

### Ngôn ngữ

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).

### Applet

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

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

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

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

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ử

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

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

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

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

Liên kết ngoài
--------------

Oracle - JavaCard