接触型スマートカードの開発について詳しく知りたいと思っています。
接触型スマートカードを使ってシステムを開発することになりました。
開発言語はJavaです。
カードのアクセス方法や使用するライブラリについてはある程度理解が深まりましたが、カードの内部構造がよく分からないため、開発が進みません。
具体的には、カード固有の識別情報、例えばMifareであればカードUID、FelicaであればIDmのようなカード一枚一枚に振られている固有の番号が接触型カードではどうアクセスしたらいいのか、もしかして存在すらしないのかどうかすら現時点で調べられずにおります。
お分かりの方がいらっしゃったら、是非ともご教示いただければ幸いと存じます。
あなたのいう「スマートカード」というものが、具体的に何を指してるのかがわからないので答えようがないんですが。
「接触型スマートカード」が何のことか分からないのはy_waiwaiさんと同じです。Googleで軽く調べた感じだと固有名詞でははなそうですし、一般呼称としてもあまり使われてないように思います。おそらくはICチップが搭載されているICカード的なものだと思いますが、そもそも仕様が公開されてる、もしくは何らかの条件を満たすことで仕様を提供してもらえるものじゃなければ開発はできないと思います。このサイトで質問するような案件じゃないような気がします。「接触型スマートカード」の提供元・開発元に聞かれるのが一番かと思います。
> 開発言語はJavaです。
> カードのアクセス方法や使用するライブラリについてはある程度理解が深まりましたが、カードの内部構造がよく分からないため、開発が進みません。
理解が深まった、と言うのが
[Java™ Smart Card I/O API] Java Smartcard https://docs.oracle.com/javase/8/docs/jre/api/security/smartcardio/spec/
のことかどうか分かりませんが、端子が露出している接触型のスマートカードの規格、仕様から考えると「ISO/IEC 7816-4」とか「EMV」あたりをヒントに情報を手繰っていくと良いかもしれません。
その他、有用と思えるサイト:
https://kikakurui.com/x6/X6320-4-2017-01.html
https://blog.protocolbench.org/2014/12/java-sample-smart-card/
ただ、会社のサービスやカードの種類に依存するデータフォーマットは、そのサービスの提供元の公式の情報をあたる必要があると思います。非接触型のFeliCa Standardで言えば、例えばSuicaに固有のデータフォーマット、に相当する部分です。
スマートカードに関する情報は20年以上前からあるものの、ハードウェアとの絡みもあるし、特定の業務上の話もあってオープンにされている情報は少ないと思います。扱うには結構難しい部類に入るかもしれませんね。
[一部の誤記等を修正済み]
y_waiwaiさま、
質問が曖昧模糊としていて申し訳ありません。NFCですとMifareとかFelicaとか具体的な名前がついていることが多いのですが、接触型だとなかなかそういうのが無くて難儀しておりました。コメントありがとうございます。
AbeTakashiさま、
確かにおっしゃることごもっとも…なんです。しかしながらカードの提供元は様々で、それこそC国の格安なカードのほうが沢山流通している状況で、途中から参入した私には「どこが『正式な』提供元?」という感じで、なかなかそれができませんでした。確かにteratailさんにはそぐわない内容かもしれませんね。ありがとうございます。
dodox86さま、
大変参考になる情報をありがとうございます。JavaCardの記述はまさに原本ですね。
それと、https://blog.protocolbench.org/2014/12/java-sample-smart-card/ にはサンプルコードが載っているので大変参考になりました。
これらの情報をもとに、再度頑張って調べてみる気力が湧いてきました。
心より感謝申し上げます。
@質問者 Dr-ochanomizuさん
※私宛ではないコメントへのフォローですが、、、
> しかしながらカードの提供元は様々で、それこそC国の格安なカードのほうが沢山流通している状況で、]
プログラミングにあたって、スマートカード(に限りませんが)の仕様を調べる場合、ISOなどの言うなれば万国共通の規格・仕様と、VISAやMASTERなどのクレジットカード、特定のサービスのデータ仕様を分けて考える必要があります。その辺りを区別しないと混乱します。アクセスにあたってはカードリーダーライターと言うハードウェアを介するので、よっぽど特殊なスマートカードでなければ低レベルの通信仕様はベースとなる共通な部分があります。それは、非接触型のスマートカードでも同じです。
>接触型スマートカードを使ってシステムを開発することになりました。
開発することになったということは依頼主がいると思います。
例えば、依頼主が会社Aであり、その会社Aで社員カード(例えばMifare)を利用している。
この社員カードを読めるようにしたいということであるならば、
会社Aに社員カードの書き込み情報などの仕様を提示頂く必要があります。
書き込み情報の部分は、Mifareを利用する会社などが自由に決められる部分になります。
また、セキュリティの観点から、あるアクセス手順を踏まないと
読み取れない領域などもあるため、こちらもその方法を開示頂くことになるため、
機密保持契約なども当然しなくてはならなくなります。
これから情報にアクセスする必要がなく、例えばMifareの共通部分であるIDのみを
利用するシステムを開発するのであるならば、上記のような開示は必要ないかもしれませんが
通常は開示頂くのが普通です。
dodx86さま、
確かに混同というか、混乱しているところではあります。低水準のデータアクセスはおかげさまで出来るようになりましたが、よくNFCのコードサンプルにあるようなMifareのUIDを読み取ったり、FelicaのIDmなどを読み取るような例は接触型カード(あまりにも包括名称過ぎますね、すみません)では見られないので、カードの規格などの情報をご教示いただけて助かった次第です。
kikukikuさま、
依頼主というか、使用しているカードは確かに分かります。そこでいただいた資料もあるのですが、単純にNFCにあるようなカードに付されたIDのようなものがその接触型カードの仕様では読み取れなかった(私の解釈力の問題ですが…)ので、かような間の抜けた質問をしてしまった次第です。申し訳ありません。
皆様、ご指導ありがとうございました。
おかげさまで進めることができそうな足がかりを得ることができ、大変感謝しております。
ベストアンサーはdodox86さまの最初の回答とさせていただきます。
--- 以下、dodox86さまの当該回答 ---
> 開発言語はJavaです。
> カードのアクセス方法や使用するライブラリについてはある程度理解が深まりましたが、カードの内部構造がよく分からないため、開発が進みません。
理解が深まった、と言うのが
[Java™ Smart Card I/O API] Java Smartcard https://docs.oracle.com/javase/8/docs/jre/api/security/smartcardio/spec/
のことかどうか分かりませんが、端子が露出している接触型のスマートカードの規格、仕様から考えると「ISO/IEC 7816-4」とか「EMV」あたりをヒントに情報を手繰っていくと良いかもしれません。
その他、有用と思えるサイト:
https://kikakurui.com/x6/X6320-4-2017-01.html
https://blog.protocolbench.org/2014/12/java-sample-smart-card/
ただ、会社のサービスやカードの種類に依存するデータフォーマットは、そのサービスの提供元の公式の情報をあたる必要があると思います。非接触型のFeliCa Standardで言えば、例えばSuicaに固有のデータフォーマット、に相当する部分です。
スマートカードに関する情報は20年以上前からあるものの、ハードウェアとの絡みもあるし、特定の業務上の話もあってオープンにされている情報は少ないと思います。扱うには結構難しい部類に入るかもしれませんね。
@質問者 Dr-ochanomizuさん
すみません、思いつくままに細切れのコメントだったので、回答未満として投稿しませんでした。
質問を閉じる為にも、他の方のコメントへの回答も含めて現状のまとめをご自身で投稿し、自己解決としてクローズしてもらえればと思います。よろしくお願い致します。
回答1件
あなたの回答
tips
プレビュー