Java Card 2.0 이해

이 기사는 스마트 카드에 대한 개요와 스마트 카드 표준 인 ISO 7816에 대한 간략한 검토로 시작됩니다. 이전 Java 개발자 칼럼의 스마트 카드에 대한 배경 지식을 고려할 때이 기사는 "Java 카드 란 무엇입니까?"라는 질문에 대한 답변으로 시작됩니다. Java 카드 시스템 아키텍처에 대한 개요. 다음으로 Java 카드 수명주기를 포함하여 Java 카드와 관련된 많은 문제에 초점을 맞출 것입니다. Java Card 2.0 언어 하위 집합 및 API 라이브러리 클래스 및 Java 카드 보안. 그런 다음 Java Card 런타임 환경에 대해 논의하고 Java Card가 실행되는 방식을 보여줍니다. 조명 예제로 마무리하겠습니다. Java 카드 전용으로 작성된 전자 지갑 애플리케이션입니다.

여기서부터 Java Card에 대한 모든 참조는 암시 적으로 Java Card 2.0을 참조합니다.

스마트 카드 란 무엇입니까?

신용 카드 크기와 동일한 스마트 카드는 본체의 플라스틱 기판에 실리콘에 내장 된 전자 회로를 통해 정보를 저장하고 처리합니다. 스마트 카드에는 두 가지 기본 종류가 있습니다. 지능형 스마트 카드 에는 마이크로 프로세서가 포함되어 있으며 소형 마이크로 컴퓨터처럼 읽기, 쓰기 및 계산 기능을 제공합니다. 반면에 메모리 카드 에는 마이크로 프로세서가 없으며 정보 저장 용으로 만 사용됩니다. 메모리 카드는 보안 로직을 사용하여 메모리 액세스를 제어합니다.

모든 스마트 카드에는 세 가지 유형의 메모리가 포함되어 있습니다. 영구 불변 메모리; 영구 가변 메모리; 비 지속적 가변 메모리. ROM, EEPROM 및 RAM은 현재 스마트 카드에서 각각의 세 가지 유형에 대해 가장 널리 사용되는 메모리입니다. 영구 메모리는 비 휘발성 메모리라고도합니다. 이 기사에서는 영구비 휘발성 이라는 용어를 같은 의미로 사용합니다 .

국제 표준기구에서 정의한 ISO 7816 파트 1-7에는 스마트 카드의 다양한 측면을 다루는 일련의 표준이 포함되어 있습니다. ISO 7816은 다음으로 구성됩니다.

  • 물리적 특성 (1 부)

  • 접점의 치수 및 위치 (2 부)

  • 전자 신호 및 전송 프로토콜 (3 부)

  • 교환을위한 산업 간 명령 (4 부)

  • 애플리케이션 식별자 (파트 5)

  • 산업 간 데이터 요소 (6 부)

  • SCQL에 대한 산업 간 명령 (파트 7)

다음 다이어그램은 ISO 7816, 파트 1에 정의 된 스마트 카드의 물리적 특성을 보여줍니다.

ISO 7816 및 스마트 카드에 대한 자세한 내용은 "스마트 카드 : 입문서"를 참조하십시오.

일반적으로 스마트 카드에는 전원 공급 장치, 디스플레이 또는 키보드가 없습니다. 8 개의 접점을 통해 직렬 통신 인터페이스를 사용하여 외부 세계와 상호 작용합니다. 접점의 치수와 위치는 ISO 7816의 파트 2에서 다룹니다.이 다이어그램은 스마트 카드의 접점을 보여줍니다.

다른 컴퓨터에 연결할 수있는 CAD (Card Acceptance Device)에 스마트 카드가 삽입됩니다. 카드 수락 장치에 사용되는 다른 용어로는 터미널 , 리더IFD (인터페이스 장치)가 있습니다. 이들은 모두 카드에 전원을 공급하고 데이터 전송 연결을 설정하는 동일한 기본 기능을 제공합니다.

