发明内容
为解决上述现有技术所存在的问题,本发明提出了一种安全读写数据的方法,包括:
控制器将读卡器和智能卡各自的标识符在密钥服务器进行注册;
将经过哈希计算之后的用户口令码提供给智能卡;
控制器生成身份认证的公钥和私钥并分别进行密钥分发;
进行读卡器与智能卡的相互身份认证,并生成通信密钥;
对读卡器与智能卡之间的通信数据进行加密。
优选地,所述将经过哈希计算之后的口令码提供给智能卡,进一步包括:
1)在发卡分配密钥时,读取智能卡上唯一的ID号以及用户的口令码PW,并计算SHA1(PW);
2)用控制器保密的函数DES进行加密计算得到DES(ID,SHA1(PW));
3)把DES(ID,SHA1(PW))作为要分配给智能卡的密钥S=DES(ID,SHA1(PW)),通过对ID号与口令码的单向哈希结合加密存储到智能卡中。
优选地,所述进行读卡器与智能卡的相互身份认证,进一步包括:
1)读卡器读取用户输入的口令码PW和用户智能卡的ID号,并用单向哈希函数SHA1对口令码进行计算得到SHA1(PW);
2)读卡器通过加密函数DES对SHA1(PW)以及ID号进行计算得到DES(ID,SHA1(PW));
3)智能卡产生一个随机数RA,并把此随机数传送到读卡器端;
4)读卡器产生一个随机数RB,使用加密算法DES计算得到DES(RA,RB),并把计算结果传送到智能卡中;
5)智能卡使用密钥DES(ID,SHA1(PW))通过加密算法DES计算得到DES(RA,RB),比较计算得到的RA与自己产生的RA是否一致,如果一致,判断此读卡器用户为合法,并将计算得到的RB传送的读卡器端;如果不一致,判断此读卡器用户为非法,然后终止此次读写;
6)读卡器比较得到的RB与自己产生的RB的一致性,如果两者一致,则判断此智能卡为合法智能卡,继续进行读写;如果两者不一致,则判断此智能卡为非法,从而终止连接。
本发明相比现有技术,具有以下优点:
本发明的方法用较低的资源开销实现了智能卡与读卡器之间的认证和数据传输处理,能够抵抗常见的攻击,具备可扩展性。
具体实施方式
下文与图示本发明原理的附图一起提供对本发明一个或者多个实施例的详细描述。结合这样的实施例描述本发明,但是本发明不限于任何实施例。本发明的范围仅由权利要求书限定,并且本发明涵盖诸多替代、修改和等同物。在下文描述中阐述诸多具体细节以便提供对本发明的透彻理解。出于示例的目的而提供这些细节,并且无这些具体细节中的一些或者所有细节也可以根据权利要求书实现本发明。
本发明的一方面提供了一种安全读写数据的方法。图1是根据本发明实施例的一种安全读写数据的方法流程图。
本发明的一种安全读写数据的方法首先交换密钥,并使用数字签名算法对通信双方身份进行认证,最终通过加密算法使用交换后生成的密钥对读写的数据进行加密,其整个过程由五个阶段构成,即:预处理阶段、密钥分发阶段、身份认证阶段、交换密钥阶段、消息加密及恢复阶段。
1.预处理阶段
该阶段目的是产生ElGamal参数D:
D=(E,p,Gx,Gy)
其中:E为以素数为模的整数域GF(p)上的ElGamal曲线,p为一个预定长度的大素数。根据最小密钥长度要求,p值长度不应小于160位。Gx,Gy为ElGamal曲线E上基础点G的x,y坐标。
ElGamal参数D由单个访问的控制器生成。对于每一个访问区域A(该组包含复数个读卡器Rn,每个读卡器管理包含复数个智能卡的ID集合Gtn,并按照使用需求所归并),有
A={R1,R2,…,Rn,Gt1,Gt2,…,Gtn}
使用同一组参数D,并根据A所属的读卡器和智能卡各自的标识符在密钥服务器进行注册。
2.密钥分发阶段
对于每对在同一访问区域内的读卡器Rn和其下属的ID集合Gtn中的每一个智能卡Tn,控制器需要生成正整数P和用于智能卡ID和阅读器之间身份认证的公、私钥。其中读卡器和智能卡各自的认证私钥dr、dt为各自私有,读卡器的公钥Kr为该读卡器所管理的ID集合中所有智能卡所共有。智能卡的公钥Kt根据智能卡ID TID存于密钥服务器。一个读卡器Rn及其下属ID集合Gtn的密钥具体生成分发步骤如下:
1)控制器选择一个足够长度的随机数dr,同时从密钥服务器中取出目标读卡器Rn所属的访问区域A的ElGamal参数D,在D所描述的曲线ED上计算Kr=ED(dr·G)
2)控制器选择一个正整数Pn作为目标智能卡Tn用于交换密钥的参数,并选择一个足够长度的随机数dt,同时从密钥服务器中取出目标智能卡Tn所属的访问区域A的ElGamal参数D,在D所描述的曲线ED上计算Kt=ED(dt·G)
3)控制器将第1)~2)步生成的dt、Kr、Pn通过可靠信道分发给目标智能卡Tn,并将第1)~2)步生成的Kt、Pn以目标智能卡ID TIDn为查询键值存于密钥服务器。
重复步骤2到3,分别选择Rn下属的ID集合Gtn中不同的目标智能卡Tn进行密钥分发,直到ID集合Gtn中所有智能卡均已处理完毕,再将dr作为读卡器认证私钥通过可靠信道分发给目标读卡器Rn,密钥分发过程结束。
3.身份认证与交换密钥阶段
此阶段完成单对读卡器与智能卡间相互的身份认证工作,并生成该对读卡器Rn与智能卡Tn在本次访问中的通信密钥。
在交换密钥过程中,计算临时密钥TK=x·G
不使用基础点G作为公开初始密钥,而使用各智能卡的参数Pn来代替作为公开初始密钥,并分别存储于智能卡和密钥服务器中。对于每一个智能卡Tn,都有一个特定的Pn作为其公开初始密钥。而真正的密钥则由智能卡和读卡器各自临时生成的在ElGamal参数D所描述的曲线ED上的随机点Xr,Xt来代替。这样在不可靠线路上只有临时密钥TK进行交换,并且也减小了密钥服务器查询时间和存储规模。
该阶段具体认证、交换步骤如下:
1)读卡器向密钥数据库获取该访问区域的曲线参数D。
2)读卡器Rn对目标智能卡Tn发起认证请求,将自身读卡器标识符RID发送给智能卡Tn。
3)Tn生成本次访问智能卡标识随机数RNt和智能卡的初始交换密钥Xt,计算临时密钥TKt=Xt·Pn,使用签名算法通过自身私钥dt和曲线参数D描述的曲线ED计算签名:
Sigt=ED(sigdt(TID‖RID‖TKt‖RNt‖Pn))
其中TID表示智能卡Tn的ID,将Sigt和RNt、TKt发送给读卡器Rn。
4)Rn收到Tn传来的Sigt和RNt、TKt,使用Tn的TID向密钥服务器查询Tn的参数Pn,认证公钥Kt,使用Kt验证签名Sigt。如果验证失败,则拒绝对Tn的响应;如果验证成功,则Rn完成对Tn的身份验证。读卡器Rn生成本次访问读卡器标识随机数RNr和读卡器的初始交换密钥Xr,计算Rn的临时密钥TKr=Xr·Pn并使用签名算法通过自身私钥dr和曲线参数D描述的曲线ED计算签名:
Sigr=ED(sigdr(TID‖RID‖TKr‖RNr‖RNt‖Pn))
将Sigr、RNr、TKr发送给Tn。
使用Tn发来的临时密钥TKt和Xr,通过SHA1函数计算基础密钥BKr:
BKr=SHA1(TKt·Xr)
5)Tn收到Rn发来的Sigr、RNr、TKr。首先使用Rn的公钥Kr对签名Sigr进行验证。如果验证失败,则拒绝对Rn的响应;如果验证成功,则使用TKr和Xt,通过预定的SHA1函数计算基础密钥BKt:
BKt=SHA1(TKr·Xt)
由于ED(TKr·Xt)=ED(Xr·Pn·Xt)=ED(TKt·Xr),故有
SKt=SHA1(ED(TKr·Xt))=SHA1(ED(TKt·Xr))=SKr
因而Tn持有与Rn相同的基础密钥BK,交换密钥完成。
4消息加密及恢复阶段
该阶段对单对读卡器与智能卡间的通信数据使用DES算法进行加密,每一个明文块均先与前一个密文块进行异或操作后再进行加密,因此每个密文块都依赖于之前所有明文块,从而具有更高的安全性。
因此,本发明对通信数据进行加解密操作的具体步骤如下:
1)完成交换密钥的一对读卡器Rn、Tn在首次加密通信开始前先各自初始化一个计数器C,读卡器计数器为Cr,智能卡计数器为Ct,并分别从各自的基础密钥BK中相同偏移位置处取出预定长度(根据具体加密设置可选128位、192位、256位)的访问初始密钥SK0。
2)发送方将待发送的消息mn添加到本次访问设备标识随机数RNx(若发送方为读卡器,则为RNr,若发送方为智能卡,则为RNt,该值在交换密钥过程中生成并相互交换)后,将生成的数据串M按DES块长度(128位)分块,不满128位长度的块使用0填充。将得到的所有块使用预定的初始向量和访问密钥SKn(首次加密通信时,SKn即为访问初始密钥SK0)进行加密,并将长度信息和密文发送至接收方,同时将自身计数器执行递增操作,递增步长为预定值u。
3)接收方收到密文,使用预定的初始向量和SKn对密文进行解密,并根据长度提取出消息mn和本次访问设备标识随机数RNx。比对RNx和在身份验证阶段交换而来的本次访问设备标识随机数RNy,如果匹配,则自身计数器执行递增操作,递增步长为预定值u,单次加密通信回合完成;如果不匹配,则拒绝接收消息mn,并根据安全要求选择合适的处理方式。
4)在单次加密通信回合完成后,通信双方各自使用预定的密码变换算法K,计算SKn=K(SKn-1,Cx)得到新的访问密钥SKn,并重复步骤2)到步骤4),直到本次访问结束。
由交换密钥阶段产生的初始密钥SK0仅作为本次访问的访问初始密钥用于首次通信。在首次通信过程结束后,读卡器和智能卡将使用预定的密码变换算法K对各自计数器值Cx和前次访问密钥SKn-1进行计算,得到新访问密钥SKn,使得本次访问每一个通信回合使用的访问密钥SKn都不相同,从而提高了通信安全。
进一步地,芯片的安全性受到了非法设备的威胁之外,还可能存在非法用户持有智能卡或读卡器进行读写的可能性。上述方法无法应对当非法用户利用合法设备和存储卡进行恶意的操作的情况。因此根据本发明的另一方面,在上述实施例的读卡器与智能卡相互认证的基础上,本发明在密钥分配过程中,通过单向哈希函数计算得到的用户的口令码,即使得到计算后的口令码值,非法也不能轻易反推计算口令码,使得伪造同一张卡变得更加困难。在进行认证时,读卡器与智能卡两端即使保密的密钥计算函数被完全破解,由于采用了单向哈希口令码的保护也可以使智能卡内的关键信息不被泄漏。
在密钥分发之前,提供给智能卡的不是口令码的原码,而是经过哈希计算之后的口令码SHA1(PW)。适应性修改之后的认证流程包括如下发卡阶段和验证阶段。
发卡阶段:
1)在发卡分配密钥时,读取智能卡上唯一的ID号(智能卡信息)以及用户的口令码,并计算SHA1(PW),这样仅仅通过一次单向哈希加密就克服了口令直接存储在卡中的缺点;
2)用控制器保密的函数DES进行加密计算得到DES(ID,SHA1(PW));
3)把DES(ID,SHA1(PW))作为应该分配给智能卡的密钥S=DES(ID,SHA1(PW)),通过对ID号与口令码的单向哈希结合加密存储到智能卡中。
身份认证阶段:
1)读卡器读取用户输入的口令码和用户智能卡的ID号,并用单向哈希函数SHA1对口令码进行计算得到SHA1(PW);
2)读卡器通过加密函数DES对SHA1(PW)以及ID号进行计算得到DES(ID,SHA1(PW));
3)智能卡产生一个随机数RA,并把此随机数传送到读卡器端;
4)读卡器产生一个随机数RB,使用加密算法DES计算得到DES(RA,RB),并把计算结果传送到智能卡中;
5)智能卡使用密钥DES(ID,SHA1(PW))通过加密算法DES计算得到DES(RA,RB),比较计算得到的RA与自己产生的RA是否一致,如果一致,判断此读卡器用户为合法,并将计算得到的RB传送的读卡器端;如果不一致,判断此读卡器用户为非法,然后终止此次读写;
6)读卡器比较得到的RB与自己产生的RB的一致性:如果两者一致,则判断此智能卡为合法智能卡,继续进行读写;如果两者不一致,则判断此智能卡为非法,从而终止连接。
综上所述,本发明的方法用较低的资源开销实现了智能卡与读卡器之间的认证和数据传输处理,能够抵抗常见的攻击,具备可扩展性。
显然,本领域的技术人员应该理解,上述的本发明的各模块或各步骤可以用通用的计算系统来实现,它们可以集中在单个的计算系统上,或者分布在多个计算系统所组成的网络上,可选地,它们可以用计算系统可执行的程序代码来实现,从而,可以将它们存储在存储系统中由计算系统来执行。这样,本发明不限制于任何特定的硬件和软件结合。
应当理解的是,本发明的上述具体实施方式仅仅用于示例性说明或解释本发明的原理,而不构成对本发明的限制。因此,在不偏离本发明的精神和范围的情况下所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。此外,本发明所附权利要求旨在涵盖落入所附权利要求范围和边界、或者这种范围和边界的等同形式内的全部变化和修改例。