2015-05-19 21 views
8

Tôi đã làm việc với thẻ thông minh và tôi quen với lệnh APDU (được xác định trong ISO/IEC 7816Thông số kỹ thuật toàn cầu).Gửi lệnh APDU tới thẻ USIM/SIM trong android

Bây giờ tôi muốn biết liệu có cách nào để gửi lệnh APDU tới thẻ USIM/SIM được lắp vào điện thoại di động của tôi không? (Samsung A3 với cài đặt Android v4.4.4 kitkat.)

tôi đã tìm kiếm trong Google và tôi tìm thấy một số chủ đề liên quan và các công cụ có tên SIM Toolkit ApplicationTìm kiếm dành cho Android. Nhưng tôi thực sự không hiểu chúng là gì? Các mục này có phải là hai ứng dụng mà tôi phải cài đặt trên điện thoại di động của mình không? hoặc là hai công cụ đã được cài đặt trên thẻ USIM/SIM đã và đang nhận lệnh từ điện thoại di động?

là gì sự khác biệt giữa Proactive lệnh, APDU lệnhAT lệnh?

Tôi có nên học android để phát triển các ứng dụng thẻ SIM hay tôi chỉ cần các thông số kỹ thuật thẻ Java và các tiêu chuẩn ETSI?

Xin cảm ơn trước.

Trả lời

11

Có thể có hai loại applet khác nhau hiện có trên thẻ SIM của bạn.

applet Common

applet Common viết bằng JavaCard đồng bằng. Đây là loại applet mà bạn quen thuộc từ thế giới của các loại thẻ thông minh thông thường. Nó có phương thức process và thẻ thông minh là chủ thể thụ động trong giao tiếp: ứng dụng của bạn gửi lệnh APDU và phản hồi thẻ.

Bạn có thể liên lạc với các ứng dụng này bằng cách sử dụng một nhóm thư viện Android đặc biệt có tên là SEEK dành cho Android. Hãy xem số tutorial này để tìm hiểu cách tạo ứng dụng điện thoại như vậy.

Bắt đầu từ cấp API 21 cũng có cách để liên lạc với SIM bằng cách sử dụng Telephony Manager. Tuy nhiên, có một trở ngại lớn: ứng dụng của bạn cần sự cho phép MODIFY_PHONE_STATE, điều này chỉ có thể được cấp cho các ứng dụng hệ thống. Ứng dụng không phải là hệ thống, không được phép sử dụng nó.

SIM Toolkit Applet

thẻ

Một SIM là nhiều hơn chỉ là một thẻ thông minh phổ biến và viết một applet cho một thẻ SIM có thể phức tạp hơn nhiều so với một thẻ thông minh phổ biến nếu bạn muốn sử dụng tất cả các khả năng mà thẻ SIM cung cấp. Tôi khuyên bạn nên đọc this paper - đó là luận văn cử nhân của một ai đó, nhưng đó là tổng quan tốt nhất cho người mới bắt đầu tôi đã tìm thấy trên Internet. Tôi cũng khuyên bạn nên this video from the DefConn conference.

Vai trò của ứng dụng được tải trên thẻ SIM khác nhau: applet không còn là thực thể thụ động nữa. Điện thoại hỏi applet của bạn thường xuyên: "Tôi có thể làm gì mới cho bạn không?" và applet của bạn có thể trả lời: "Có, gửi tin nhắn SMS này," hoặc "Cho tôi biết thời gian là gì" vv Hơn nữa, applet của bạn có thể trở thành người nghe một số sự kiện: cuộc gọi đến, SMS đã nhận, khoảng thời gian trôi qua, v.v.Có, thẻ SIM có vẻ bị động từ quan điểm kỹ thuật, nhưng vai trò của nó thực tế là một thẻ đang hoạt động: đó là thẻ SIM gửi lệnh đến điện thoại.

Các lệnh này được gọi là lệnh "chủ động" hoặc lệnh Bộ công cụ ứng dụng SIM. Cấu trúc giống nhau - CLA INS P1 P2 Dữ liệu LC LE; ý nghĩa là khác.

