在Android中开发智能卡读卡器

时间:2013-03-26 16:41:19

标签: android usb smartcard apdu

我们开发了一个带微控制器的原型板,它可以与SmartCard通信(它可以读取ATR,发出和读取对APDU命令的响应等)。现在我想将这个硬件与Android手机或平板电脑一起使用。我们的电路板具有USB连接,通过它我们可以通过Android读取和写入MCU。

最终目标是在支持PKCS#11的Android平台上安装一个功能正常的智能卡读卡器,并为SmartCard读卡器的最终用户提供一个库,以便他们可以与他们的卡进行通信。

我已经阅读了几个关于这个主题的讨论,其中一些讨论说我必须构建一个自定义Android才能做到这一点。我不熟悉Android架构,了解为什么当我可以通过USB与外围设备(读卡器)通信时,我必须重新构建Android。在我看来,如果我提供一个实现CCID类接口的库,用户可以通过将我的库集成到他们的目标.apk文件,使用Android USB堆栈与我的阅读器进行通信。

我们不知道上述计划有任何问题吗?我担心我们缺少一些关于Android或智能卡读卡器的基本知识(例如:安全性),这会在我们开始实施上述库时给我们带来问题。

3 个答案:

答案 0 :(得分:1)

我已经为我的自定义平台在定制的Gingerbread发行版中集成了USB外围设备。您自定义Android平台的唯一原因是添加或修改一些可让您访问USB设备的驱动程序。如果您的USB设备已经使用了标准Android设备支持的协议,那就享受您的运气吧!几乎所有的设置。但在庆祝胜利之前,我会在各种设备上尝试。在Android和内核级别,Google提供了一个包含大量驱动程序源代码的非线性分布。由手机/平板电脑制造商决定根据其设备使用的硬件确定哪些低级驱动程序和协议。由于手机/平板电脑的内存容量有限,一般规则是包含所需内容。在PC-Linux体系结构中,您没有问题,因为硬盘空间太大,您可以包含所有存在的驱动程序,并让系统根据它发现的内容选择所需的内容。

希望这个简单的答案会有所帮助。

答案 1 :(得分:0)

我不确定阅读器的CCID实现,但是对于android,有一些C / C ++端口,但不确定它们是否可以工作。在android上,很容易实现CCID协议,请看this。最难的部分是为阅读器制作固件,您需要处理很多小细节。

答案 2 :(得分:0)

在该领域进行了更多研究之后,可以使用几种解决方案:

  1. 进行自定义驱动程序(简单的通信,一些简单的命令即可重置卡并为其供电)。在这种情况下,您只需要实现重置/电源命令和T = 1通讯协议,但是此方法的一大缺点是只能与读卡器一起使用,这是一个很大的限制。
  2. 在控制器上实现CCID接口,并将其包装在APDU命令周围。此方法是可扩展的,只要您遵守规范即可(许多制造商不这样做,这就是pcsc-lite具有支持的阅读器列表的原因)。如果您想卖很多读者,这种方法是最经济的。您可以找到规范here
  3. 将CCID芯片添加到已实现CCID通信的部件中。此类芯片由多家供应商生产,STMelectronics有很多,但是在这种情况下,最终的阅读器价格会更高,并且您将无法完全控制协议。

至于Android方面,seek提供了pcsc-lite驱动程序的端口,没有尝试过,但是从源代码中我可以看出,他们仅修改了原始驱动程序的usb api并使用了一个与C代码进行通信的JNI接口。