두 컴퓨터가 서로 통신 할 때 일련의 프로토콜에 따라 구성된 데이터 패키지를 교환합니다. 마찬가지로 스마트 카드는 APDU (Application Protocol Data Units) 라는 자체 데이터 패키지를 사용하여 외부 세계와 통신 합니다. APDU에는 명령 또는 응답 메시지가 포함됩니다. 카드 세계에서는 스마트 카드가 항상 수동적 인 역할을하는 마스터-슬레이브 모델이 사용됩니다. 즉, 스마트 카드는 항상 터미널에서 명령 APDU를 기다립니다. 그런 다음 APDU에 지정된 동작을 실행하고 응답 APDU로 단말에 응답합니다. 명령 APDU 및 응답 APDU는 카드와 터미널간에 교대로 교환됩니다.

다음 표는 각각 명령 및 응답 APDU 형식을 보여줍니다. APDU 구조는 ISO 7816, 파트 4에 설명되어 있습니다.

명령 APDU
필수 헤더 조건부 본문
CLA INS P1 P2 LC 데이터 필드

헤더는 선택한 명령을 코딩합니다. 클래스 (CLA), 명령어 (INS), 매개 변수 1 및 2 (P1 및 P2)의 네 가지 필드로 구성됩니다. 각 필드에는 1 바이트가 포함됩니다.

  • CLA : 클래스 바이트. 많은 스마트 카드에서이 바이트는 응용 프로그램을 식별하는 데 사용됩니다.

  • INS : 명령어 바이트. 이 바이트는 명령어 코드를 나타냅니다.

  • P1-P2 : 매개 변수 바이트. 이는 APDU 명령에 대한 추가 자격을 제공합니다.

Lc는 명령 APDU의 데이터 필드에있는 바이트 수를 나타냅니다. Le는 다음 응답 APDU의 데이터 필드에서 예상되는 최대 바이트 수를 나타냅니다.

응답 APDU
조건부 본문 필수 예고편
데이터 필드 SW1 SW2

상태 바이트 SW1 및 SW2는 카드에서 명령 APDU의 처리 상태를 나타냅니다.

Java 카드 란 무엇입니까?

Java 카드는 Java 프로그램을 실행할 수있는 스마트 카드입니다. Java Card 2.0 사양은 //www.javasoft.com/javacard에 게시되었습니다. 여기에는 스마트 카드에서 Java 카드 가상 머신 및 API (응용 프로그래밍 인터페이스)를 빌드하는 데 대한 자세한 정보가 포함되어 있습니다. 최소 시스템 요구 사항은 16KB의 읽기 전용 메모리 (ROM), 8KB의 EEPROM 및 256 바이트의 RAM (Random Access Memory)입니다.

Java 카드의 시스템 아키텍처는 다음 그림에 나와 있습니다.

그림에 표시된 것처럼 Java 카드 VM은 특정 IC (집적 회로) 및 기본 운영 체제 구현 위에 구축됩니다. JVM 계층은 공통 언어 및 시스템 인터페이스로 제조업체의 독점 기술을 숨 깁니다. Java Card 프레임 워크는 Java Card 애플리케이션을 개발하고 해당 애플리케이션에 시스템 서비스를 제공하기위한 API (Application Programming Interface) 클래스 세트를 정의합니다. 특정 산업 또는 기업은 서비스를 제공하거나 보안 및 시스템 모델을 개선하기 위해 추가 라이브러리를 제공 할 수 있습니다. Java 카드 응용 프로그램을 애플릿 이라고 합니다. 하나의 카드에 여러 애플릿이있을 수 있습니다. 각 애플릿은 ISO 7816, 파트 5에 정의 된대로 AID (응용 프로그램 식별자)로 고유하게 식별됩니다 .

명심해야 할 중요한 점은 스마트 카드 가 아닌 것입니다 . 그들은 개인용 컴퓨터가 아닙니다. 메모리 리소스와 컴퓨팅 성능이 제한되어 있습니다. 사용자는 Java Card 2.0을 단순한 JDK 버전으로 생각해서는 안됩니다.

자바 카드의 수명

Java 카드 수명은 기본 OS, Java Card VM, API 클래스 라이브러리 및 선택적으로 애플릿이 ROM에 레코딩 될 때 시작됩니다. 들어오는 명령을 수행하기 위해 칩의 변경 불가능한 메모리에 영구 구성 요소를 쓰는이 프로세스를 마스킹 이라고 합니다.

