2016-07-22 7 views
1

확장 된 길이 APDU를 사용하여 길이 0x2CF0 바이트의 데이터를 카드에 쓸 때 올바르게 작동합니다. 하지만 확장 된 길이를 사용하여 카드에서 같은 양의 데이터를 다시 읽을 수 없습니다.확장 된 길이 APDU를 사용하여 카드에서 큰 데이터를 읽을 수 없습니다.

"sun.security.smartcardio.PCSCException : 알 수없는 오류 0x4d3"오류가 발생합니다.

크기가 비교적 작은 0x1af0 바이트의 데이터를로드하려고하면 확장 길이 apdu를 사용하여 카드에서 성공적으로 쓰고 읽을 수 있습니다.

확장 된 길이의 카드에서 데이터를 읽는 것과 관련하여 제한이 있습니까? 커맨드 체인을 사용하지 않고도 문제를 해결할 수 있습니까?

추신 : 저는 JCOP 2.4.2 R2 카드를 사용합니다.

답변

2

일반적인 스마트 카드는 판독기로 보낼 데이터를 RAM에 저장합니다. (다른 것들 중에서도 이것은 비 휘발성 메모리의 비밀 데이터가 전송되지 않도록하기 쉽습니다). 스마트 카드 칩에는 RAM이 없기 때문에 운좋게도 작은 시도 (6k 이상)가 여전히 작동한다는 것을 느낄 수 있습니다.

불행히도 ATR에서 카드는 확장 된 길이의 APDU를 지원하지만 경계까지는 지원하지 않는다고 나타낼 수 있습니다 (출력이 보안 메시징 처리를받는 경우에도 다를 수 있음).

일반적인 접근법은 어떤 종류의 내부 파티션, 예를 들어, 지. 파일 시스템 기반 파일에서 이라는 이진 파일의 개념이 사용되고 명령에서 시작 오프셋을 지정할 수 있습니다 (this question 참조).

일반적으로 연결이 도움이되지 않습니다. MAC 계산을 위해서는 전체 데이터가 필요하기 때문에 아키텍처는 일반적으로 다른 모든 경우에도이를 적용합니다.

+1

최신 ISO 7816은 특정 AID 등에서조차도 버퍼 크기를 나타낼 수 있어야합니다. 물론 클라이언트/리더 및 스마트 카드 지원이 없어도 별 문제가되지 않을 수 있습니다. –

+0

안녕하세요. Guidot, .apdu.setOutgoing();을 사용하여 카드에서 큰 데이터를 읽을 수 있습니까? apdu.setOutgoingLength(); apdu.sendBytesLong() 명령 조합? 나가는 길이를 0x2CF0으로 설정하고 여러 apdu.sendBytesLong()을 호출 할 수 있습니까 ?? – Narasimha

+0

@Narasimha : 아니요, 카드를 확인하고, 최대 출력 크기로 지원하는 항목을 찾고 시작 오프셋을 각각 늘린 루프를 만들어야합니다. – guidot