一种链路会话密钥协商方法及装置的制造方法_2

文档序号:9931306阅读:来源:国知局
>[0042]图5和图6是本发明实施例3提供的一种链路会话密钥协商方法的流程图;
[0043]图7是本发明实施例4提供的一种链路会话密钥协商装置的组成框图。
【具体实施方式】
[0044]下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。在本发明提供的实施例中,术语“第一”、“第二”等仅用于描述目的,而不能理解为指示或暗示相对重要性或数量或先后顺序。
[0045]本发明提供的链路会话密钥协商方法,主要包括上位机与智能密钥设备建立连接之后,上位机通过给智能密钥设备发送两条指令来获得设备中的第二公钥,并用获取的第二公钥对上位机中保存的第二预置数据执行加密操作,根据加密操作后得到的数据组成一条指令发送到智能密钥设备,智能密钥设备解析该指令从中获取上位机中保存的第二预置数据,将其与设备中保存的第一预置数据进行比较,若不一致则协商失败,结束;若一致则设备生成随机数并保存,将生成的随机数用第一公钥加密后返回给上位机,上位机用第一私钥解密得到所述随机数,智能密钥设备和上位机将所述随机数与预设数据拼接组成的数据作为链路会话密钥值。
[0046]上述智能密钥设备执行的操作主要包括以下内容:
[0047]当智能密钥设备接收到上位机发来的获取公钥数据的请求时,向上位机返回第二公钥;
[0048]当智能密钥设备接收到上位机发来的获取链路会话密钥的请求时,使用第二私钥从所述获取链路会话密钥的请求中解密出第二预置数据;
[0049]智能密钥设备比较所述第二预置数据与设备中的第一预置数据是否一致,若一致则智能密钥设备生成随机数,根据所述随机数与预设数据组成链路会话密钥,并向上位机返回所述随机数;否则智能密钥设备向上位机返回错误信息。
[0050]当智能密钥设备接收到上位机发来的通信请求时,使用所述链路会话密钥解密所述通信请求,并根据解密结果执行相应操作,生成操作结果,使用所述链路会话密钥对所述操作结果进行加密后返回给上位机。
[0051]优选的,智能密钥设备中预先保存有两对密钥对,即第一公钥和第一私钥、第二公钥和第二私钥,上位机通过发送获取公钥数据的请求来获取智能密钥设备中的第二公钥。
[0052]实施例1
[0053]本实施例提供了一种链路会话密钥协商方法,以上位机与智能密钥设备(本实施例中简称设备)之间进行链路会话密钥的协商为例,其中设备中预先保存有两对密钥对(KeyPairl和KeyPair2),分别为第一公钥和第一私钥、第二公钥和第二私钥,优选的1^7?3化1和1^7?3化2为两对1?4密钥对,本实施例中的?1^5#1填充模式具体为1?4 PKCSl填充模式;上位机中预先保存有与所述设备中对应一致的第一私钥,上位机和设备中还分别保存有第二预置数据和第一预置数据。如图1所示,本实施例提供的协商流程包括以下内容:
[0054]步骤101:设备与上位机建立连接;
[0055]优选的,设备与上位机可以通过USB接口建立有线连接,也可以通过蓝牙建立无线连接。
[0056]步骤102:上位机根据第一APDU数据组成第一获取公钥数据指令;
[0057]具体的,第一 APDU数据为0x00500000,上位机按照以下指令格式:OxOO+flag+APDULen+APDU+1字节CRC校验值,组成第一获取公钥数据指令,其中,已知flag = 0x01,APDU为0x00500000,APDULen为APDU的长度,I字节CRC校验值为对数据0x00+f lag+APDULen+APDU进行CRC校验得到的值。
[0058]步骤103:上位机向设备发送第一获取公钥数据指令;
[0059]步骤104:设备接收到第一获取公钥数据指令,对第二公钥的第一部分数据和第二部分数据分别执行PKCS#1填充模式的数据填充得到第一填充数据和第二填充数据,用第一公钥对第一填充数据和第二填充数据分别执行加密运算得到第一密文数据和第二密文数据,将第一密文数据与部分第二密文数据进行数据拼接得到第一响应数据,取剩余的第二密文数据得到第二响应数据;
[0060]具体的,第二公钥是长度为128字节的数据,第二公钥的第一部分数据为前117字节的数据,第二公钥的第二部分数据为后11字节的数据。部分第二密文数据具体为第二密文数据的前120字节的数据,剩余的第二密文数据具体为第二密文数据的后8字节的数据。
[0061]对第二公钥的第一部分数据执行PKCS#1填充模式的数据填充得到第一填充数据具体为,在所述第一部分数据之前填充11字节的数据得到第一填充数据,得到的第一填充数据的格式如下:00 02Rand......Rand OOData,其中Rand为非O随机数,Data为所述第一部分数据;
[0062]对第二公钥的第二部分数据执行PKCS#1模式填充的数据填充得到第二填充数据具体为,在所述第二部分数据之前填充117字节的数据得到第二填充数据,得到的第二填充数据的格式如下:00 02Rand......Rand OOData,其中Rand为非O随机数,Data为所述第二部分数据。
[0063]将第一密文数据与部分第二密文数据进行数据拼接得到第一响应数据,取剩余的第二密文数据得到第二响应数据具体为,将第一密文数据与第二密文数据的前120字节数据拼接得到第一响应数据,取第二密文数据的后8字节数据作为第二响应数据。
[0064]步骤105:设备对第一响应数据执行指令编码得到第一响应指令;
[0065]具体为,对第一响应数据按照0x00+flag+Len(APDU)+APDU+l字节CRC校验值的格式编码组成第一响应指令,其中,flag = 0x20,Len(APDU)为APDU的长度,APDU为所述第一响应数据,I字节CRC校验值为对数据0x00+flag+Len(APDU)+APDU进行CRC校验得到的值。
[0066]步骤106:设备向上位机返回第一响应指令;
[0067]步骤107:上位机对接收到的第一响应指令进行指令解码获得第一响应数据;
[0068]具体的,上位机对接收到的第一响应指令进行CRC校验,若通过校验则根据第一响应指令格式从第一响应指令中解析获得第一响应数据,若未通过校验则结束。
[0069]步骤108:上位机取部分第一响应数据,使用第一私钥执行解密运算,并对解密得到的数据执行PKCS#1填充模式的解码操作得到一部分第二公钥数据,根据第二 APDU数据组成第二获取公钥数据指令;
[0070]具体的,上位机取第一响应数据的前128字节数据,使用第一私钥对第一响应数据的的前128字节数据执行解密运算,并根据数据填充格式0x00 0x02Rand......Rand 0x00
Data对解密得到的数据进行解码获得Data,其中Rand为非O随机数,Data为解密得到的一部分第二公钥数据。具体的,第二APDU数据为0x00500090,优选的将第二APDU数据直接作为第二获取公钥数据指令。
[0071]步骤109:上位机向设备发送第二获取公钥数据指令;
[0072]具体的,上位机向设备发送的第二获取公钥数据指令为0x00500090。
[0073]步骤110:设备接收到第二获取公钥数据指令,对第二响应数据执行指令编码得到第二响应指令;
[0074]具体的,设备对第二响应数据按照0x00+flag+Len(APDU)+APDU+l字节CRC校验值的格式编码组成第二响应指令,其中,flag = 0x40,Len(APDU)为APDU的长度,AI3DU为所述第二响应数据,I字节CRC校验值为对数据0x00+flag+Len(APDU)+APDU进行CRC校验得到的值。
[0075]步骤111:设备向上位机返回第二响应指令;
[0076]步骤112:上位机对接收到的第二响应指令进行指令解码获得第二响应数据;
[0077]具体的,上位机对接收到的第二响应指令进行CRC校验,若通过校验则根据第二响应指令格式从第二响应指令中解析获得第二响应数据,若未通过校验则结束。
[0078]步骤113:上位机取剩余的第一响应数据与第二响应数据进行拼接,对拼接得到的数据使用第一私钥执行解密运算,并对解密得到的数据执行PKCS#1填充模式的解码操作得到另一部分第二公钥数据;
[0079]具体的,取第一响应数据的后120字节数据与第二响应数据拼接,对拼接后得到的数据使用第一私钥执行解密运算,并根据数据填充格式0x00 0x02Rand......Rand 0x00
Data对解密得到的数据进行解码获得Data,其中Rand为非O随机数,Data为另一部分第二公钥数据。
[0080]步骤114:上位机将解码得到的两部分第二公钥数据拼接组成第二公钥,使用第二公钥对第二预置数据执行加密运算得到第三APDU数据,根据第三APDU数据组成获取链路会话密钥指令;
[0081 ] 具体的,根据指令格式0x00500100+len(K)+K+l字节CRC校验值,组成获取链路会话密钥指令,其中,K为第三APDU数据,Ien(K)为第三APDU数据的长度,I字节的CRC校验值为对数据0x00500100+len(K)+K进行CRC校验得到值。
[0082]步骤11
当前第2页1 2 3 4 5 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1