스마트 카드 : 입문서

스마트 카드는 최근 웹, 지난 4 월 JavaOne 컨퍼런스 (기술에 대한 4 개의 세션), 대형 네트워크 뉴스 방송국 및 CNN에서 많은 인기를 얻고 있습니다. 이 기사에서는 실제 스마트 카드 예제를 사용하여 스마트 카드에 생명을 불어 넣을 것입니다. 여기에 제시된 기술을 사용하면 스마트 카드를 사용할 수있는 Java 애플리케이션 빌드를 시작할 수 있습니다.

우리는 두 가지 유형의 스마트 카드에 초점을 맞출 것입니다. 메모리 스마트 카드 는 보안 옵션이있는 아주 작은 이동식 읽기 / 쓰기 디스크로 볼 수 있습니다. 및 프로세서 카드 입출력 포트 소형 시스템으로 볼 수있다. 향후 기사에서는 프로세서 카드에 대해 더 자세히 다룰 것입니다.

이 기사의 핵심으로, 우리는 스마트 카드에 데이터를 읽고 쓰기위한 간단한 프로토 타입을 개발할 것입니다. 모든 처방약 목록을 보관하고 보험, 처방약 계획 및 기타 유용한 정보를 추적 하는 약품 처방 카드에 대해 논의 할 것 입니다. 이후 기사는 처방 카드에 대한 아이디어를 확장 할 것입니다.

이 시리즈 전체에서 스마트 카드로 실행되는 반복되는 테마는 악성 플러그인, ActiveX 구성 요소 등이 개인 및 / 또는 회사 정보 상품에 접근하는 것을 방지하기위한 보안 프레임 워크가 필요하다는 것을 알 수 있습니다. 이를 위해이 기사에 포함 된 스마트 카드에서 데이터를 읽고 쓰는 방법에 대한 데모를 통해 지속적이고 안전한 (휴대용) 저장소를 제공합니다.

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

스마트 카드는 "두뇌"가있는 "신용 카드"로 생각할 수 있습니다. 뇌는 작은 내장형 컴퓨터 칩입니다. 이 카드 컴퓨터는 작업을 수행하고 정보를 저장하도록 프로그래밍 할 수 있지만 두뇌가 거의 없다는 점에 유의하십시오. 즉, 스마트 카드의 성능이 데스크톱 컴퓨터에 훨씬 못 미친다는 것을 의미합니다.

스마트 카드는 현재 전화, 교통, 은행 및 의료 거래에 사용되고 있으며 곧 여러분과 같은 개발자 덕분에 인터넷 애플리케이션에서 사용되는 것을 보게 될 것입니다. 스마트 카드는 이미 일본과 유럽에서 광범위하게 사용되고 있으며 미국에서 인기를 얻고 있습니다. 실제로 최근 미국의 스마트 카드 업계에서 세 가지 중요한 이벤트가 발생했습니다.

PC / SC

마이크로 소프트와 다른 몇몇 회사 들은 개인용 컴퓨터 용 Win32 기반 플랫폼의 스마트 카드와 통신하기위한 스마트 카드 응용 프로그램 인터페이스 인 PC / SC를 소개했습니다 . PC / SC는 현재 비 Win32 기반 시스템을 지원하지 않으며 지원하지 않을 수도 있습니다. 이에 대해서는 나중에 자세히 설명하겠습니다.

OpenCard 프레임 워크

OpenCard는 NC, POS, 데스크톱, 랩톱, 셋톱 등에서 스마트 카드 응용 프로그램의 상호 운용성을 제공하는 개방형 표준입니다. OpenCard는 100 % 순수한 Java 스마트 카드 애플리케이션을 제공 할 것을 약속합니다. 스마트 카드 응용 프로그램은 외부 장치와 통신하거나 클라이언트의 라이브러리를 사용하기 때문에 순수하지 않은 경우가 많습니다. (참고로, 100 % 순수 응용 프로그램은 OpenCard 없이도 존재할 수 있지만, 그렇지 않으면 개발자가 자체 개발 한 스마트 카드 인터페이스를 사용하게 될 것입니다.) OpenCard는 또한 개발자에게 Win32에서 기존 장치를 사용할 수있는 PC / SC 인터페이스를 제공합니다. platfroms.

자바 카드

