Java 卡中的两个 OwnerPIN 对象

Two OwnerPIN object in Java Card

我正在开发一个 Java 卡应用程序,我们的要求是在卡中保留一些静态数据和余额。

为了安全起见,我正在考虑制作 OwnerPIN 的 2 个对象。一个对象用于终端认证(即终端需要发送8字节的数据来认证自己),另一个对象用于用户认证(即用户需要输入4位PIN码来认证自己)

只有两次认证都成功,我们才能读取数据或更新余额。

或者对于如何在卡上实施安全性以避免被盗有任何其他建议吗?

此外,在小程序开发过程中,是否有选择专有 class 和指令字节的指南?

对于用户身份验证,OwnerPIN 无疑是一种不错的方式(当然还有其他选择,但 OwnerPIN 提供了您必须手动实施的安全功能(例如撕裂保护))。

对于终端身份验证,没有什么可以阻止您使用基于 OwnerPIN 实例的方法。但是,根据您的安全要求,您可能希望选择某种形式的相互身份验证而不是简单的 PIN 码。如果终端只是发送一个 PIN 码(特别是如果它以纯文本形式发送),攻击者可以简单地拦截该 PIN 码(在发送到卡时),然后使用发现的 PIN 码来创建他们自己的(恶意)终端。

关于 class 和指令字节(尤其是关于 PIN 码验证等标准操作)我建议您坚持标准。 ISO/IEC 7816-4 为此类标准操作定义了许多指令。