ACR38U-CCIDが常に0x6e0x00を返すのはなぜですか?

イリヤ・ソルタノフ

スマートカードとの間でデータの読み取りと書き込みを行うプロジェクトに取り組んでいます。使用しているカードリーダーはACR38U-H1からACSです。彼らのAPDU命令に従って、私はカードにアクセスしていくつかのデータを読み取ることができました。しかし、常にAPDU 0x6e 0x00, 0x00ではなくコマンドへの応答を受け取るため、内部の正確なデータを読み取ることがまだできないのではないかと疑ってい0x90 0x00ます。

私は何が間違っているのですか?
たぶん問題はスマートカードにありますか?

Pythonコード:

#! /usr/bin/env python
from smartcard.scard import *
import smartcard.util


SELECT = [
    #0xA0, 0xA4, 0x00, 0x00, 0x02, 0x3F, 0x00
    0XFF, 0xA4, 0x00, 0x00, 0x01, 0x05
]

COMMAND = [
    0x00, 0xC0, 0x00, 0x00, 0x00, 0x0B
]

try:
    hresult, hcontext = SCardEstablishContext(SCARD_SCOPE_USER)
    if hresult != SCARD_S_SUCCESS:
        raise Exception('Failed to establish context : ' +
            SCardGetErrorMessage(hresult))
    print 'Context established!'

    try:
        hresult, readers = SCardListReaders(hcontext, [])
        if hresult != SCARD_S_SUCCESS:
            raise Exception('Failed to list readers: ' +
                SCardGetErrorMessage(hresult))
        print 'PCSC Readers:', readers

        if len(readers) < 1:
            raise Exception('No smart card readers')

        reader = readers[0]
        print "Using reader:", reader

        try:
            hresult, hcard, dwActiveProtocol = SCardConnect(hcontext, reader,
                SCARD_SHARE_SHARED, SCARD_PROTOCOL_T1 | SCARD_PROTOCOL_T1)
            if hresult != SCARD_S_SUCCESS:
                raise Exception('Unable to connect: ' +
                    SCardGetErrorMessage(hresult))
            print 'Connected with active protocol', dwActiveProtocol

            try:
                hresult, response = SCardTransmit(hcard, dwActiveProtocol,
                    SELECT)
                if hresult != SCARD_S_SUCCESS:
                    raise Exception('Failed to transmit: ' +
                        SCardGetErrorMessage(hresult))
                print 'Select: ' + smartcard.util.toHexString(response,
                    smartcard.util.HEX)
#==========================================================================
                hresult, response = SCardTransmit(hcard, dwActiveProtocol,
                    COMMAND)
                if hresult != SCARD_S_SUCCESS:
                    raise Exception('Failed to transmit: ' +
                        SCardGetErrorMessage(hresult))
                print 'Command: ' + smartcard.util.toHexString(response,
                    smartcard.util.HEX)
# =========================================================================
            finally:
                hresult = SCardDisconnect(hcard, SCARD_UNPOWER_CARD)
                if hresult != SCARD_S_SUCCESS:
                    raise Exception('Failed to disconnect: ' +
                        SCardGetErrorMessage(hresult))
                print 'Disconnected'

        except Exception, message:
            print "Exception:", message

    finally:
        hresult = SCardReleaseContext(hcontext)
        if hresult != SCARD_S_SUCCESS:
            raise Exception('Failed to release context: ' +
                    SCardGetErrorMessage(hresult))
        print 'Released context.'

except Exception, message:
    print "Exception:", message

このコードの結果:

Context established!
PCSC Readers: ['ACS ACR38U-CCID 00 00']
Using reader: ACS ACR38U-CCID 00 00
Connected with active protocol 2
Select: 0x6E 0x00
Command: 0x67 0x00
Disconnected
Released context.

オープンツールの結果:

[17:06:00]:~$ opensc-tool -s ff:a4:00:00:01:05
Using reader with a card: ACS ACR38U-CCID 00 00
Sending: FF A4 00 00 01 05 
Received (SW1=0x6E, SW2=0x00)
vlp

I2Cメモリカード(具体的には最大16キロビット)SELECT_CARD_TYPEで使用することを目的としたAPDUコマンド(0xFF00000101)を使用していますリーダーリファレンスマニュアルのセクション9.3.1.1を参照してください

このSELECT_CARD_TYPEコマンド(にCLA設定されている0xFF)は、カードではなくリーダー(カードがI2Cを使用しないため拒否します)に送信されます。

カードはT = 1プロトコルを話すマイクロプロセッサカードであるため、「通常の」ISO 7816 APDUを使用する必要があります。これは、カードのドキュメントで指定する必要があります。

それでもそこにあるスクリプトのためのスマートカードのシェル3読んで(と制限された方法をエミュレートで)ように見えるツールのFOMカードは、(私は試していません)。

スクリプトソースを考えると、カードは、およびの背後使用される標準のISO7816-4SELECTおよびREAD_BINARYAPDUコマンドをサポートしているようですnew CardFile()CardFile.readBinary()

がんばろう!

免責事項:私はFOMSカードもscsh3ツールも使用していません。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Wasmで `0x83 0x00`が3をu8として整形式にエンコードしているのはなぜですか?

分類Dev

スマートカードリーダーACR38U-CCIDが空白のSLE4442スマートカードを認識しない

分類Dev

string.StartsWith( "\ u2D2D")が常にtrueを返すのはなぜですか?

分類Dev

フェッチAPIは常に{"_U":0、 "_ V":0、 "_ W":null、 "_ X":null}を返します

分類Dev

