자바 카드

Java Card

Java Card는 Java 기반 애플리케이션(애플릿)을 스마트 카드보다 일반적으로 "Secure Elements"(SE; 보안 요소)라고 불리는 유사한 보안 소형 메모리 풋프린트 장치에서[1] 안전하게 실행할 수 있도록 하는 소프트웨어 기술입니다.현재 Secure Element는 스마트 카드 및 기타 탈착식 암호화 토큰 폼 팩터에 한정되지 않습니다.디바이스 보드에 납땜된 내장 SE 및 범용 칩에 내장된 새로운 보안 설계도 널리 사용되고 있습니다.Java Card는 Java에 의해 도입된 코드 이식성을 유지하면서 이러한 하드웨어 단편화 및 사양에 대처합니다.

Java Card는 임베디드 기기를 대상으로 하는 Java 플랫폼 중 가장 작습니다.Java Card는 사용자에게 장치를 프로그래밍하고 응용 프로그램에 맞게 만들 수 있는 기능을 제공합니다.SIM 카드 및 임베디드 SIM 내 무선 통신, 은행[2] 카드 및 NFC 모바일 결제, 신분증, 의료 카드 및 여권 등 다양한 시장에서 널리 사용된다.게이트웨이와 같은 몇몇 IoT 제품들도 자바 카드 기반 제품을 사용하여 클라우드 서비스와의 통신을 보호하고 있다.

최초의 자바 카드는 슐럼버거 카드 사업부에 의해 1996년에 도입되었으며, 후에 Gemplus와 합병하여 Gemalto를 형성하였다.Java Card 제품은 Sun Microsystems(나중에 Oracle Corporation의 자회사)의 사양을 기반으로 합니다.많은 Java 카드 제품도 카드 상의 애플리케이션(다운로드, 설치, 개인화, 삭제)을 안전하게 관리하기 위해 Global Platform 사양에 의존하고 있습니다.

Java Card 테크놀로지의 주요 설계 목표는 휴대성, 보안 및 하위 [3]호환성입니다.

휴대성

Java Card는 Java 애플릿이 다른 컴퓨터에서 실행되는 것과 마찬가지로 동일한 Java Card 애플릿이 다른 스마트 카드에서 실행될 수 있도록 표준 스마트 카드 컴퓨팅 환경을 정의하는 것을 목표로 합니다.Java와 마찬가지로 이는 가상 머신(Java Card Virtual Machine)과 스마트 카드 간의 차이에서 애플릿을 추상화하는 잘 정의된 런타임 라이브러리를 조합하여 이루어집니다.휴대성은 메모리 크기, 성능 및 런타임 지원 문제(통신 프로토콜 또는 암호화 알고리즘 등)로 인해 계속 완화됩니다.

보안.

자바카드 기술은 원래 스마트카드에 저장된 민감한 정보를 보호하기 위해 개발되었습니다.보안은 이 테크놀로지의 다양한 측면에 의해 결정됩니다.

데이터 캡슐화
데이터는 애플리케이션 내에 저장되며 Java Card 애플리케이션은 기본 운영 체제 및 하드웨어와 분리된 격리된 환경(Java Card VM)에서 실행됩니다.
애플릿 방화벽
다른 Java VM과 달리 Java Card VM은 일반적으로 여러 개의 애플리케이션을 관리하며, 각 애플리케이션은 기밀 데이터를 제어합니다.따라서 다른 애플리케이션은 애플릿 방화벽에 의해 서로 분리되어 하나의 애플릿의 데이터 요소에 대한 접근을 제한하고 체크합니다.
암호화
일반적으로 사용되는 대칭 키 알고리즘(DES, Triple DES, AES 등)과 비대칭 키 알고리즘(RSA )은 물론 서명, 키 생성 및 키 교환 등의 기타 암호화 서비스가 지원됩니다.
애플릿
애플릿은 착신 명령어 요구만 처리하고 데이터 또는 응답 상태 워드를 인터페이스 디바이스에 반송함으로써 응답하는 스테이트 머신입니다.

