我正在努力学习智能卡编程的基础知识,我想在卡片中增加对PKCS#11的支持。供应商不提供任何PKCS#11模块,所以我想使用OpenSC (卡不与OpenSC兼容)。
据我所知,情况应该是:
我需要知道是否足以实现一个小程序,它能够识别和处理ISO-7816指定的所有命令。
特别是,我不知道整个OpenSC实现是否只依赖于ISO-7816指定的命令,或者它是否也使用特定的命令( OpenSC与所有智能卡不兼容这一事实使我认为它使用了专有命令)。
发布于 2019-08-18 17:34:20
事实上,OpenSC与所有智能卡并不兼容,这使我认为它使用了专有命令。
不,不完全是,正好相反。ISO 7816-4列出了许多基于文件或记录的智能卡命令.几乎没有任何卡片能完全实现所有用ISO 7816-4编写的命令.此外,即使它们这样做了,标准中也有许多空白,例如没有清楚地描述错误条件,甚至文件系统“根”处的多个选项,专有参数,专有命令,没有明确的安全消息传递等等。
从这个意义上说,这是一个可怕的标准;您应该把它看作是文件系统卡制造商为创建他们都能遵守的东西而做的一个糟糕的尝试。
此外,支持7816-4并不意味着支持任何特定的用例。没有关于你如何获得签名的描述。至少有一个PKCS#15 (现在也反映为一个ISO标准),它指定在哪里可以找到文件和密钥。但是,如果您创建了一个签名,您还必须知道创建了哪种签名,以及应该使用哪个命令来实现。
换句话说,通常像OpenSC这样的“中间件”总是需要做一些事情来支持特定的卡。一个卡不受支持并不意味着OpenSC在任何方面都是“错误的”,它只是意味着对卡的支持--如果它确实是一个文件系统卡或可编程卡--还没有测试/实现。
请注意,PC/SC只是一种在操作系统中处理智能卡的标准化方法(从其起源的Windows OS开始)。这些命令只需遵守ISO 7816-4,但它根本不在乎发送什么样的命令或以什么顺序发送。这里没有任何PC/SC兼容的智能卡,只有兼容的读卡器(或,因为他们不能仅仅阅读智能卡接口设备或IFD的) ISO 7816-4兼容智能卡。
一些硬件令牌也可能是PC/SC兼容的,仅仅是因为它们模仿读取器和芯片的组合,或者因为它们内部是读取器和芯片(更便宜/更慢的)。其他人则在更高的层次上工作,并使用PKCS#11,它直接定义了密码令牌的接口,可以说和客观上比ISO7816-4或-15相结合定义得更好。
发布于 2019-08-09 15:57:05
编写此类实现的最大问题是数据如何和存储在卡上的位置。虽然输入的数据和访问它们的命令在ISO-7816中确实是标准化的,但用于写入的命令却不是标准的。此外,卡在哪些文件类型中允许和它们还经常需要标准ISO命令的专有扩展时差异很大。
OpenSC正在做的是在卡片上创建一个PKCS#15应用程序,用于PKCS#11访问。如果您不能编写该数据,或者数据已经以专有格式显示,那么事情就会变得非常复杂。
https://stackoverflow.com/questions/57426291
复制相似问题