基于Java卡的身份认证方法与流程

文档序号:15978786发布日期:2018-11-17 00:04阅读:324来源:国知局

本发明属于java卡身份认证技术领域,具体涉及一种在java卡上实现的身份认证中的密钥存储方法。



背景技术:

当前java卡的使用在生活中越来越多,且在多应用的支持方面比native卡更稳定,部分领域已经有替代native卡的趋势,其中便有身份验证方面的应用;身份验证的功能使得java卡可作为门禁卡使用,在身份验证的applet(java卡中的应用程序)中,根据不同情况,有很多种算法可以被采用,常见的有des算法、3des算法、rsa算法、或者使用mac值的签名验签算法等;若使用des算法,常规步骤为卡上生成随机数并将随机数发至卡外实体,卡与卡外实体均将随机数加密,然后卡将加密后的数据再发至卡外实体进行对比,然后再有后续的验证通过等指令,这就需要卡上和卡外实体中均有相同的密钥才能通过对比这一步骤;同样的密钥放置在卡上和卡外实体中,若一方的数据由于某些原因造成泄露,另一方的安全也无法保证。



技术实现要素:

为了使java卡和卡外实体中数据的安全能得到更好的保障,本发明根据java卡中applet编程的特点,提供一种密钥的存放方法,减少或消除一方的数据泄露对另一方造成的影响。

本发明采用的技术方案是:一种基于java卡的身份认证方法,包括java卡片与卡外实体,分别含有加密数据和密钥,对加密数据和密钥拆进行如下操作步骤:

(1)拆分:分别将加密数据和密钥拆分为多段数据,由于常规生成的加密数据和密钥的字节数均为8的倍数,拆分出的数据的字节位数也应是8或8的倍数,例如32字节的加密数据拆为两个8字节和一个16字节,24字节密钥拆为三个8字节,之后将某一段或两段密钥存放在卡中,剩余密钥存放在卡外实体中,之后由卡外实体中的程序进行混合。

(2)混合:卡外实体中的程序会将拆分并分配过来的密钥和拆分后的加密数据进行混合;若放置两段密钥key1和key2在卡外实体中,则与拆分过后的三段加密数据endata1、endata2、endata3进行混合交叉放置,形成一串新的数据,较为简单仅进行加密数据和密钥间的交叉放置的一种情况为:

endata1-key1-endata2-key2-endata3;

稍加打乱顺序的一种放置的情况为:

endata3-key2-endata1-key1-endata2。

每段数据在混合数据中存放的偏移位和数据的长度是重组数据的关键,在将加密数据和密钥进行重组时会用到。

(3)重组:混合数据发至java卡片后,由java卡片中的程序对该数据进行重组,来重新得到所需数据;利用每段数据的偏移量和数据长度将三段加密数据从混合数据中提取出来并重组,用同样的方法将两段密钥提取出来并和卡中存放的另一部分密钥组合成为完整的密钥,加密数据和密钥均得到之后便可进行加解密的验证。

(4)重复:将使用的多个加密数据和密钥进行以上操作,在某两步操作之间可将发送至发片的指令的一部分的存放位置由卡外实体改至卡中,仅当某一步正确执行才会将该部分指令发至卡外实体,以组成完整的指令。

本发明的有益效果是:本发明将解密验证过程中使用的密钥切分为多段并分别存放在java卡与卡外实体上,减少或消除一方数据泄露对另一方产生影响。

本发明将java卡与卡外实体两个对象在验证过程中使用的密钥分为多个部分,分别存放在两个对象中,仅在满足一定条件的情况下密钥才在一个对象中凑齐并在解密验证中使用,且密钥和验证步骤均可以有多个,在完成一个验证之后下一个验证步骤所需要的数据才会被提供。

附图说明

图1是卡外实体实现所设定的功能框图。

图2是加密数据和部分密钥的混合形式框图。

具体实施方式

实施例1:如图1所示,本实施例包含两个对象,java卡与卡外实体。

卡外实体一般为读卡器等可与java卡片进行通信的设备,发送的指令符合gp规范,为apdu指令。

卡外实体内有预设程序,编程使其具备的功能有:

1.发送所需调用应用的aid。

