2012-06-28 1 views
1

저는 실제로 SD 카드 (자바 카드 테크노를 사용하는 스마트 카드)를 사용하여 일부 기능을 구현하는 프로젝트에서 작업하고 있습니다 : 다른 카드 (클라이언트)와 상호 인증을하는 것. 그래서 일부 자바 카드 애플릿을 작성하지만 지금은 문제가 있습니다 :우리가 SD 카드 (글로벌 플랫폼을 준수하는 스마트 카드)에서 만든 키를 사용하는 방법

카드 사양 또는 글로벌 플랫폼 사양에 대한 참조에서 나는 키를 재사용 할 수있는 방법을 찾지 못했습니다 (키 저장소를 만들지 않음). 오프 카드 쪽에서), 첫째로 나는 api dispo에서 몇 가지 방법을 찾으려고 노력했다. 나는 그것을 발견하지 못했다. 실제로 자바 카드 애플릿에서 prog를 써야만합니다. 그래서 어떻게하면 retries/access/card에서 기존 키셋을 사용할 수 있습니까? 인증에 암호를 사용하려면?

누구든지 도움을받을 수 있습니까?

+0

새로운 사용자에게 이미 설명이없는 2 개의 투표가 완료되었습니다. 글로벌 플랫폼을 아는 사람들에게 (심하게 작성된 경우) 받아 들일 수있는 질문입니다. 의견이 없으면 가까이에서 치지 마십시오. 환영합니다, 리우. –

답변

0

애플릿의 변수에 키를 저장하기 만하면됩니다. 기본적으로 모든 변수는 영구적입니다.

물론 애플릿을 설치 한 후에 기존 키 쌍을 애플릿에 설치할 수있는 가져 오기/내보내기 기능을 구현할 수 있습니다.

업데이트

보안 도메인을 처리하지 마십시오 - 당신이 당신의 애플릿 내에서 키에 액세스 내부에 보관하십시오.

예를 들어 RSA 키를 사용하면 필드별로 필드를 가져올 수 있습니다 (예 : RSA 공개 키의 모듈러스 및 지수). 가져 오기의 경우 모든 것을 byte[] 형식으로 전송해야합니다. 그런 다음 바이트 배열을 하나 이상의 APDU를 사용하여 카드에 전송할 수 있습니다. 바이트 배열이 하나의 APDU의 페이로드 데이터에 비해 너무 길면 여러 APDU가 필요합니다.

지수 또는 모듈러스 데이터가 전송되면 공개 키 인스턴스를 만든 다음 해당 구성 요소를 설정할 수 있습니다. 당신이 당신의 애플릿 클래스의 필드 변수에 생성 된 RSAPublicKey 인스턴스를 저장하면

RSAPublicKey pub = KeyBuilder.buildKey(ALG_RSA, LENGTH_RSA_1024); 
pub.setExponent(...); 
pub.setModulus(...); 

당신은이 영구적으로 저장됩니다 확신 할 수 있습니다.

다른 암호화 알고리즘을위한 개인 키와 키를 만드는 것과 같은 방법입니다.

+0

답장을 보내 주셔서 감사합니다. 그러나 더 명확하게 설명 할 수 있습니까? "가져 오기/내보내기?"우리는 자바 카드 애플릿 코드에서 그것을 실현합니까? 하지만 자바 카드 API에서 어떤 방법을 사용하여? 죄송 합니다만이 도메인에 조금 새로운 것입니다. (실제로 우리는 이제 SD 카드의 보안 도메인에 새 키를 직접 추가 할 수있는 도구/소프트웨어가 있으므로 현재이 키를 직접 사용하고 싶지만 creat은 사용하지 않으려 고합니다. 우리 코드에서 암호화 방법으로) – vivi

+0

업데이트 된 답변보기. – Robert

+0

예, api에서도 보았습니다. 키 조작을 다루는 메소드가 많이 있습니다. 하지만 그것은 소프트웨어의 카드에서 생성 한 핵심 데이터베이스를 나중에 내 코드에서 재사용 할 수 없다는 것을 의미합니까? 그런데 그 소프트웨어의 관심은 무엇입니까? 또한, 예를 들어, 우리는 PUT KEYS/SD 카드에 데이터 저장/애플릿 설치 등의 작업을 수행 할 수있는이 유형의 Java 카드 용 글로벌 플랫폼의 java/C++ 응용 프로그램도 있습니다. 그들이 카드 안에 넣은 것을 나중에 프로그램에서 사용할 수 없다면 그런 노력을하는 것이 이상하지 않습니까? – vivi