지갑에 들어가기 전에 Java 카드는 초기화 및 개인화를 거쳐야합니다. 초기화는 일반 데이터를 카드의 비 휘발성 메모리에로드하는 것을 말합니다. 이 데이터는 많은 수의 카드에서 동일하며 개인에 한정되지 않습니다. 예를 들어 발급자 또는 제조업체 이름이 있습니다.

다음 단계 인 개인화는 개인에게 카드를 할당하는 것입니다. 물리적 개인화 또는 전자적 개인화를 통해 발생할 수 있습니다. 물리적 개인화는 카드의 플라스틱 표면에 이름과 카드 번호를 엠보싱하거나 레이저로 새기는 것을 의미합니다. 전자 개인화는 개인 키, 이름 및 핀 번호와 같은 개인 데이터를 카드의 비 휘발성 메모리에로드하는 것을 말합니다.

초기화 및 개인화는 공급 업체마다 다르며 발급 자마다 다릅니다. 둘 다에서 EEPROM (비 휘발성 메모리의 일종)이 데이터 저장에 자주 사용됩니다.

이 시점에서 Java 카드를 사용할 수 있습니다. Java 카드는 발급자로부터 받거나 소매점에서 구입할 수 있습니다. 소매 업체에서 판매하는 카드는 범용이며이 경우 개인화가 생략되는 경우가 많습니다.

이제 Java 카드를 판독기에 삽입하고 카드에있는 애플릿에 APDU 명령을 보내거나 더 많은 애플릿 또는 데이터를 카드에 다운로드 할 수 있습니다.

Java 카드는 복구 할 수없는 오류로 인해 만료되거나 차단 될 때까지 활성 상태를 유지합니다.

Java Card 가상 머신의 수명

PC 또는 워크 스테이션의 JVM (Java Virtual Machine)과 달리 Java Card 가상 머신은 영원히 실행됩니다.

카드에 저장된 대부분의 정보는 전원이 제거 된 경우, 즉 카드가 리더에서 제거 된 경우에도 보존되어야합니다. Java Card VM은 영구 정보를 보관하기 위해 EEPROM에 개체를 만듭니다. Java Card VM의 실행 수명은 카드의 수명입니다. 전원이 공급되지 않으면 VM은 무한 클록 주기로 실행됩니다.

Java Card 애플릿 및 개체의 수명

애플릿의 수명은 제대로 설치되고 시스템의 레지스트리 테이블에 등록 될 때 시작되고 테이블에서 제거 될 때 끝납니다. 제거 된 애플릿의 공간은 가비지 콜렉션이 카드에 구현되었는지 여부에 따라 재사용 될 수도 있고 재사용되지 않을 수도 있습니다. 카드의 애플릿은 터미널에서 명시 적으로 선택 될 때까지 비활성 단계에 있습니다.

객체는 영구 메모리 (예 : EEPROM)에 생성됩니다. 다른 영구 개체가 참조하지 않으면 손실되거나 가비지 수집 될 수 있습니다. 그러나 EEPROM에 쓰는 것이 RAM보다 천 배 더 느립니다.

일부 개체는 자주 액세스되며 해당 필드의 내용은 영구적 일 필요가 없습니다. Java 카드는 RAM에서 일시적 (임시) 개체를 지원합니다 . 객체가 일시적으로 선언되면 해당 내용을 영구 메모리로 다시 이동할 수 없습니다.

Java Card 2.0 언어 하위 집합

물론 Java Card 프로그램은 Java로 작성됩니다. 공통 Java 컴파일러를 사용하여 컴파일됩니다. 제한된 메모리 리소스와 컴퓨팅 성능으로 인해 Java 언어 사양에 정의 된 모든 언어 기능이 Java 카드에서 지원되는 것은 아닙니다. 특히 Java 카드는 다음을 지원하지 않습니다.

  • 동적 클래스 로딩

  • 보안 관리자

  • 스레드 및 동기화

  • 개체 복제

  • 마무리

  • 대형 기본 데이터 유형 (float, double, long 및 char)

