問題タブ [contactless-smartcard]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
android - Android 4.3 (またはそれ以下) を実行しているデバイスから Android HCE を使用してデバイスにアクセスできますか?
Android HCE を使用して非接触型スマートカードをエミュレートするアプリと、このエミュレートされたカードにアクセス (読み取り) するアプリを開発しました。どちらも Android 4.4 (KitKat) 以降で動作します。
いいえ、Android 4.3 (またはそれ以前) を実行するデバイス用のリーダー側を開発したいと考えています。API レベル 19 未満のデバイスから Android HCE を使用するデバイスにアクセスすることはできますか? Android Beam 機能を使用したくありません。
nfc - EMV カードの読み取り時にカード所有者名が含まれない
非接触型デビット/クレジット カードからカード番号と有効期限を取得することに成功しました。ただし、READ RECORD コマンドの応答でカード所有者名が返されません。何か不足していますか?
mifare - DESFire マネージャの安全なソフトウェアの推奨 ChangeKeySettings、changeKeys、changeFileSetting、FormatPICC?
DESFire コマンド セットには、 DESFire データシートを参照してください。ChangeFileSettings、ChangeKey、ChangeKeySettings、FormatPICC などのコマンドがあります。
設定ソフトウェアで DESFire カードを設定したいのですが、どのソフトウェアも知りません。
security - 特定のプレフィックスを持つカードのみを読み取るように NFC リーダーを制限する
NFC リーダーで読み取れるカードを制限できるかどうか知りたいです。カードに何らかのプレフィックスを付けて、たとえば「カードが 90H で始まらない場合は、すぐに拒否してください」と言うことができます。
明確にするために、リーダー自体が別のコンピューターに接続されていても、自分でエンコードしたカード以外は使用できないようにアクセスを制限したいと考えています。これは、リーダーへの特定の構成を介して行うことができますか? プロジェクトに飛び込む前に、それが可能かどうか知りたいです。
RFID カードで ACR122U USB NFC リーダーを使用しています。私の目標は、それをオンライン アプリケーションで使用して、カードを認証し、特定のサービスへのアクセスを許可することです。
java - DESFire マスター キーの変更中に 0x1E エラー (INTEGRITY_ERROR) が発生しました。
全体の更新 1: 質問をもう一度参照してください。
私は最近カードで作業しています。現在、PICCのデフォルトのマスター キーDESFire
を変更することにしました。
(私はすでにマスターキーですべての 8 バイト 0x00 を正常に認証できました)
1- デフォルトmaster key
は 0 の 8byte
です00 00 00 00 00 00 00 00
。
2-master key
私が選んだ新作は 16byte
です。
それは:
3-古いマスターキーで認証します(まだ変更されておらず、8バイトのゼロです)。乱数は次のとおりです。
ランダム A = 8 バイトの数値
ランダム B = 8 バイトの数値
4 - ランダム A とランダム B を使用して毎回セッション キーを作成します。セッション キー = ランダム A の最初の 4 バイト + ランダム B の最初の 4 バイト
5 - i 次の方法で新しいマスター キーの CRC16 を作成します。結果は次のとおりです: D8 EC (新しい PICC マスター キーは 16 バイトにすることができますか? それとも 8 バイトにする必要がありますか? ちなみに、新しいマスター キーに 16 バイトの値を選択しました)
6 - crc とパディング (解読済み) を使用して新しい PICC キーを作成します
7- crc16 を計算し、それを新しいキーに追加します。
8 - 上記の新しいマスター キーを以下の方法で暗号化し、24 バイトの暗号化を取得しました。
暗号化で使用されるクラス DES は次のとおりです。
9- そして最後に、パラメータ バイト配列を入力し、命令 (c4) と共に送信します。
そして、ここに Utils クラスがあります:
最後のステップ (マスター キーをカードに変更するための apdu の送信) で、例外 0x1E エラーを受け取りました。これは、完全性エラーを意味します:CRC または MAC がデータと一致しません。キーの変更を正しく実行するにはどうすればよいですか? それは私にとって必要です。ありがとう。
ios - iOS の ADPU サービス
Android 用の HostApduService に似た iOS 用の NFC ソリューションを探しています。iOS で APDU コマンドを交換する方法を教えてください。
ありがとうございました。
android - DESFire カードのクレジット値ファイルで 0x9E パラメータ エラーが発生しました
私は今、DESFire カードの値ファイルを扱っています。次のコマンドを使用して、DESFire カードに値ファイルを作成しました。
次に、次のコマンドを使用して file の値をクレジットします。
私の wrapMessage ヘルパー メソッドは次のようになります。
しかし、私は91 9E
エラーを受け取ります。何が問題なのですか?
nfc - 現在選択されているアプレットから別のアプレットに APDU コマンドを渡す方法は?
質問:アプレットのインスタンスが複数あるとします。現在、1 つのアプレット インスタンスが選択されています。選択したアプレットから別のアプレット インスタンスに APDU コマンドを渡すことはできますか? JavaCard API バージョン 3.0.4 では、そのようなメソッドは見つかりませんでした。
詳細:「アプリケーション選択」サービスを実装するためのドキュメント「Expresspay モバイル仕様 v1.2」を調査しているときに、次のセクション 5.3.6 で行き詰まりました。ドキュメントはオープンソースではないため、選択部分を引用します。
「パーシャル AID を使用して非接触インターフェースで Expresspay モバイル アプリケーションが選択された場合、SELECT コマンドと後続のコマンドを、アクティブ化された Expresspay モバイル アプリケーション インスタンス (選択されているアプリケーションである場合とそうでない場合があります) に渡す必要があります。」
現在選択されているアプレットから別のアプレット (アクティブ化されている!) に SELECT コマンドを渡す必要があることを示しています。しかし、あるアプレットから別のアプレットにコマンドを渡す JavaCard API は見つかりませんでした。Oracle Community で検索したところ、返信がありませんでした。
編集:アプレットAの3つのインスタンスA1、A2、A3があるとします。アプレットAには、 flag
「アクティブな」インスタンスのAID、たとえばA2のAIDを含む共有可能なフラグオブジェクトがあります。flag
(事前に初期化されている可能性があると仮定します)。現在、インスタンス A1 が選択されています。ここで、端末はインスタンス A1 に到達する任意の APDU コマンドを送信します。A1 は をチェックし、A2 の AID が含まflag
れていることを確認します。flag
そのため、A1 は APDU コマンドを A2 に渡してさらに処理します。私の質問は、A1 インスタンスが APDU コマンドを A2 インスタンスに送信する方法です。
nfc - シミュレートされたカードから実際の Mifare クラシック カードを検出する
ご存知かもしれませんが、Mifare Classic カードは約 7 年前にハッキングされました。そのため、誰でも Mifare カードをハッキングして認証キーを抽出し、その内容を読み取ることができます。その後、たとえば携帯電話でそのカードをシミュレートし、携帯電話で NFC テクノロジを使用してカードの代わりに携帯電話を使用できます。このシミュレートされたカードを検出する方法があるかどうか知りたいですか? (Any!) たとえば、モバイルとリーダーとカードとリーダーの間の伝送プロトコルの違い。カードとリーダー間の通信では、プロトコルに基づいてコマンドが APDU 形式で転送されることを知っていT = CL
ます。しかし、NFC通信についてはわかりません。
nfc - スマート カード リーダーの奇妙な動作
私はCRT-603-CZ1スマート カード リーダーを持っており、従来の 1k Mifare 非接触型カードのブロック 4 の 16 バイトを読み取りたいと考えています。認証キーはデフォルト値 (つまり0xFFFFFFFFFFFF
) です。したがって、次のように 3 つのコマンドをリーダーに送信する必要があります。
- キー APDU コマンドのロード
- APDU コマンドの認証
- ブロック データの読み取り
(対応する APDU コマンドは、上記のマニュアルに記載されています。 )
上記の APDU コマンドを送信するために、OpenSCToolを使用しました。結果は次のようになります。
上記のように、これらのコマンドを複数回試しました。しかし、私は同じ応答を受け取りませんでした。
- 「カードに接続できませんでした: カードが無効であるか、処理できません」というエラーが表示されることがあります。
- 場合によっては、3 つのコマンドすべてがステータス ワードとして , を
0x9000
返し0x9000
ます。0x9000
- また、APDU の応答ステータス ワードとして
0x9000
、0x6983
とを受け取ることもあります。0x6982
上記のコマンドを繰り返している間、リーダーやカードについて何も変更しないことに注意してください。すべてが修正されました。
どうしたの?
アップデート:
このリーダーには、同じ APDU コマンドに対して正常に機能するツールがあることに注意してください。見て:
ログ セクションの内容は次のとおりです。
ご覧のとおり、さまざまな試行に対するすべての応答は同じです。
そう
- 「リーダーに問題はなく、OpenSCTool に問題がある」と結論付けることができますか?
- この問題を解決するにはどうすればよいですか?
更新 2:
PySCard ライブラリを使用して、上記の 3 つのコマンドを 5 回連続して送信する Python プログラムを作成しました。そして、5 つのシリーズすべてが同じ結果で成功しました (つまり0x9000
、すべての 5*3 =15 コマンドについて)。OpenSCTool.に問題があるようですが、何が問題なのか、なぜこのように応答するのかわかりません。