开始智能卡编程

21

如何开始智能卡编程?这里我想问问需要哪些工具才能开始编程:书籍、教程、硬件等。

我打算使用几个智能卡编程器进行实验,而我在这个领域很新。

编辑:我主要对兼容类Unix操作系统的编程器有兴趣。此外,虽然我不确定如何运作,但我希望使用C/C++语言进行编程。

4个回答

23

每当我需要访问智能卡以供安全应用时,通常使用以下两种方式之一:

  • Microsoft CryptoAPI
  • 卡片的PKCS#11库。

要使用 Microsoft CryptoAPI 访问智能卡,需要一个特定于卡片的 Cryptographic Service Providers(CSP)。CSP 位于 CryptoAPI 层下方。

然而,如果您正在 Unix/Linux 上使用 'C/C++' 进行开发,那么您可能需要查看 RSA 的 PKCS#11 标准。该标准指定了一个名为 Cryptoki(Cryptographic Token Interface)的 'C' API,它在所有类型的加密设备上提供了公共抽象层。几乎所有智能卡供应商都会为其卡提供一个 PKCS#11 库,您可以使用 Cryptoki API 进行编程。

如果您想在更低的级别上访问智能卡/读卡器,则可以使用诸如 PC/SC 或 CT-API 的 API。

  • PC/SC 是在 Windows、Linux 和 Mac OS X 上实现智能卡访问的事实标准。

  • CT-API 仅提供非常基本的功能,不太适合现代应用程序。

如果您有兴趣编写在智能卡上运行的 Java 小程序,则可能需要查看http://java.sun.com/javacard/

以下资源可能会有所帮助

  • OpenSC 是一组用于智能卡的库和工具。它旨在与支持 PKCS#11 的卡片配合使用。OpenCT 为读卡器和由卡和读卡器(即 USB 记号和其他“完整”设备)组成的记号提供驱动程序。

  • MUSCLE - 智能卡在Linux环境下的使用运动

  • PKCS#15 - 密码令牌信息格式标准

  • 智能卡手册

  • 2009年RSA大会关于PKCS#11的演示文稿

  • PyKCS11 - PKCS#11的Python封装。这些类型的封装可以提供比直接在Cryptoki层工作更简单的高级接口。

  • 智能卡联盟


  • 非常感谢您提供如此详细的答案!只是为了澄清一下,OpenSC并不针对“支持PKCS#11的卡”(PKCS#11是一个软件接口,而不是卡片布局或访问标准等)。 - Martin Paljak
    我们可以友善地放置一些C++ / C代码,而不是大量无休止的读书时间吗? - user285594

    3

    Java在智能卡市场上开始占据重要地位,得到了像IBM这样的大公司的推动。

    有一些国家的人们口袋里都携带着Java卡。例如,比利时有超过1000万名公民必须携带Java卡作为其国民身份证,并运行BELPIC“applet”。

    如果我没记错的话,整个巴西医疗保健系统也是基于Java卡的。

    关于SmartCard和Linux,下面是Linux SmartCard HowTo(请注意,该HowTo中“Java”关键字随处可见):

    http://www.faqs.org/docs/Linux-HOWTO/Smart-Card-HOWTO.html

    此外,2008年6月发布了一份名为“探索智能卡”的pdf文档,介绍了智能卡领域的混乱现状,并从根本上解释了“智能卡”这个词是多么的不够具描述性,就像说“计算机”一样。


    0

    如果你在谷歌上搜索,你可以找到一些智能卡开发套件,这些套件提供程序员、几张样品卡和手册,价格合理。

    了解密码学(特别是公钥加密)以及将数据打包成非常小的结构也会有所帮助。

    智能卡的范围从极其愚蠢的(一个安全的1kb存储器)到相当复杂的(我看到过广告宣传的运行精简版.NET框架的智能卡)。

    可能最常用的智能卡是由Mifare生产的单元,通常作为旅行票使用,但也用作忠诚卡甚至访问许可证。


    5
    如果你已经使用谷歌搜索过了,将实际链接放在这里会很有帮助。 - kizzx2

    0

    回答已经来晚了,但我还是想给 @bignum 的答案补充一个。

    你可以开始尝试 Java 智能卡开发,并且我推荐一本适合初学者和开发者的好书,名称为 "Java Card Technology for Smart Cards".

    如果你的预算允许,那么你可以购买一个 "Mobile Security Card" 用于研究和开发智能卡 applets,应用上述书籍所学知识。

    同时,你也可以参考或使用托管在 Googlecode 上的智能卡 API 项目 SEEK FOR ANDROID 来获得第一手的实践经验。


    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接