2015-05-07 95 views
0

我正在研究一个Java Card应用程序,其中我们的要求是在卡中保留一些静态数据和余额。Java Card中的两个OwnerPIN对象

为了安全起见,我想让OwnerPIN的2个对象。一个目的是用于终端认证(即,终端需要发送8个字节的数据来认证自己),另一个对象是用于用户认证(即用户需要输入4位数的PIN来认证他们自己)

只有在两个认证都是成功的,我们可以读取数据或更新余额。

或者是否有任何其他建议如何实施卡上的安全以避免被盗?

在applet开发过程中,是否还有选择专有类和指令字节的指导原则?

+0

在applet开发过程中选择专有的类和指令字节时是否有任何指导原则 - 我不明白...你能用其他的语言解释吗? – vojta

+0

我的意思是,我可以为类/ INS BYTE选择任何值,如0xa0或0xc0或0x44,等等.... ????? – Arjun

+0

PIN用于基于知识的身份验证。我不会推荐它用于终端认证,因为简单的线路嗅探器可能会造成严重问题。请使用为此目的设计的质询 - 响应测试。 – guidot

回答

3

对于用户认证,OwnerPIN当然是一种好的途径(有可选的课程,但OwnerPIN提供了安全特性(例如撕裂保护),否则您必须手动实施)。

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

关于类和指令字节(特别是关于PIN码验证等标准操作),我建议你坚持标准。 ISO/IEC 7816-4为这些标准操作定义了许多指令。

+0

其实我需要在单独的命令{一个存储PAN命令,存储名称的另一个命令)中存储PAN,NAME等数据。我可以在这里选择0x12,0x14或0x16作为INS吗?为我的目的选择任何INS字节是否有任何问题? – Arjun

+0

对于INS,您可以选择几乎任何您想要的值。但是,正如我上面已经写过的那样,我强烈建议您阅读ISO/IEC 7816-4,以便了解哪些标准格式已经存在。通常不需要重新发明轮子。 –

+4

由于ISO 7816-3中的规范,INS代码6x和9x无效;他们*可能*工作,但绝对不推荐实际部署。 – guidot