2016-09-08 41 views
1

私は最近、スマートカードプログラミングに突入しました。Gemalto Prox-SUリーダーでMIFARE 1kメモリブロックにアクセスするには?

私はGemalto Prox-SUリーダーを使用していて、Ubuntu 16.04マシン上にいくつかの空のMIFARE Classic 1kカードを用意しています。 私はGemalto Prox-SUリーダーをインストールしていて、Ludovic Russeau's pyscardを使用してPythonでスクリプトを使ってカードを検出するリーダーを得ました。

私は、APDUをリーダー/カード接続に送信するスクリプトを作成することができました。私はATRを読むことができ、カードのシリアル番号を読むためにGetDataコマンドを送信し、カードメモリブロックを試して読み出すためにカードに複数のAPDUを送信しようとしていました。しかし、LoadKeyコマンドを除いて、それ以外のものは "0x6982:セキュリティステータスが満たされていません"と返されます。

マニュアルに記載されているように、すべての読み取りと書き込みの前に一般認証コマンドを送信するはずですが、コマンドが「セキュリティ状態が不成立」を返しています。私が読んできたことから、これは本当に簡単なはずです。私は何が欠けていますか?認証が成功し、メモリブロックからデータを読み取れるようにスクリプトを設定するにはどうすればよいですか?

答えて

0

PROX-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 KEYコマンドを使用します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コマンドを使用してブロックを読むことができます:

     
    FF B0 0004 10 
         ^^^^ 
         \-------- Block number (block 4) 
    

あなたはGENERAL AUTHENTICATE時のステータスコード69 82を受信した場合、これが最も可能性が高いあなたは間違ったキーを使用して認証しようとしていることを示しています。

+0

あなたは、カードがデフォルト値( "トランスポートキー")FF FF FF FF FF FFでキーAを使用して読み込み可能な場合、次のLOAD KEYコマンドを使用します。これはうまくいきました。私の元々の質問が隠されている限り、これはmtの問題を解決しました。しかし、それは新しい問題がある場合。カードが単独でkeyAで読めるかどうかはどのように分かりますか?後で設定できるものですか? –

+0

@GugaFigueiredo各セクタには2つのキー(AキーとBキー)があります。各セクタ内のブロックは、キーAまたはキーBのいずれかによって読み取り可能および/または書き込み可能に構成することができる。アクセス条件を構成するキーおよびビットは、各セクタの最後のブロック(「セクタ・トレーラ」)に格納される。セクタートレーラーは他のブロックと同様にアクセスできます(ただし、キーの値は読み取りコマンドで返されるデータからマスクされます)。 –

関連する問題