2016-09-08 17 views
1

나는 최근에 스마트 카드 프로그래밍에 뛰어 들었다.Gemalto Prox-SU 리더로 MIFARE 1k 메모리 블록에 액세스하는 방법은 무엇입니까?

나는 Gemalto Prox-SU 판독기를 사용하고 있으며, 우분투 16.04 기계에서 여러 개의 빈 MIFARE Classic 1k 카드를 사용할 수 있습니다. Gemalto Prox-SU 리더를 설치했고 Ludovic Russeau's pyscard을 사용하여 Python 스크립트를 통해 카드를 감지하는 독자를 확보했습니다.

APDU를 리더/카드 연결로 보내는 스크립트를 작성했습니다. 나는 ATR을 읽을 수 있고, GetData 명령을 보내서 카드의 일련 번호를 읽을 수 있으며, 여러 개의 APDU를 카드에 보내 카드 메모리 블록을 읽으려고 시도했다. 그러나 LoadKey 명령을 제외하고 다른 모든 것은 "0x6982 : 보안 상태가 만족스럽지 않음"을 반환합니다.

설명서에 언급 된대로 일반 인증 명령을 보내기로되어 있지만 일반 인증 명령이 "보안 상태가 만족하지 않음"을 반환하고 있습니다. 내가 읽은 것에서 이것은 정말 간단해야합니다. 내가 뭘 놓치고 있니? 인증이 성공하고 메모리 블록에서 데이터를 읽을 수 있도록 스크립트를 설정하는 방법?

답변

0

프록스 SU-리더 MIFARE 고전 1K 카드를 판독하기위한 전형적인 흐름합니다 (manual 참조) :

  1. 로드 인증 키. (이 첫 번째 키 슬롯에 키 FF FF FF FF FF FF를 저장

     
    FF 82 00 50 06 FFFFFFFFFFFF 
         ^^ ^^ ^^^^^^^^^^^^ 
         | |    \-- Key 
         | | 
         | \------------------ Key slot 80 (0x50) 
         | 
         \--------------------- Key in RAM (0x00) 
    

    : 카드가 기본 값 ("전송 키")와 FF FF FF FF FF FF을 키 A를 사용하여 읽을 수있는 경우 예를 들어, 다음과 같은 LOAD 키 명령을 사용합니다 0x50)을 판독기의 휘발성 메모리 (RAM)에 저장합니다.

  2. GENERAL AUTHENTICATE 명령을 사용하여 섹터를 인증하십시오. 당신이 전체 부문에 대한 인증에 있는데도 당신은 (일반적으로이 분야의 첫 번째 블록) 블록 번호로 분야를 해결해야합니다 마지막으로

     
    FF 86 00 00 05 01 0004 60 50 
            ^^^^ ^^ ^^ 
            | | \-- Key slot 80 (0x50) 
            | | 
            | \----- Key type (0x60 = Key A, 0x61 = Key B) 
            | 
            \-------- Block number (block 4) 
    
  3. , 당신은 READ BINARY 명령을 사용하여 블록을 읽을 수 있습니다

    당신이 일반 AUTHENTICATE 동안 상태 코드 69 82를받은 경우
     
    FF B0 0004 10 
         ^^^^ 
         \-------- Block number (block 4) 
    

이 가장 가능성이 잘못된 키를 사용하여 인증을 시도 할 것을 나타냅니다.

+0

당신은 "A가 기본 값 ("전송 키 ") FF FF FF FF FF FF로 카드를 사용하여 카드를 읽을 수 있다면 다음 LOAD KEY 명령을 사용할 것"이라고 말했습니다. 이것은 효과가 있었고, 나의 원래의 질문이 숨어지면, 이것은 문제를 해결했습니다. 그러나, 새로운 문제가 있다면. 카드에 keyA만으로 읽을 수 있는지 어떻게 알 수 있습니까? 나중에 설정할 수 있습니까? –

+0

@GugaFigueiredo 각 섹터에는 두 개의 키 (키 A와 키 B)가 있습니다. 각 섹터 내의 블록은 키 A 또는 키 B로 읽고 쓸 수 있도록 구성 할 수 있습니다. 액세스 조건을 구성하는 키와 비트는 각 섹터의 마지막 블록 ("섹터 트레일러")에 저장됩니다. 섹터 트레일러는 다른 블록과 마찬가지로 액세스 할 수 있습니다 (단, 키 값은 읽기 명령 중에 반환 된 데이터에서 마스크 처리됩니다). –