JavaCard 는 Schlumberger에 의해 도입되었으며 최근 JavaSoft에서 표준으로 제출되었습니다. Schlumberger는 현재 시장에서 유일한 Java 카드를 보유하고 있으며이 회사는 최초의 JavaCard 라이센스를 보유하고 있습니다. 전체 스마트 카드 표준을 설정할 가능성이있는 스마트 카드 인 JavaCard는 표준 클래스와 API로 구성되어 Java 애플릿을 표준 ISO 7816 호환 카드에서 직접 실행할 수 있습니다. JavaCard를 사용하면 다양한 애플리케이션을 안전하고 칩 독립적으로 실행할 수 있습니다.

노트 :

이 문서는 스마트 카드에 중점을두고 있지만 이러한 종류의 장치에 국한되지 않는다는 점에 유의해야합니다. 개인적으로 저는 Dallas Semiconductor에서 생산하는 "Ibuttons"장치를 선호합니다. 신용 카드처럼 작고 휴대가 가능하지만 훨씬 편리합니다. 왜? 카드를 찾기 위해 지갑을 파낼 필요가 없습니다. Ibuttons는 바로 거기에 있습니다. 네, 반지입니다!

반면 비접촉식 스마트 카드의 버전이 존재 할 (이에 대한 자세한 내용은 아래 참조), I는 iButton을이 장치의 기능 - 보석 유형은 매우 수익성이 될 수 있다고 생각. Ibutton에 대한 자세한 내용은 리소스 섹션을 참조하십시오. 참고로 Java Commerce Team은 지난 8 월 뉴욕에서 열린 Java Internet Business Expo (JIBE)에서 "JavaRing"을 시연했습니다. Fortune 잡지 의 기사에서 이에 대해 읽을 수 있습니다 (다시 리소스 섹션 참조).

스마트 카드를 사용하는 이유는 무엇입니까?

스마트 카드 사용의 장점은 무엇입니까? 음, 스마트 카드 :

  • 마그네틱 스트라이프 카드보다 더 안정적입니다.
  • 현재 마그네틱 스트라이프 카드보다 100 배 더 많은 정보를 저장할 수 있습니다.
  • 매그 스트라이프보다 조작하기가 더 어렵습니다.
  • 일회용 또는 재사용 가능
  • 다양한 산업 분야에서 다양한 기능을 수행 할 수 있습니다.
  • 전화, PDA (Personal Digital Assistant) 및 PC와 같은 휴대용 전자 장치와 호환됩니다.
  • 끊임없이 진화하고 있습니다 (결국 컴퓨터 칩을 통합합니다)

스마트 카드 유형

위에서 언급했듯이이 기사에서는 메모리와 프로세스라는 두 가지 유형의 스마트 카드에 중점을 둡니다. 총 5 가지 유형의 스마트 카드가 있습니다.

  1. 메모리 카드
  2. 프로세서 카드
  3. 전자 지갑 카드
  4. 보안 카드
  5. 자바 카드

스마트 카드는 디스플레이 장치 또는 네트워크에 액세스하기 위해 다른 장치와 통신해야하는 개인 하드웨어입니다. 카드를 리더에 꽂을 수 있으며 일반적으로

카드 터미널

또는 RF 무선 주파수를 사용하여 작동 할 수 있습니다.

스마트 카드는 다음 두 가지 형식 중 하나로 리더 또는 수신기와 통신 할 수 있습니다 (이 두 용어에 대한 자세한 내용은 아래 리더 섹션 참조).

접촉 식 스마트 카드 -판독기가 카드 전면의 작은 금색 칩에 접촉하면 연결됩니다.

비접촉식 스마트 카드 -안테나를 통해 통신 할 수 있으므로 손으로 카드를 삽입하고 제거 할 필요가 없습니다. 비접촉식 카드를 사용하면 수신기에 가까이 다가 가기 만하면 카드와 통신이 시작됩니다. 비접촉식 카드는 카드 삽입 / 제거가 비현실적이거나 속도가 중요한 애플리케이션에서 사용할 수 있습니다.

일부 제조업체는 접촉 모드와 비접촉 모드 모두에서 작동하는 카드를 만들고 있습니다.

스마트 카드 앱 구축을위한 개발 환경 만들기