이러한 기능을 지원하는 키워드도 언어에서 생략 된 것은 놀라운 일이 아닙니다. VM 구현자는 메모리가 더 많은 고급 스마트 카드에서 작업하는 경우 발급 후 애플릿에 대해 32 비트 정수 유형 또는 기본 메서드를 지원하도록 결정할 수 있습니다. 발급 후 애플릿은 카드가 카드 소지자에게 발급 된 후 Java 카드에 설치되는 애플릿입니다.

자바 카드 2.0 프레임 워크

스마트 카드는 20 년 동안 시장에 출시되었으며 대부분은 일반적으로 ISO 7816 파트 1-7 및 / 또는 EMV와 호환됩니다. 이미 ISO 7816을 살펴 보았습니다. EMV 란 무엇입니까? Europay, MasterCard 및 Visa에서 정의한 EMV 표준은 금융 산업의 특정 요구를 충족하기위한 추가 독점 기능이있는 ISO 7816 표준 시리즈를 기반으로합니다. Java Card Framework는 스마트 카드 시스템 및 응용 프로그램을 쉽게 지원하도록 설계되었습니다. 스마트 카드 인프라의 세부 사항을 숨기고 Java 카드 응용 프로그램 개발자에게 비교적 쉽고 간단한 프로그래밍 인터페이스를 제공합니다.

Java Card 프레임 워크에는 4 개의 패키지가 포함되어 있습니다.

패키지 이름 기술
javacard.framework 이것은 카드의 핵심 패키지입니다. 이 같은 클래스 정의 기본 건물 자바 카드 프로그램에 대한 블록이다, , 같은 APDU 처리 및 객체의 공유와 같은 자바 카드 프로그램에 런타임 및 시스템 서비스를 제공,
javacardx.framework 이 패키지는 ISO 7816-4 호환 파일 시스템을위한 객체 지향 디자인을 제공합니다. ISO7816에 지정된대로 기본 파일 (EF), 전용 파일 (DF) 및 파일 지향 APDU를 지원합니다.
javacardx.crypto 및 javacardx.cryptoEnc 이 두 패키지는 스마트 카드에 필요한 암호화 기능을 지원합니다.

Java 이름 지정 규칙을 준수하는 Java Cardx 패키지는 Java Card 프레임 워크에 대한 확장입니다. 카드에서 지원할 필요는 없습니다.

자바 카드 보안

Java 애플릿에는 Java 보안 제한이 적용되지만 Java 카드 시스템의 보안 모델은 여러면에서 표준 Java와 다릅니다.

Security Manager 클래스는 Java 카드에서 지원되지 않습니다. 언어 보안 정책은 가상 머신에 의해 구현됩니다.

Java 애플릿은 데이터를 저장하고 조작하는 객체를 만듭니다. 객체는 객체를 생성하는 애플릿이 소유합니다. 애플릿은 객체에 대한 참조를 가질 수 있지만 객체를 소유하거나 객체가 명시 적으로 공유되지 않는 한 객체의 메서드를 호출 할 수 없습니다. 애플릿은 특정 애플릿 또는 모든 애플릿과 개체를 공유 할 수 있습니다.

애플릿은 Java 카드 내에서 독립적 인 엔티티입니다. 선택, 실행 및 기능은 동일한 카드에있는 다른 애플릿의 영향을받지 않습니다.

Java 카드 내에서 사물이 함께 작동하는 방식

Java Card 내에서 JCRE (Java Card Runtime Environment)는 Java Card 가상 머신 및 Java Card Framework의 클래스를 나타냅니다. Java 카드 내의 각 애플릿은 JCRE에서 할당 한 고유 AID와 연결됩니다.

애플릿이 카드의 영구 메모리에 올바르게로드되고 카드의 Java Card Framework 및 기타 라이브러리와 연결되면 JCRE는 애플릿 설치 프로세스의 마지막 단계로 애플릿의 설치 방법을 호출합니다. 공용 정적 메서드 install는 애플릿의 인스턴스를 만들고 JCRE에 등록하려면 애플릿 클래스에 의해 구현되어야합니다. 메모리가 제한되어 있기 때문에이 시점에서 애플릿이 수명 동안 필요한 개체를 만들고 초기화하는 것이 좋은 프로그래밍 관행입니다.