설계.

언어 수준에서 Java Card는 Java의 정확한 하위 집합입니다. Java Card의 모든 언어 구조는 Java에 존재하며 동일하게 작동합니다.이는 표준 빌드 사이클의 일부로서 Java Card 프로그램은 Java 컴파일러에 의해 Java 클래스 파일로 컴파일되며 클래스 파일은 Java Card 플랫폼 전용 툴에 의해 후처리됩니다.

단, Java Card에서는 많은 자바 언어 기능(특히 char, double, float, long, 한정자, enum, 2차원 이상의 배열, finalization, 객체 클로닝, 스레드)이 지원되지 않습니다.또한 Java의 일부 공통 기능은 실제 스마트 카드(특히 유형)에 의해 런타임에 제공되지 않습니다.intJava 표현의 기본 유형입니다.또한 오브젝트의 가비지 컬렉션입니다).

바이트 코드

Java Card Virtual Machine에서 실행되는 Java Card 바이트 코드는 표준 Java Virtual Machine에서 실행되는 Java 2 바이트 코드의 기능적 서브셋이지만 크기에 맞게 최적화하기 위해 다른 인코딩을 사용합니다.따라서 Java Card 애플릿은 일반적으로 동일한 Java 소스 코드를 컴파일하여 얻은 가상 Java 애플릿보다 적은 바이트 코드를 사용합니다.이를 통해 스마트 카드와 같이 리소스가 제한된 장치에 필요한 메모리를 절약할 수 있습니다.설계상의 트레이드오프로서 일부 Java 언어 기능(상기)과 크기 제한은 지원되지 않습니다.응용 프로그램의 코드를 64KiB 제한 이하의 패키지로 분할하는 등 크기 제한을 극복하기 위한 기술이 있습니다.

라이브러리 및 런타임

표준 Java Card 클래스 라이브러리와 런타임 지원은 Java와 많이 다르며 공통 서브셋은 최소입니다.예를 들어 Java Security Manager 클래스는 Java Card Virtual Machine에 의해 보안 정책이 구현되는 Java Card에서는 지원되지 않습니다.또한 Java Card 클래스 라이브러리를 통해 과도(클래스 멤버가 될 수 있는 비영구 고속 RAM 변수)가 지원됩니다.

특정 기능

Java Card 런타임 및 가상 머신은 Java Card 플랫폼 전용 기능도 지원합니다.

고집
Java Card를 사용하면 오브젝트는 기본적으로 영속 메모리에 저장됩니다(RAM은 스마트카드에서는 매우 드물며 일시적인 오브젝트 또는 보안에 민감한 오브젝트에만 사용됩니다).따라서 런타임 환경과 바이트 코드가 영구 개체를 관리하도록 조정되었습니다.
원자성
스마트카드는 외부전원이 공급되고 영속메모리에 의존하기 때문에 영속적인 업데이트는 원자성이어야 합니다.따라서 개별 바이트 코드 명령 및 API 메서드에 의해 실행되는 개별 쓰기 작업은 원자적으로 보장되며 Java Card Runtime에는 제한된 트랜잭션 메커니즘이 포함되어 있습니다.
애플릿 분리
Java Card 방화벽은 카드에 존재하는 서로 다른 애플릿을 분리하는 메커니즘입니다.또한 애플릿이 개체를 다른 애플릿이 명시적으로 사용할 수 있도록 하는 공유 메커니즘도 포함되어 있습니다.

발전