Bạn có thể gửi chúng từ applet của bạn bằng cách sử dụng các lớp học trong một gói JavaCard đặc biệt được gọi là sim.toolkit.

(SIM Application Toolkit là một tiêu chuẩn mà xác định các lệnh chủ động trong cùng một cách Global Platform xác định vòng đời của applet.)

Ví dụ về SIM Toolkit Applet:

import sim.toolkit.ToolkitInterface; 
import sim.toolkit.ToolkitRegistry; 
... 
import javacard.framework.ISOException; 

public class STKTest extends Applet implements ToolkitInterface { 

public static void install(byte[] bArray, short bOffset, byte bLength) { 
    // GP-compliant JavaCard applet registration 
    new STKTest().register(bArray, (short) (bOffset + 1), bArray[bOffset]); 
} 
//this method handles standard APDU commands 
public void process(APDU apdu) { 
    // Good practice: Return 9000 on SELECT 
    if (selectingApplet()) { 
     return; 
    } 

    apdu.setIncomingAndReceive(); 
    final byte[] buf = apdu.getBuffer(); 
    switch (buf[ISO7816.OFFSET_INS]) { 
    case (byte) 0x00: 
     //do something 
     break; 
    } 
} 
//this method handles the SIM Toolkit commands 
public void processToolkit(byte event) throws ToolkitException { 
    switch (event) { 

    case ToolkitConstants.EVENT_TIMER_EXPIRATION: 
     //do something 
     break; 
    } 
} 

} 

Vâng, bạn nên tìm hiểu Android - bạn sẽ cần nó để sử dụng thư viện SEEK. Câu hỏi của bạn rất rộng, hãy hỏi tôi bất kỳ chi tiết nào, nếu bạn muốn.

+0

Cảm ơn vojta thân yêu. ** 1 - ** Vì vậy, _SEEK cho Android_ là một thư viện mà tôi sử dụng để viết applet cho bộ điện thoại di động của tôi (và không phải cho SIM/USIM) để liên lạc với các applet trên USIM/SIM, phải không? ** 2 - ** Bạn có bất kỳ ý tưởng gì là _SIM Toolkit Applicatin_ (hay còn gọi là STK)? – Jean

+0

Lệnh Proactive có tương tự với lệnh APDU thông thường không? Tôi có nghĩa là họ có một tiêu đề bắt buộc 4 byte chứa CLA, INS, P1 và P2? hoặc chúng hoàn toàn khác nhau? – Jean

+0

Trong phần 1, bạn nhấn mạnh rằng các thẻ thông minh thông thường là vai trò thụ động trong giao tiếp. đúng rồi. nhưng điều đó có nghĩa là thẻ USIM/SIM có thể có vai trò tích cực trong giao tiếp với điện thoại hay họ cũng chờ lệnh luôn và họ không thể bắt đầu liên lạc? bạn nói rằng điện thoại hỏi applet thường xuyên "Tôi có thể làm gì cho bạn không?" (** cùng một ứng dụng được viết bằng SEEK cho thư viện android? **) và applet trên SIM trả lời nó. vì vậy SIM vẫn thụ động. không phải nó? – Jean

4

Bắt đầu từ cấp API 22 (Android 5.1) có một Tùy chọn khác được gọi là "Đặc quyền của nhà cung cấp dịch vụ". Nó cho phép các ứng dụng không phải hệ thống gửi APDU đến thẻ SIM bằng cách sử dụng Android TelephonyManager. Xem: https://developer.android.com/reference/android/telephony/TelephonyManager.html#hasCarrierPrivileges()

Ví dụ nhà khai thác mạng di động (MNO) Ứng dụng được phân phối trên Google Play có thể sử dụng tính năng này. Nhưng một lần nữa nó không mở cho tất cả mọi người. Trong trường hợp này, bạn cần được SIM cấp quyền truy cập. Các quy tắc truy cập trên SIM được quản lý bởi MNO đã phát hành nó. Xem thêm: http://source.android.com/devices/tech/config/uicc.html

Các vấn đề liên quan