2.发送调用解密功能的ins1指令data1,数据内容为已加密数据enc1和部分密钥exkey1的混合,密钥参杂在加密数据中,java卡片接收后,然后进行解密和验证。

3.保存有不完整的指令data2,包含混合的加密数据enc2与部分密钥exkey2,但缺少启动下一步验证的ins2指令,需要在前一步验证通过后由java卡片发送来获得,取得之后组成完整的data2指令,发送给java卡片后执行具体的ins2指令,提取加密数据和卡外实体内的密钥,组合成完整密钥,进行解密验证,通过后java卡片会发送相应指令以完成预设的功能。

卡片为常规java卡,卡内有解密所需要的应用和部分密钥,应用由不同ins对应多段程序。

编程使其具备的功能有:

1.接收卡外实体发送的指令,aid正确才能调用卡中的applet应用。

2.接收调用解密功能的ins1指令data1,接收后将指令所含的混合数据进行提取并放置到对应数组中,混合数据由加密数据enc1和一部分密钥exkey1组成,另一部分密钥inkey1即在该程序中,接收data1之后将加密数据enc1提取并单独放置一个数组endata1,提取exkey1并和inkey1合并成完整的密钥key1,即可用密钥key1来对加密数据endata1来进行解密,并验证结果,通过后会向卡外实体发送一条指令,该指令包含有卡外实体中data2所需的ins2数据。

3.接收到完整的data2指令后,卡内后续ins2程序即可被调用,data2中也包含了由加密数据enc2和一部分密钥exkey2组成的混合数据,由程序提取出后生成加密数组endata2,和与inkey2合并成的完整密钥key2,再由key2将endata2进行解密,通过验证后java卡片会发送最终的指令给卡外实体,使得卡外实体可以实现所设定的功能。

加密数据和部分密钥的混合是预设,由于加密算法的特殊性,密钥和加密内容长度都为8的倍数,在实施例中,endata1和endata2都为64字节,key1和key2都为64字节,exkey1和inkey1,exkey2和inkey2都为32字节,data1为endata1与exkey1的混合,即为96字节,同理,data2为96字节endata2与exkey2的混合,与数据开头5字节的ins合并一共为101字节,数据混合形式如图2所示。

如图2中,当卡中程序从收到的指令中提取密钥时,需将数据中的30至37位、54至61位、78至85位和94至101位进行提取(前面有5字节的ins指令),然后与卡内的数据重组即可,按照剩余数据的位数提取出加密数据即可进行解密验证。

实施例2:一种基于java卡的身份认证方法,包括java卡片与卡外实体,分别含有加密数据和密钥,操作步骤如下:

分别将加密数据和密钥拆分为多段数据,由于常规生成的加密数据和密钥的字节数均为8的倍数,拆分出的数据的字节位数也应是8或8的倍数,例如32字节的加密数据拆为两个8字节和一个16字节,24字节密钥拆为三个8字节,之后将某一段或两段密钥存放在卡中,剩余密钥存放在卡外实体中,之后由卡外实体中的程序进行混合。

卡外实体中的程序会将拆分并分配过来的密钥和拆分后的加密数据进行混合;若放置两段密钥key1和key2在卡外实体中,则与拆分过后的三段加密数据endata1、endata2、endata3进行混合交叉放置,形成一串新的数据。

例如:进行加密数据和密钥间的交叉放置的一种情况为:

endata1-key1-endata2-key2-endata3;

稍加打乱顺序的一种放置的情况为:

endata3-key2-endata1-key1-endata2。

每段数据在混合数据中存放的偏移位和数据的长度非常重要,是重组数据的关键,在将加密数据和密钥进行重组时会用到;

混合数据发至java卡片后,由java卡片中的程序对该数据进行重组,来重新得到所需数据;利用每段数据的偏移量和数据长度将三段加密数据从混合数据中提取出来并重组,用同样的方法将两段密钥提取出来并和卡中存放的另一部分密钥组合成为完整的密钥,加密数据和密钥均得到之后便可进行加解密的验证;

将使用的多个加密数据和密钥进行以上操作,在某两步操作之间可将发送至发片的指令的一部分的存放位置由卡外实体改至卡中,仅当某一步正确执行才会将该部分指令发至卡外实体,以组成完整的指令。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1