실용적인 Java Card 프로그램에서 사용되는 코딩 기술은 Java 프로그램에서 사용되는 코딩 기술과 크게 다릅니다.그러나 Java Card는 Java 언어의 정확한 서브셋을 사용하여 학습 곡선을 고속화하고 Java 환경을 사용하여 Java Card 프로그램을 개발 및 디버깅할 수 있습니다(caveat: Java 바이트 코드로 디버깅이 이루어지는 경우에도 클래스 파일이 Java Card 언어의 제한에 맞는지 확인하고 이를 Java Card 바이트 코드로 변환하여 테스트 i).n 실제 Java Card 스마트 카드)를 조기에 실행하여 성능을 파악할 수 있습니다.또, 스마트 카드에 짜넣는 애플리케이션의 Java Card 코드와 스마트 카드를 사용해 호스트에 있는 Java 애플리케이션을 모두 실행 및 디버깅할 수 있습니다.이러한 애플리케이션은, 같은 환경에서 공동으로 동작합니다.

버전

Oracle은 몇 가지 Java Card 플랫폼 사양을 출시했으며 애플리케이션 개발을 위한 SDK 툴을 제공하고 있습니다.보통 스마트 카드 벤더는 Java Card 플랫폼 타깃에 지정된 알고리즘의 서브셋만 구현하고 구현된 사양의 서브셋을 검출하는 유일한 [4]방법은 카드를 테스트하는 것입니다.

  • 버전 3.1 (17.12.2018)[5]
    • 설정 가능한 키쌍 생성 지원 추가, 타원곡선 지원, 새로운 알고리즘 및 운영 지원, 추가 AES 모드 및 중국어 알고리즘 추가.
  • 버전 3.0.5 (03.06.2015)
    • Oracle SDK: Java Card Classic Development Kit 3.0.5u1 (2015년 3월 6일)
    • Diffie-Hellman 모듈식 지수화, Diffie-Hellman 도메인 데이터 보존, 타원곡선 및 DSA 키, RSA-3072, SHA3, 플레인ECDA, AES CMAC, AES CTR 지원 추가.
  • 버전 3.0.4 (06.08.2011)
    • Oracle SDK: Java Card Classic Development Kit 3.0.4 (2011년 6월 11일)
    • DES MAC8 ISO9797 지원 추가.
  • 버전 3.0.1 (2009년 6월 15일)
    • Oracle SDK: Java Card Development Kit 3.0.3 RR (2010년 11월 11일)
    • 모든 시그니처 알고리즘의 SHA-224, SHA-2 지원이 추가되었습니다.
  • 버전 2.2.2 (03.26)
    • Oracle SDK: Java Card Development Kit 2.2.2 (2006년 3월)
    • SHA-256, SHA-384, SHA-512, ISO9796-2, HMAC, Korean SEED MAC NOPAD, Korean SEED NOPAD 지원 추가.
  • 버전 2.2.1 (10.2003)
    • Oracle SDK: Java Card Development Kit 2.2.1 (10.2003)
  • 버전 2.2 (11.22)
    • AES 암호 키 캡슐화, CRC 알고리즘, 타원 곡선 암호 키 캡슐화, ECC를 사용한 Diffie-Hellman 키 교환, 이진 다항식 곡선용 ECC 키 및 가변 키 길이의 소수 정수 곡선, AES, ECC 및 RSA에 대한 지원이 추가되었습니다.
  • 버전 2.1.1(18.05.2000)
    • Oracle SDK: Java Card Development Kit 2.1.2 (2001년 4월 5일)
    • 패딩 없이 RSA 지원이 추가되었습니다.
  • 버전 2.1 (07.06.1999)

자바 카드 3.0

