質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
NFC

無線通信

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

1回答

360閲覧

スマートカードの情報源

Dr-ochanomizu

総合スコア5

NFC

無線通信

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2024/08/26 12:47

接触型スマートカードの開発について詳しく知りたいと思っています。

接触型スマートカードを使ってシステムを開発することになりました。
開発言語はJavaです。

カードのアクセス方法や使用するライブラリについてはある程度理解が深まりましたが、カードの内部構造がよく分からないため、開発が進みません。
具体的には、カード固有の識別情報、例えばMifareであればカードUID、FelicaであればIDmのようなカード一枚一枚に振られている固有の番号が接触型カードではどうアクセスしたらいいのか、もしかして存在すらしないのかどうかすら現時点で調べられずにおります。

お分かりの方がいらっしゃったら、是非ともご教示いただければ幸いと存じます。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y_waiwai

2024/08/27 13:04

あなたのいう「スマートカード」というものが、具体的に何を指してるのかがわからないので答えようがないんですが。
AbeTakashi

2024/08/27 13:14 編集

「接触型スマートカード」が何のことか分からないのはy_waiwaiさんと同じです。Googleで軽く調べた感じだと固有名詞でははなそうですし、一般呼称としてもあまり使われてないように思います。おそらくはICチップが搭載されているICカード的なものだと思いますが、そもそも仕様が公開されてる、もしくは何らかの条件を満たすことで仕様を提供してもらえるものじゃなければ開発はできないと思います。このサイトで質問するような案件じゃないような気がします。「接触型スマートカード」の提供元・開発元に聞かれるのが一番かと思います。
dodox86

2024/08/28 00:12 編集

> 開発言語は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

2024/08/28 00:16

y_waiwaiさま、 質問が曖昧模糊としていて申し訳ありません。NFCですとMifareとかFelicaとか具体的な名前がついていることが多いのですが、接触型だとなかなかそういうのが無くて難儀しておりました。コメントありがとうございます。 AbeTakashiさま、 確かにおっしゃることごもっとも…なんです。しかしながらカードの提供元は様々で、それこそC国の格安なカードのほうが沢山流通している状況で、途中から参入した私には「どこが『正式な』提供元?」という感じで、なかなかそれができませんでした。確かにteratailさんにはそぐわない内容かもしれませんね。ありがとうございます。 dodox86さま、 大変参考になる情報をありがとうございます。JavaCardの記述はまさに原本ですね。 それと、https://blog.protocolbench.org/2014/12/java-sample-smart-card/ にはサンプルコードが載っているので大変参考になりました。 これらの情報をもとに、再度頑張って調べてみる気力が湧いてきました。 心より感謝申し上げます。
dodox86

2024/08/28 00:34

@質問者 Dr-ochanomizuさん ※私宛ではないコメントへのフォローですが、、、 > しかしながらカードの提供元は様々で、それこそC国の格安なカードのほうが沢山流通している状況で、] プログラミングにあたって、スマートカード(に限りませんが)の仕様を調べる場合、ISOなどの言うなれば万国共通の規格・仕様と、VISAやMASTERなどのクレジットカード、特定のサービスのデータ仕様を分けて考える必要があります。その辺りを区別しないと混乱します。アクセスにあたってはカードリーダーライターと言うハードウェアを介するので、よっぽど特殊なスマートカードでなければ低レベルの通信仕様はベースとなる共通な部分があります。それは、非接触型のスマートカードでも同じです。
kikukiku

2024/08/28 00:36

>接触型スマートカードを使ってシステムを開発することになりました。 開発することになったということは依頼主がいると思います。 例えば、依頼主が会社Aであり、その会社Aで社員カード(例えばMifare)を利用している。 この社員カードを読めるようにしたいということであるならば、 会社Aに社員カードの書き込み情報などの仕様を提示頂く必要があります。 書き込み情報の部分は、Mifareを利用する会社などが自由に決められる部分になります。 また、セキュリティの観点から、あるアクセス手順を踏まないと 読み取れない領域などもあるため、こちらもその方法を開示頂くことになるため、 機密保持契約なども当然しなくてはならなくなります。 これから情報にアクセスする必要がなく、例えばMifareの共通部分であるIDのみを 利用するシステムを開発するのであるならば、上記のような開示は必要ないかもしれませんが 通常は開示頂くのが普通です。
Dr-ochanomizu

2024/08/28 01:51

