카테고리 없음

Java Card 250625

mezzanineX 2025. 6. 25. 12:29

Java Card스마트카드 등의 보안 요소(Security Element)에서 자바(Java) 프로그래밍 언어 기반 애플릿(Applet)을 구동하기 위해 설계된 경량 자바 플랫폼입니다. 카드사에서 발급하는 결제카드(EMV 카드), 교통카드, 신분증 등 다양한 분야에 폭넓게 쓰이고 있으며, 다음과 같은 특징과 구조를 갖습니다.
1. 경량화된 자바 환경
Java Card Virtual Machine (JCVM): 일반 자바 가상머신(JVM)을 더 작고 단순화한 형태로, 스마트카드의 제한된 메모리(수십~수백 KB)와 CPU 성능(수백 MHz 미만)에 맞춰 최적화되어 있습니다.
Java Card API: java.lang․java.io 등 일반 자바의 방대한 패키지 중 카드 환경에 꼭 필요한 클래스만 골라 경량화한 전용 API입니다. 예를 들어, APDU(카드-단말 간 통신 메시지)를 처리하는 javacard.framework.APDU와 암호 연산용 javacard.security.* 패키지가 제공됩니다.
2. 애플릿 생명주기
1. 개발(Development): 개발자는 Java Card SDK를 사용해 .java 파일을 작성한 뒤, 자바 컴파일러로 바이트코드(.class)로 만들고, 이를 리로케이션·압축·검증 과정을 거쳐 CAP(Card Application Package) 파일로 패키징합니다.
2. 설치(Installation): 카드에 들어 있는 카드 운영체제(Card OS) 혹은 GlobalPlatform 인터페이스를 통해 CAP 파일을 카드에 전송하고, 적절한 AID(Application Identifier)를 등록하여 애플릿을 설치합니다.
3. 초기화(Initialization): 설치된 애플릿은 생성자 또는 install 메서드에서 파라미터를 받아 초기 설정(키 등록, 파라미터 설정 등)을 수행합니다.
4. 활성화/비활성화(Select/Deselect): 단말기가 SELECT 명령을 보내면 애플릿이 활성화되어 APDU 처리를 시작하고, DESELECT 시점에 종료됩니다.
5. 제거(Delete): 더 이상 사용하지 않는 애플릿은 CAP 파일을 카드에서 완전히 삭제할 수 있습니다.
3. 메모리 및 트랜잭션 관리
EEPROM(Persistent Memory): 애플릿 코드와 영구 데이터를 저장하며, 플래시 메모리 기반이어서 쓰기 횟수와 속도에 제약이 있습니다.
RAM(Transient Memory): APDU 처리 중 일시적인 데이터를 저장합니다. 동작 속도가 빠르나 전원이 꺼지면 초기화됩니다.
트랜잭션(Transaction): EEPROM을 변경할 때는 트랜잭션을 이용해 중간 상태에서 장애가 발생해도 카드가 손상되지 않도록 원자성을 보장합니다. JCSystem.beginTransaction() 과 commitTransaction() 으로 묶어 사용합니다.
4. 보안 모델
Applet Firewall: 설치된 애플릿 간에 메서드 호출이나 데이터 접근을 엄격히 격리하여, 한 애플릿이 다른 애플릿의 비밀 키나 데이터를 직접 훔치는 것을 방지합니다.
키 저장 및 암호화: 대칭키(AES, 3DES), 비대칭키(RSA), 해시(SHA) 등을 위한 클래스가 제공되며, 키는 카드 내 보안 메모리에 안전하게 저장됩니다.
인증 및 채널 보안: GlobalPlatform의 Secure Channel Protocol(SCP)을 통해 카드와 관리 시스템 간에 메시지 위·변조를 방지하는 보안 채널을 설정합니다.
5. EMV 결제 애플릿
카드사에서 발급하는 EMV 카드에서는 Java Card 기반의 EMV 애플릿이 표준화되어 있습니다. 이 애플릿은 다음 기능을 수행합니다.
1. 카드 인증(IC): 터미널이 보내는 비인증 데이터(INTERNAL AUTHENTICATE)를 처리하고, 카드 고유 키로 생성한 암호문을 돌려보내어 카드를 인증합니다.
2. PIN 관리: 사용자가 입력한 PIN을 카드 내 PIN 파일과 비교하여 일치 여부를 판단하고, 실패 시 카드를 차단할 수 있습니다.
3. 거래 로직: 거래 금액 한도 초과 시 온라인 승인(issuer script) 로직을 수행하거나, 오프라인 승인 결과(ARQC, ARPC)를 처리합니다.
4. 거래 로그 기록: 카드 내 소규모 트랜잭션 로그를 남겨, 단말기 장애나 통신 손실 시 복구에 활용할 수 있습니다.
6. 개발 시 고려사항
메모리 최적화: 각 바이트가 중요하므로, 불필요한 클래스·메서드·변수를 제거하고, 상수 풀(Constant Pool)을 줄이는 작업이 필수입니다.
성능 최적화: APDU 명령 처리 시간은 카드의 사용자 경험에 직결되므로, 복잡한 암호 연산을 최소화하고, 가급적 RAM을 활용하여 연산 속도를 높입니다.
테스트: 실제 카드 리더기와 연동해 여러 시나리오(선불, 후불, 온라인·오프라인)를 검증하고, 카드 발급 단계부터 폐기까지 전체 플로우를 점검해야 합니다.



위와 같이 Java Card 플랫폼은 자바의 편의성과 스마트카드의 보안성을 결합하여, 카드사 결제·인증 기능을 안전하고 유연하게 구현할 수 있도록 돕습니다. Java Card를 활용하면 표준화된 개발 환경에서 다양한 카드 기반 서비스를 통합하여 운용할 수 있습니다.

반응형