問題タブ [javacard]
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.
javacard - Sim Application Toolkit - 選択時にテキストを表示できない (実際には何も表示されない)
私は Sim Application Toolkit アプレットを開発しようとしています.多くの簡単な例がインターネットで見つかりましたが、成功していません..
問題は; 私のメニュー エントリは STK メニューにありますが、それを選択しても何も起こりません. イベント EVENT_MENU_SELECTION にテキストを表示しようとしています。(実際には、テキストを表示するだけでなく、SMS、USSD、サブアイテムも機能しません..)
- 認証キーを使用していくつかのアプレットを開発およびテストするために、製造元から実際の SIM カードを入手しています。
- Android 2.3 NFC スマートフォンでテストします。
- アプレットを SIM にロードするには、ACR1281U をリーダーとして使用し、Giesecke & Devrient JLoad 2.3.0 をローダーとして使用します。
- Sim Toolkit では、デフォルトでメニュー エントリがあり、正常に動作します。
これが私のサンプルコードです..誰かがアイデアを持っていることを願っています..(アプレットをロードする際の特定のインストールパラメータでしょうか?)
前もってありがとう、クチカ
digital-signature - JavaCard アプレットで HMAC_SHA256 署名を生成する
独自の派生キーS (バイト配列も)を使用して、 inBufferバイト配列に含まれるメッセージに署名しようとしています。javacard (jc) アプレット モジュールの関数の抜粋を以下に示します。jcアプレットの開発にjavacard2.2.2ライブラリを使用しています。プロセスリクエストを送信するためにAndroidアプリケーションを使用しています。「機能がサポートされていません」という意味の戻りコード「6A81 」を受け取りました。さて、サポートされていない HMAC_SHA256 について言及されているか、関数に間違いがあることを理解できなかったため、どのように進めればよいかわかりません。助けてください。
この点で私を助けてください。または、HMAC_SHA256 または HMAC_SHA1 対称暗号を実装するための指針も提供してください。javacardアプレットで。
前もって感謝します。
java - APDU 読み取りファイル Java カード プログラム
netbeansを使ってJavaカードクラシックアプレットを作りました
読み取り操作をプログラムするとき、APDU の最初のバイトが 0x80 であることを確認し、次に0xB0
、バイト 2 と 3 からファイル内で読み取るオフセットを取得し、読み取るバイト数を取得します。バイト4から
デフォルトのものとしてAPDUになる
0x80 0xB0 0x00 0x03 0x60
これは、オフセット番号3から始まる現在のファイルから60バイトを読み取ります
このコマンドを試すと、エラーが返されましInput data length != Lc around line 12
た。
再試行した後、問題が見つかりました
問題は、コンパイラがバイト 4 がデータの長さであると想定しているため、コマンドで 60 バイトを待機することです。
検索すると、バイト4は送信データ長を意味しないことがわかりました。INS=B0
なぜこのようになったのかわかりません。コンパイラをデバッグしようとすると、プロセス関数にも入りませんでした。
私のスクリプトファイルは
読み取り機能は
最初にプログラムを選択してからファイルを選択し、機能しないデータを読み取ろうとする
しかし
、標準でも0x80 0xB0 0x00 0x00 0x02 0x00 0x00
ファイナルは使用されていませんが、オフセット0から2バイトの書き込みを読み取ると0x00 0x00
なぜ私がしなければならないのか私の問題ですが、コマンドのデータは、データの長さが赤である必要がありました
このエラーを修正するにはどうすればよいですか?
converter - Javacard 2.2.1 コンバーターが Windows で動作しない
JC2.2.1 アプレットを開発しています。私は本当に奇妙な問題に直面しています。Win7 と Linux の両方でシステムをセットアップしています。奇妙なことに、Linux で CAP ファイルを変換してアップロードすると、問題なく動作します。ただし、同じクラス ファイルに対して Windows コンバーターを使用すると、認証が成功した後、最初のブロックを読み込むときに GPSHELL が 6985 を報告します。
コマンドのラップされていないバージョンを使用して両方の CAP ファイルのバイトコードを分析すると、わずかな違いがあることに気付きました (以下を参照)。
JC2.2.1 コンバーターが異なるバイトコードを作成するのはなぜですか? 何か案が?私はそのような問題を理解しようとして多くの時間を無駄にしました。
私のWindows OSはWin7 64ビットで、Java 1.6 32ビットと64ビットの両方を実行しています(両方でテストしました)
パッケージ AID: 01 02 03 04 05 06 アプレット AID: 01 02 03 04 05 06 00
異なるバイトを強調表示しました **
First load command (not working) 80E80000EFC48211CF010010DECAFFED01020400010601020304050602001F0010001F000B0028010600120BD30020016D000002D700140002001004010004002804020107A0000000620101020107A0000000620102020107A0000000620201* 05 *0106A0000001510003000B01070102030405060000010600120080030600020404000000BCFFFF00B800BF070BD30005308F00073D181D1E8C00063B7A0640188C00221F10096D0A1167001F418D00231E04191E254141311E04191E25414131191E2510116A11191E25600C116700191E25418D00231060058D00277F00281808900C87001810F2900B870105110080038D00
First load command (working) 80E80000EFC48211CF010010DECAFFED01020400010601020304050602001F0010001F000B0028010600120BD30020016D000002D700140002001004010004002804020107A0000000620101020107A0000000620102020107A0000000620201* 00 *0106A0000001510003000B01070102030405060000010600120080030600020404000000BCFFFF00B800BF070BD30005308F00073D181D1E8C00063B7A0640188C00221F10096D0A1167001F418D00231E04191E254141311E04191E25414131191E2510116A11191E25600C116700191E25418D00231060058D00277F00281808900C87001810F2900B870105110080038D00
smartcard - JavaCard から市民データを読み取る
私たちの政府はスマート国民 ID カード (SNIC) の発行を開始しました
私はスマート カード リーダー ( ACR38-IPC )を持っています
SNIC をリーダーに挿入すると、Windows がそれを検出してドライバーをインストールし、デバイス マネージャーに次のように表示されます: ActivIdentity Mini Driver (Oberthur ID-One Cosmo V7.0 128K)
JavaCard v2.2.2であることがわかりました
C# アプリケーションでリーダーを使用して、SNIC から国民 ID カード番号を読み取りたいと考えています。
インターネットで検索しましたが、適切な答えが見つかりませんでした。アプレットを作成してカードにロードするのではなく、カードに保存されている市民情報を読み取りたいだけです。
私はまた、カードを読み取るために他の国から市民に提供されたソフトウェアをインストールしましたが、それらは私のカードを読み取ることができません。
私の主な問題は、SNIC発行機関がカードについて何も教えてくれないことです(全くばかげています)、彼らは私のPINさえも教えてくれません(それは驚くべきことですか???) (おそらく彼らは一般大衆が開発することを望んでいません)このカードを使用してアプリケーションを作成すると、彼らは自分の人々にこれを実行させ、利益を得ることができます:縁故主義)
私が知っているのはカードの種類だけで、カードから自分の情報を抽出したい (PIN で保護されるべきではなく、PIN を知らなくても読み取れると思います)
始め方教えてください
これは私のカードの ATR 解析です: ATR 解析
signature - javacard で SHA1withECDSA 署名を確認する
BouncyCastle を使用して SHA1withECDSA アルゴリズムで署名された自己署名証明書があります。BC では簡単に確認できますが、JavaCard で実行すると、毎回 false が送信されます (NIST の曲線 secp192r1)。プレーンな証明書保留サイン (非 X9.62 はタグなしの r+s のみを意味します)。
それを検証するための私のコードがあります(値は定数として設定されています-もちろんテスト用です)。
バイト[]証明書データ= {...}
明確な表示のためにバイトの代わりに「...」(192ビットの曲線は大きな混乱を招く可能性があります)。
Pastebin の TAGS 説明付きの証明書:
助けてくれてありがとう
セヴァル
編集: 新しいテスト: すべてのテストは同じデータ (PublicKey、PrivateKey、署名するメッセージ) に基づいています。符号はランダム化されているため、2 つの符号を使用します (signT - ターミナル (BC) によって生成された符号、signC - チップによって生成された符号)
signT は CHIP では検証できませんが、ターミナルでは検証できます。signC は CHIP と端末で検証されます
だから私はAPI間のクロスをチェックしました
BC 向けのクロス リレーションがうまく機能する
CHIP へのクロス リレーションが機能しない
BCによって生成されたPrivateKeyとPublicKeyをCHIPに配置すると、CHIPで生成された署名がCHIPによって検証できるため、キーのペアが適切に生成されます。
- KeyPair が適切に生成されました
今何をチェックすればいいのかわからない。問題は、ECDSA ステップ e = SHA1(Message) で配列を埋めることである可能性があります。ハッシュ後の配列で何が起こるか (ハッシュは曲線よりも短く、カードはコピー前に配列のサイズを宣言する必要があります)
integer - byte または short で int 変数をシミュレートする
int
ご存じのとおり、JavaCard 2.2.x には変数がありません。開発中のアプレットには整数変数が必要です。
および変数int
を使用して変数とその算術をシミュレートする方法を知りたいです。byte
short
intellij-idea - IntelliJ IDEA は、メジャー バージョン 46 のクラス ファイルを生成します。
JavaCard 2.2.1 の開発に IntelliJ IDEA を使用したいと考えています。javacard コンバーターでは、クラス ファイルのメジャー バージョンが 46 である必要があります。
私の質問は、クラス ファイルの互換性を 1.2 に設定するにはどうすればよいですか (これにより、メジャー バージョン 46 のクラス ファイルが生成されます)。
参照用のクラス ファイルのバージョンは次のとおりです。
smartcard - JavaCard:アプレットのインスタンスは、別のインスタンスのコンテキストでメソッドを呼び出すにはどうすればよいですか?
すべてのインスタンスに共通の情報を含む、byte []変数(たとえば、永続的な可変、つまりEEPROM / Flash)で一部のデータを共有する必要がある複数のインスタンスを持つJavaCardClassicアプレットについて考えてみます。
静的byte[]変数は完全に適合しますが、これらは私に課せられた検証ルールによってたまたま禁止されています(インスタンスのインスタンス化を解除すると、インスタンス化で割り当てられたものが解放されることを示すための包括的な方法として) )。
これは、スレーブインスタンスがマスターインスタンスのコンテキストでアプレットのメソッドの1つを呼び出すことができる場合に解決されます(おそらく最初にAIDによって識別されるか、または/および/そして他の方法で)。これはどのように行うことができますか?例はありますか?
更新:この別の質問 のコードは、オブジェクトを共有したいことを実行することの隣にありますが、別のインスタンスのコンテキストでメソッドを呼び出していないようです。
smartcard - JavaCard:CLEAR_ON_DESELECTトランジェントのオーバーレイと制限?
Java Card(Classicから2.1.1までに興味があります)では、アプレットに必要な一時(RAM)は、通常、インストール時にによって割り当てられますmakeTransientByteArray()
。そのメソッドはパラメータCLEAR_ON_RESET
またはを受け入れますCLEAR_ON_DESELECT
。後者には次のような警告が表示されます
CLEAR_ON_DESELECT
一時オブジェクトにアクセスできるのは、オブジェクトを作成したアプレットが現在選択されているアプレットと同じコンテキストにある場合のみです。
CLEAR_ON_DESELECT
現在選択されているアプレットがオブジェクトを作成したアプレットと同じコンテキストにないときに一時オブジェクトにアクセスすると、JavaCardランタイム環境はSecurityExceptionをスローします。
私の読書では、同時に選択されていCLEAR_ON_DESELECT
ないCLEAR_ON_RESET
限り、ランタイムは2つのアプレット間でトランジェント(上記のようにインストール時に割り当てられます)をオーバーレイできるため、m jバイトを割り当てる複数のアプレットは約max(m j )sum( m j )ではなく一時バイト。
更新:少なくとも一部のランタイム環境では、異なるパッケージから割り当てられたトランジェントに対して選択的にオーバーレイが発生するという調子で何かを言われました。しかし、私はそのような規則/メカニズムの参照または正確な説明を見つけることができません。
質問:このオーバーレイメカニズムは、ランタイムに実装されることがありますか?はいの場合、それはいつ発生しますか?そして、それを実装していないランタイムを持つカードはありますか?はいの場合、実験以外の方法で、おそらく宣伝されているJava Cardのバージョンから判断する方法はありますか?
その他の質問:引用された制限で「コンテキスト」は正確に何を意味しますか?特に、一時的なアプレットは、ここCLEAR_ON_DESELECT
に示すメカニズムによって割り当てられたインスタンスと共有して、アプレットの別のインスタンスで使用できますか?注:ランタイムによるオーバーレイの不足の可能性を回避するために、トランジェントのコンテンツを共有することには興味がありません。2つの割り当てを回避することだけに関心があります。
更新:私はここで同じ質問をし、興味深い答えを得ました。