dodx86さま、 確かに混同というか、混乱しているところではあります。低水準のデータアクセスはおかげさまで出来るようになりましたが、よくNFCのコードサンプルにあるようなMifareのUIDを読み取ったり、FelicaのIDmなどを読み取るような例は接触型カード(あまりにも包括名称過ぎますね、すみません)では見られないので、カードの規格などの情報をご教示いただけて助かった次第です。 kikukikuさま、 依頼主というか、使用しているカードは確かに分かります。そこでいただいた資料もあるのですが、単純にNFCにあるようなカードに付されたIDのようなものがその接触型カードの仕様では読み取れなかった(私の解釈力の問題ですが…)ので、かような間の抜けた質問をしてしまった次第です。申し訳ありません。
Dr-ochanomizu

2024/08/28 01:54

皆様、ご指導ありがとうございました。 おかげさまで進めることができそうな足がかりを得ることができ、大変感謝しております。 ベストアンサーは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年以上前からあるものの、ハードウェアとの絡みもあるし、特定の業務上の話もあってオープンにされている情報は少ないと思います。扱うには結構難しい部類に入るかもしれませんね。
dodox86

2024/08/28 02:29

@質問者 Dr-ochanomizuさん すみません、思いつくままに細切れのコメントだったので、回答未満として投稿しませんでした。 質問を閉じる為にも、他の方のコメントへの回答も含めて現状のまとめをご自身で投稿し、自己解決としてクローズしてもらえればと思います。よろしくお願い致します。
guest

回答1

0

自己解決

解決の方向性を見いだせましたので、ここにご報告いたします。

まずはdodox86さまをはじめ、多くの方々にご教示をいただけたことを感謝申し上げます。

接触型スマートカードは非接触型スマートカードとは異なり、金融やその他業界での独自の仕様などがありオープンにされていない情報も多く、個別に依頼元などに情報を問い合わせるのが一般的です。
しかしながら今回はそのようなかたちの依頼ではなかったのと、開発プラットフォームや環境を最初に皆様に提示しなかったことが混乱の原因であることが判明いたしました。ここに謹んでお詫び申し上げます。

今回の開発の対象となるカードはSun Rayで使用されているスマートカードで、正式にはSchlumberger MicroPayflexのカードだということが分かりました。
このカードについての基本的な情報はISO 7816-1〜4に制定されています。日本ではJIS X 6320として制定されています。また、このタイプのスマートカードにはカード固有のIDが存在するようです。
しかしながら現時点では(まだ規格書を詳細に読めていないので)どこに格納されているのか、どのようにそれを読み出せば良いのかについては未だ解決しておりません(おそらくISO 7816-4とか、JIS X 6320-4, 5、JIS X 6306:1995あたりに書かれているものと現時点では推測しています)。

Java側の対応としては、javax.smartcardioパッケージを使用することによって、カードデータの低水準読み出しは実装できました。このパッケージはJava JDKに標準添付されているものです。
もちろん、実際に動作させるためにはJavaだけではダメで、カードリーダードライバやpcscdもインストールしておく必要があります。また、デバイスにパーミッションを設定するため、udev関連の設定をする必要もあります。このあたりの詳細は割愛させていただきます。

ちなみに上記smartcardioパッケージは、接触型のみならず非接触型カードにも適用可能です。私の開発プラットフォームはLinuxですが、カードリーダーのドライバさえ正常に動けば、ISO 7816に準拠しているカードであれば比較的容易に読み書きできます。実際、私の手元ではACR-1521-NTTComというカードリーダーを使い、FelicaやMifareのカードの読み取り(Mifareは書き込みも含めて)実装ができました。MifareにはカードUID、FelicaにはIDm、PMmなどの固有識別子があることが既に多くのインターネットサイトで紹介されていますが、接触型カードではこれに該当する情報がほぼ皆無でしたのでどうアプローチしたら良いのか、混乱していたというのが正直なところです。
接触型カードにおけるリーダーにはACR-39を使用しました。

技術的な解決方法の提示ではなく方向性の提示にとどまり大変恐縮ではありますが、以上をもって解決とさせていただきたく存じます。
dodox86さまには情報探索の方向性の具体的なご提示やここteratailでの書き方のご教示など、大変ご丁寧にご指導いただきとくに感謝申し上げたく存じます。

ご回答いただきました皆様、本当にありがとうございました。

投稿2024/08/28 03:01

Dr-ochanomizu

総合スコア5

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問