OpenSC.tokend
开源 OS X 智能卡驱动程序
tokend 使智能卡上的密钥和证书出现在 Keychain Access.app 中,并可被 Safari 或 Chrome 等应用程序使用。OpenSC.tokend 是来自 OpenSC 的 开源 tokend 实现,支持现实世界中各种不同的 PKI 智能卡。
OS X 中 tokend 支持的历史
- 2005 年,随着 OS X 10.4 "Tiger" 的发布,Apple 引入了 tokend 中间件,使第三方智能卡可供其他原生 OS X 应用程序使用 [1]。当时并未公开提供 tokend 的构建说明。
- OS X 10.5 "Leopard" 可被视为一个稳定化版本,其早期版本存在多个错误,使得使用智能卡(包括 tokend)成为一件非常痛苦的事情 [2]。从 10.5.6 开始,Apple 将自研的智能卡读卡器驱动程序替换为由 Ludovic Rousseau 维护的功能更全面、事实标准的开源 CCID 驱动程序 [3],这至少缓解了部分底层错误。
- OS X 10.6 "Snow Leopard" 是最后一个提供构建 tokend 所需源码组件的版本(为方便起见,这些组件已打包到 build 文件夹 中)。
- 在 OS X 10.7 "Lion" 中,Apple 停止随操作系统分发 tokend [3],同时弃用了 CDSA(tokend 所基于的框架)以及 OpenSSL [4](OpenSC 用于软件加密操作)。
- 在 OS X 10.8 "Mountain Lion" 和 OS X 10.9 "Mavericks" 中,Apple 对底层 PC/SC 和 CCID 子系统进行了较小的更改,但已弃用的 tokend 组件仍然可用 [5]、[6]。
- 在 OS X 10.10 "Yosemite" 中,构建 OpenSC.tokend 所需的 tokend 代码库(大部分来自 2005..2008 年!)仍然可以工作,尽管依赖组件已多年未更新,甚至系统 C++ 编译器也已更换。由于底层智能卡基础设施的重写(与将 pcscd 替换为 CryptoTokenKit 守护进程有关),10.10 上的整体体验有些不稳定 [7]。目前没有公开的信息说明如何创建兼容 CryptoTokenKit 的智能卡驱动程序(也许是因为共享代码以及 ApplePay 在 iOS 上长达一年的厂商锁定 [8]?)。
- 在 OS X 10.15 "Catalina" 中,tokend 已被禁用,需要显式启用:
sudo defaults write /Library/Preferences/com.apple.security.smartcard Legacy -bool true
安装
OpenSC.tokend 随 适用于 OS X 的 OpenSC 安装程序 一起分发,不单独提供。
构建
构建 OpenSC.tokend 需要 OpenSC 的源代码。OpenSC 针对 OS X 的构建脚本也会构建 tokend。最低限度的说明可在 构建脚本源代码 中找到。
许可证
来自 OpenSC 的代码采用 LGPL 2.1+ 许可证,来自 Apple 的组件采用 APSL 2.0 许可证。
未来
整个 tokend 系统是过去的遗留物,注定在不久的将来会消亡,但它仍然可以在最新的 OS X 版本上使用,而且尚不清楚 Apple 何时会停止支持。未来很可能需要 CryptoTokenKit 插件之类的新方案,但目前没有公开的细节、路线图或其他文档(希望将来会有所改变)。与此同时,对于开发面向加密的应用程序,PKCS#11 是以标准方式访问智能卡的一个可用(但远非最佳)选择。
此致,
@martinpaljak