如何开始智能卡编程?我在这里询问他入门所需的所有工具包:书籍、教程、硬件等。
我计划与几个智能卡程序员一起玩,我对这个领域还很陌生。
编辑:我最感兴趣的是能够很好地使用类 Unix 操作系统的程序员。另外,我不确定这是如何工作的......但我想用 C/C++ 对其进行编程
How could one get started with smartcards programming? I am asking here about all the toolkit he needs in order to get started: books, tutorials, hardware etc.
I am planning in playing around with a couple of smartcards programmers and I am pretty new to this field.
Edit: I am mostly interested in programmers that play nice with Unix-like operating systems. Also, I am not sure how this works ... but I would like to program them in C/C++
发布评论
评论(4)
每当我需要访问智能卡以在安全应用程序中使用时,都会通过以下任一方式:
要使用 Microsoft CryptoAPI 访问卡,需要卡特定的加密服务提供商 (CSP)。 CSP 位于 CryptoAPI 层之下。
但是,如果您使用“C/C++”在 Unix/Linux 上进行开发,那么您可能需要查看 来自 RSA 的 PKCS#11 标准。该标准指定了一个名为 Cryptoki(加密令牌接口)的“C”API,它为所有类型的加密设备提供了通用抽象。几乎所有智能卡供应商都为其卡提供了 PKCS#11 库,您可以使用 Cryptoki API 对其进行编程。
如果您想在较低级别访问智能卡/读卡器,可以使用 PC/SC 或 CT-API 等 API。
在 Windows、Linux 和 Mac OS X 上实现的 PC/SC 智能卡访问事实上的标准
CT-API 提供只有非常少的功能;不太适合现代应用程序。
如果您有兴趣编写在智能卡上运行的 Java 小程序,那么您可能需要查看 http://java.sun .com/javacard/
可能用到的资源
OpenSC 是一组智能卡的库和工具。它设计用于与 PKCS#11 支持卡配合使用。 OpenCT 提供读卡器驱动程序以及由卡和读卡器组成的令牌(即 USB 令牌和其他“完整”设备)。
http://www.linuxnet.com/ MUSCLE - 在计算机中使用智能卡的运动Linux环境
PKCS#15 - 加密令牌信息格式标准
智能卡手册
A 关于 PKCS#11 的演示在 2009 年 RSA 会议上给出。
< a href="http://www.bit4id.org/trac/pykcs11" rel="noreferrer">PyKCS11 PKCS#11 的 Python 包装器。这些类型的包装器可以提供比直接在 Cryptoki 级别工作更简单的更高级别接口。
智能卡联盟
Whenever I've needed to access smart cards for use in security applications it has been via either:
To access a card using the Microsoft CryptoAPI a card specific Cryptographic Service Providers (CSP) is needed. The CSP sits under the CryptoAPI layer.
If you are developing on Unix/Linux using 'C/C++', however, then you will probably want to take a look at the PKCS#11 standard from RSA. The standard specifies a 'C' API called Cryptoki (Cryptographic Token Interface) which gives a common abstraction above all types of crypto devices. Nearly all smart card vendors provide a PKCS#11 library for their cards that you can program against using the Cryptoki API.
If you want to access the smart card/reader at a lower level you can use APIs such as PC/SC or CT-API.
PC/SC defacto standard for smart card access implemented on Windows, Linux and Mac OS X
CT-API provides only very minimal functionality; not very suitable for modern apps.
If you are interested in writing Java applets that run on smart cards then you probably want to look http://java.sun.com/javacard/
Resources that may be of use
OpenSC is a set of libraries and tools for smart cards. It is designed to work with PKCS#11 supporting cards. OpenCT provides drivers for card readers, and tokens that are comprised of both a card and a reader (ie. usb tokens, and other ’complete’ devices).
http://www.linuxnet.com/ MUSCLE - The movement for use of smart cards in a linux environment
PKCS#15 - Cryptographic Token Information Format Standard
Smart Card Handbook
A presentation on PKCS#11given at the RSA conf in 2009.
PyKCS11 A Python wrapper around PKCS#11. These type of wrappers can provide a simpler higher level interface than working directly at Cryptoki level.
Smart Card Alliance
在大型厂商(如 IBM)的推动下,Java 开始在智能卡市场占据巨大的主导地位。
在很多国家/地区,人们的口袋里都装着 Java 卡。例如,有超过 1000 万比利时公民(强制持有)国民身份证是运行 BELPIC“小程序”的 Java 卡。
如果我没记错的话,整个巴西医疗保健系统也是基于 Java 卡的。
关于智能卡和 Linux,这里有 Linux 智能卡指南(请注意,指南中到处都是“Java”关键字):
http://www.faqs.org/docs/Linux-HOWTO/Smart-Card-HOWTO.html
然后有一个 .pdf 名为“Exploring 2008 年 6 月的“智能卡”,它着眼于“智能卡”世界的混乱状况,基本上首先解释说“智能卡”与“计算机”一样具有描述性:也就是说,描述性不强; )
Java is beginning to get a huge grip in the SmartCard market, pushed by very big players (like IBM).
There are entire countries where people are carrying a Java Card in their pocket. For example there are more than 10 millions Belgium citizens whose (mandatory-to-have-with-them) national ID card is a Java Card running the BELPIC "applet".
If I'm not mistaken the entire Brazilian health care system is also based on Java Card(s).
Regarding SmartCard and Linux, here's the Linux SmartCard howto (note that that howto is full of the "Java" keyword everywhere):
http://www.faqs.org/docs/Linux-HOWTO/Smart-Card-HOWTO.html
Then there's a .pdf called "Exploring SmartCards" from June 2008 which takes a look at the big mess that the "SmartCard" world is and that basically starts by explaining that "SmartCard" is about as descriptive as saying "computer": that is, not very descriptive ; )
如果你用谷歌搜索,你可以找到智能卡开发套件,其中提供了程序员、一些示例卡和手册,而且价格相当便宜。
它还有助于了解密码学(尤其是公钥密码学),以及将数据打包到非常小的结构中的一些实践。
智能卡的范围从极其愚蠢的(安全的 1kb 内存存储)到相当复杂的(我见过广告上运行精简的 .NET 框架的智能卡)。
最常用的智能卡可能是 Mifare 生产的智能卡,通常用作旅行门票,但也用作会员卡甚至通行证。
If you google about you can find smartcard development kits that offer a programmer, a few sample cards, and manuals, reasonably inexpensively.
It also helps to have an understanding of cryptography (especially public-key crypto), and some practice at packing data into really really tiny structures.
Smartcards range from the incredibly dumb (a secure 1kb memory store) to the fairly sophisticated (I've see ones advertised that run a cut down .NET framework).
Probably the most commonly used smartcards are the units produced by Mifare which are generally made as travel tickets but also used as loyalty cards or even access permits.
现在给出答案已经很晚了,但我想为 @bignum 的答案提供一个补充。
好吧,您可以开始尝试 Java 智能卡开发,我想推荐一本好书,帮助初学者和开发人员了解相关知识。 “智能卡的 Java 卡技术”。
如果您的口袋预算允许,那么您可以购买“移动安全卡"用于利用从上述书中获得的知识来研究和开发智能卡小程序。
您还可以参考或使用智能卡 API 项目SEEK FOR ANDROID托管在 googlecode 上以获得第一手经验。
It is very late to give answer but I would like to give one add-on to the answer of @bignum.
Well, you can start playing around with Java smart card development and I would like to recommed one good book for understanding the know how for beginners and developers. "Java Card Technology for Smart Cards".
If your pocket budget allows then you can buy a "Mobile Security Card" for researching and development of the smartcards applets using the knowledge gained from the book mentioned above.
And you can also refer or use a smart card API project SEEK FOR ANDROID hosted on googlecode for first hand experience.