스마트 카드 애플리케이션을 개발하려면 몇 가지가 필요합니다. 즉, 스마트 카드 리더기; 리더와 통신하는 소프트웨어 및 리더에 꽂혀있는 카드와 통신하는 일부 소프트웨어; 그리고 물론 스마트 카드와 스마트 카드 하드웨어.

스마트 카드 리더

스마트 카드와 통신하거나 스마트 카드를 지원하는 애플리케이션을 개발하려면 리더 가 있어야합니다 . 리더는 응용 프로그램이 카드에서 명령을 보내고받을 수있는 경로를 제공합니다. 시장에는 여러 유형의 리더가 있으며 가장 널리 사용되는 것은 직렬 , PCCard키보드 모델입니다. (키보드 모델이 여기 저기 나타납니다. 1998 년 6 월까지 대형 PC 제조업체에서 직접 사용할 수있을 것으로 예상됩니다.)

이 문서에서는 직렬 판독기를 사용하여 장치를 지원합니다. 직렬 판독기는 컴퓨터의 직렬 포트에 연결됩니다. 제공된 코드는 PCCard 리더도 지원합니다. 대부분의 노트북에는 PCCard 슬롯이 내장되어 있습니다.

각 제조업체는 독자와 대화하기 위해 서로 다른 프로토콜을 제공합니다. 리더와 통신 할 수 있으면 스마트 카드와 통신하기위한 하나의 프로토콜이 있습니다. 스마트 카드와의 통신은 APDU 형식을 기반으로합니다. (APDU 형식은 아래에서 설명합니다.) 독자적인 리더 구입에 대한 정보는 리소스 섹션에서 "Gemplus 스마트 카드 리더기"제목을 참조하십시오.

독자와 통신하기위한 소프트웨어

이 기사에 포함 된 스마트 카드 예제에는 많은 객체 지향 클래스가 필요합니다. 이것들은:

  • 7816 프로토콜과 통신하기위한 ISO 명령 클래스
  • 독자와 소통하기위한 수업
  • 데이터를 제조업체 별 형식으로 변환하기위한 클래스
  • 응용 프로그램이 설계된 목적으로 카드를 테스트하고 사용하기위한 응용 프로그램

스마트 카드 및 스마트 카드 하드웨어

기사의 시작 부분에서 언급했듯이 여기에서 스마트 카드 응용 프로그램을 개발하려면 스마트 카드 하드웨어와 일부 스마트 카드가 필요합니다. Gemplus 및 Schlumberger를 비롯한 여러 회사에서 스마트 카드 개발 키트를 구입할 수 있습니다.

이미 독자가있는 분들은 나중에 논의 할 인터페이스 클래스 구현을 제공하여 독자를 사용할 수 있어야합니다. 위에서 언급했듯이 카드로 통신하려면 먼저 리더와 통신 할 수 있어야합니다. 여러 카드가있는 것처럼 여러 리더가 있습니다.

중요한 스마트 카드 표준

스마트 카드 응용 프로그램 개발 퍼즐의 중요한 부분은 표준 프로토콜입니다. 기본적으로 애플리케이션은 리더와 통신하고, 리더는 표준 프로토콜 (이 경우 ISO (International Standards Organization) 7816 프로토콜)을 사용하여 스마트 카드와 통신합니다.

다른 신기술과 마찬가지로 스마트 카드에 대한 표준이 너무 많아 실망하고 압도 될 수 있습니다. 다음 표준에 대한 기본적인 이해를 얻으면 스마트 카드 사용에 대한 기본적인 사항을 무시하지 않고 자신있게 응용 프로그램을 개발할 수 있습니다. 그러나 일부 시스템의 경우 특수 표준이 적용됩니다. 전체 표준을 "수평"및 "수직"표준으로 세분화했습니다. 수평 표준은 모든 애플리케이션에서 사용할 수있는 반면 수직 표준은 시스템에 고유합니다.

수평 표준

  • ISO 7816- 스마트 카드에 대한 가장 낮은 수준의 인터페이스를 설명합니다. 이 수준에서 카드 리더와 카드간에 데이터 바이트가 전송됩니다.

  • PC / SC -Win3.1 / Win95 / NT 컴퓨터에 연결된 스마트 카드와 통신하기위한 표준입니다.

  • OCF -Java 환경에서 스마트 카드와 통신하기위한 모든 Java 인터페이스입니다. (곧 OCF를 통해 개발자가 OCF에 작성하고 번역을 수행 할 수 있으므로 PC / SC에 쓸 필요가 없습니다.)

  • JavaCard -JavaCard 및 지원 대상에 대해 설명합니다.