Java Card 사양 버전 3.0(2008년 3월에 발매된 초안)은 Classic Edition과 Connected [6]Edition의 두 가지 에디션으로 구분되어 있습니다.

  • Classic Edition(현재 버전 3.0.5)은 Java Card Platform 버전 2(2006년 3월에 마지막 버전 2.2.2가 출시됨)를 진화한 것으로, 스마트 카드와 같은 리소스가 제한된 장치에서 기존 카드 애플릿을 지원합니다.오래된 애플릿은 일반적으로 새로운 Classic Edition 디바이스와 호환되며, 이러한 새로운 디바이스용 애플릿은 새로운 라이브러리 기능을 참조하지 않는 한 오래된 디바이스와 호환될 수 있습니다.Java Card Classic Edition을 구현하는 스마트 카드는 여러 벤더에 의해 보안 인증을 받았으며 시판되고 있습니다.
  • Connected Edition(2009년 12월에 출시된 버전 3.0.2)은 네트워크 지향 기능을 통해 새로운 가상 머신과 향상된 실행 환경을 제공하는 것을 목표로 합니다.어플리케이션은 APDU 명령에서 요구하는 클래식카드 애플릿으로 개발하거나 HTTP를 사용하여 카드와의 웹 기반 통신 방식(HTML, REST, SOAP...)을 지원하는 서블릿으로 개발할 수 있습니다.런타임은 플로팅 포인트 없이 Java(1.1)6 바이트 코드의 서브셋을 사용합니다.이것은 휘발성 오브젝트(쓰레기 컬렉션), 멀티스레딩, 애플리케이션 간 통신 퍼실리티, 지속성, 트랜잭션, 카드 관리 퍼실리티를 지원합니다.2021년 현재 상용화된 스마트 카드는 거의 채택되지 않았기 때문에 Java Card(본 Wikipedia 페이지 포함)에 대한 언급은 Connected Edition을 암시적으로 제외하는 경우가 많습니다.

자바 카드 3.1

Java Card 3.1은 Java Card Platform Specification and Development Kit의 최신 릴리스(2019년 1월 출시)입니다.

새로운 CAP 파일 형식 및 애플릿 배치 모델

  • 애플릿 기능은 여러 Java 패키지로 분할 가능
  • CAP 파일 크기는 64KB를 초과할 수 있습니다.

새로운 I/O 프레임워크와 신뢰할 수 있는 주변기기

  • ISO 7816에 정의된 스마트 카드 프로토콜 외에도 다양한 물리적 계층 및 애플리케이션 프로토콜이 지원됩니다.
  • 시큐어 엘리먼트 애플리케이션에 의한 디바이스 주변기기에의 논리적인 액세스가 용이하게 됩니다.

핵심 플랫폼 확장 기능

  • 어레이 뷰(어레이 서브셋 표시), CAP 파일에 내장된 정적 리소스 및 API 확장성 향상

보안 서비스

  • 인증서 API, 키 파생 API, 모노톤 카운터 API, 시스템 시간 API

새로운 암호화 확장 기능

  • 설정 가능한 키쌍 생성, Edwards-Curves와 같은 타원 곡선, 추가 AES 모드(CFBXTS), 중국어 알고리즘(SM2 - SM3 - SM4)

「 」를 참조해 주세요.

레퍼런스

  1. ^ Chen, Z. (2000). Java Card Technology for Smart Cards: Architecture and Programmer's Guide. Addison-Wesley Java Series. Addison-Wesley. ISBN 978-0-201-70329-0. Retrieved 9 April 2019.
  2. ^ Oracle Learning Library (2013-01-30), Developing Java Card Applications, archived from the original on 2021-12-13, retrieved 2019-04-18
  3. ^ Ahmed Patel; Kenan Kalajdzic; Laleh Golafshan; Mona Taghavi (2011). "Design and Implementation of a Zero-Knowledge Authentication Framework for Java Card". International Journal of Information Security and Privacy. IGI. 5 (3): 1–18.
  4. ^ "JCAlgTest - database of supported JavaCard algorithms". Retrieved 27 January 2016.
  5. ^ Ponsini, Nicolas. "Unveiling Java Card 3.1: New Cryptographic Extensions". blogs.oracle.com. Retrieved 2019-04-18.
  6. ^ Samoylov, N. (2018). Introduction to Programming: Learn to program in Java with data structures, algorithms, and logic. Packt Publishing. p. 13. ISBN 978-1-78883-416-2. Retrieved 9 April 2019.

외부 링크