「0.0u0.0s0:00.00 0.0%0 + 0k 0 + 0io 0pf + 0w」がcshellから画面に表示されるのはなぜですか?

分類Dev

「0.0u0.0s0:00.00 0.0%0 + 0k 0 + 0io 0pf + 0w」がcshの画面に表示されるのはなぜですか

分類Dev

Python:値が常に0を返すのはなぜですか

分類Dev

0x00000026のような数値を38のような数値に変換するにはどうすればよいですか

分類Dev

-1 <x <0の場合、Pythonが操作x ** xに対して複素数を返すのはなぜですか?

分類Dev

RecyclerViewのLinearLayoutManager.findFirstVisibleItemPosition()が常に0を返すのはなぜですか?

分類Dev

Mac OSXのsudo-nが常に0を返すのはなぜですか?

分類Dev

`time.Since(start).Seconds()`が常に0を返すのはなぜですか?

分類Dev

「n&1 == 0」が常にfalseを返すのはなぜですか?

分類Dev

random.uniform(0、float( "inf"))が常にinfを返すのはなぜですか?

分類Dev

document.getElementsByName()。lengthが常に0を返すのはなぜですか?

分類Dev

Facebook PHP SDK getUserが常に0を返すのはなぜですか?Opencart

分類Dev

Perl計算機が常に0を返すのはなぜですか?

分類Dev

LINQクエリが常に0を返すのはなぜですか?

分類Dev

この位置が常に同じX値を返すのはなぜですか?

分類Dev

`grep -L x <<< x`が1を返すのに、` grep -L x <<< x> / dev / null`が0を返すのはなぜですか?

分類Dev

ACR38カードリーダーのインストール方法

分類Dev

なぜx [0]!= x [0] [0]!= x [0] [0] [0]なのですか?

分類Dev

(0> 1 + 0> 9)がFalseを返すのに、((0> 1)+(0> 9))が0を返すのはなぜですか?

分類Dev

Android-現在地アプリが常に0緯度と0経度を返すのはなぜですか?

分類Dev

「\\ u00e2」や「\\ u00ea」などの文字をUnicode文字にデコードするにはどうすればよいですか?

分類Dev

CMD58をSPI経由でクラス10SDに送信すると、0x00ではなく0x01が返されるのはなぜですか?

分類Dev

strtok_sが最初の使用後に0x00000001を返すのはなぜですか?

分類Dev

\ x00がreprによって\ 0に変換されないのはなぜですか

分類Dev

x = 1/0の場合にvarx.isNaNが数値を返さないのはなぜですか?

Related 関連記事

  1. 1

    Wasmで `0x83 0x00`が3をu8として整形式にエンコードしているのはなぜですか?

  2. 2

    スマートカードリーダーACR38U-CCIDが空白のSLE4442スマートカードを認識しない

  3. 3

    string.StartsWith( "\ u2D2D")が常にtrueを返すのはなぜですか?

  4. 4

    フェッチAPIは常に{"_U":0、 "_ V":0、 "_ W":null、 "_ X":null}を返します

  5. 5

    「0.0u0.0s0:00.00 0.0%0 + 0k 0 + 0io 0pf + 0w」がcshellから画面に表示されるのはなぜですか?

  6. 6

    「0.0u0.0s0:00.00 0.0%0 + 0k 0 + 0io 0pf + 0w」がcshの画面に表示されるのはなぜですか

  7. 7

    Python:値が常に0を返すのはなぜですか

  8. 8

    0x00000026のような数値を38のような数値に変換するにはどうすればよいですか

  9. 9

    -1 <x <0の場合、Pythonが操作x ** xに対して複素数を返すのはなぜですか?

  10. 10

    RecyclerViewのLinearLayoutManager.findFirstVisibleItemPosition()が常に0を返すのはなぜですか?

  11. 11

    Mac OSXのsudo-nが常に0を返すのはなぜですか?

  12. 12

    `time.Since(start).Seconds()`が常に0を返すのはなぜですか?

  13. 13

    「n&1 == 0」が常にfalseを返すのはなぜですか?

  14. 14

    random.uniform(0、float( "inf"))が常にinfを返すのはなぜですか?

  15. 15

    document.getElementsByName()。lengthが常に0を返すのはなぜですか?

  16. 16

    Facebook PHP SDK getUserが常に0を返すのはなぜですか?Opencart

  17. 17

    Perl計算機が常に0を返すのはなぜですか?

  18. 18

    LINQクエリが常に0を返すのはなぜですか?

  19. 19

    この位置が常に同じX値を返すのはなぜですか?

  20. 20

    `grep -L x <<< x`が1を返すのに、` grep -L x <<< x> / dev / null`が0を返すのはなぜですか?

  21. 21

    ACR38カードリーダーのインストール方法

  22. 22

    なぜx [0]!= x [0] [0]!= x [0] [0] [0]なのですか?

  23. 23

    (0> 1 + 0> 9)がFalseを返すのに、((0> 1)+(0> 9))が0を返すのはなぜですか?

  24. 24

    Android-現在地アプリが常に0緯度と0経度を返すのはなぜですか?

  25. 25

    「\\ u00e2」や「\\ u00ea」などの文字をUnicode文字にデコードするにはどうすればよいですか?

  26. 26

    CMD58をSPI経由でクラス10SDに送信すると、0x00ではなく0x01が返されるのはなぜですか?

  27. 27

    strtok_sが最初の使用後に0x00000001を返すのはなぜですか?

  28. 28

    \ x00がreprによって\ 0に変換されないのはなぜですか

  29. 29

    x = 1/0の場合にvarx.isNaNが数値を返さないのはなぜですか?

ホットタグ

アーカイブ