수직 표준

  • Mondex- 스마트 카드 만 사용하는 디지털 현금. Mondex 접근 방식은 카드 외부에 현금이 존재하는 것을 허용하지 않습니다.

  • VisaCash- 서버에서 카드를 추적하는 직불 카드.

  • 양성자 -또 다른 형태의 E- 캐시.

  • MPCOS-EMV- 고유 한 유형의 통화 또는 토큰을 구현할 수있는 범용 카드입니다.

저는 이렇게 작은 플라스틱 조각이 너무 많은 문서 읽기를 요구할 수 있고 개발자 측에서 많은 지식을 요구할 수 있다는 사실에 항상 놀랐습니다!

스마트 카드에는 이러한 높은 수준의 전문성이 필요하기 때문에 개발자가 판매하려는 시장의 수평 표준을 사용하여 수직 표준을 구현하는 Beans 지원 제품을 공급할 수있는 시장이 있습니다. 즉, OpenCard와 같은 수평 표준의 다양한 조합을 사용하는 Bean을 개발하여 상거래 또는 기타 응용 프로그램을위한 다른 산업 표준을 사용하여 특정 응용 프로그램을 구현할 수 있습니다.

Java 애플릿 또는 응용 프로그램에서 스마트 카드와 통신

모든 하드웨어를 연결하는 데 필요한 것이 무엇인지 알고 있습니다. 이제 우리는 응용 프로그램에서 리더로 명령을 보낼 수있는 몇 가지 API를 사용하는 방법을 이해해야합니다. (그런 다음 리더는 카드와 통신하여 데이터를 카드로 보내기 전에 중개자 역할을합니다.) 스마트 카드 리더는 금색 접점을 흔들고 데이터를 전송합니다. 카드는 데이터로 무언가를 수행하고 판독기로 반환 한 다음 응용 프로그램에 데이터를 반환합니다. 그렇다면 애플리케이션에서 카드로 이동할 때 이러한 모든 바이트는 어디에 있습니까?

위에서 언급했듯이 애플리케이션은 리더와 통신하며, 리더는 위에서 설명한 표준을 사용하여 스마트 카드와 통신합니다. 기본적으로 스마트 카드 기술이 발전함에 따라 ISO에서 스마트 카드 표준을 제안했습니다. 표준은 카드와 통신하기위한 프로토콜뿐만 아니라 기계적 및 전기적 특성을 정의했습니다. 관련 ISO 문서에 대한 포인터는 리소스 섹션에 나열되어 있습니다. 불행히도 ISO 그룹은 독자와의 의사 소통을위한 표준을 제공 할 수 없었습니다. 따라서 카드에 명령을 보내려면 먼저 카드가 지원하는 명령을 찾고이 명령을 ISO 명령 패킷에 래핑 한 다음 해당 리더에 필요한 래퍼에이 새 명령을 래핑해야합니다. 여기에 제공된 예제 애플리케이션은이 모든 계층화를 수행합니다.

APDU (Application Protocol Data Unit)

스마트 카드와의 기본 교환 단위는 APDU 패킷입니다. 애플리케이션 계층에서 전송 된 명령 메시지와 카드에서 애플리케이션 계층으로 반환되는 응답 메시지를 APDU (Application Protocol Data Unit)라고합니다. 카드 및 리더와의 통신은 APDU를 통해 수행됩니다. APDU는 완전한 명령 또는 카드의 완전한 응답을 포함하는 데이터 패킷으로 간주 될 수 있습니다. 이 기능을 제공하기 위해 APDU에는 7816 사양 제품군에 속하는 여러 ISO 문서에 정의 된 잘 정의 된 구조가 있습니다.

APDU는 다음 필드로 구성됩니다.

명령 APDU 형식

CLA INS P1 P2 LC 데이터

응답 APDU 형식

데이터 SW1 SW2

다음은 APDU 및 클래스 기능을 전송하기 위해 제공되는 일부 클래스입니다.