专利名称:一种安全下载应用的方法
技术领域:
本发明涉及智能卡领域,特别涉及一种安全下载应用的方法。
背景技术:
在下载应用过程中,发明人发现现有技术存在以下问题针对厂商将应用安装到卡片的情况,对于卡片的应用管理的问题全部由卡商负责;针对卡商将自己卡片的应用包发给客户或外包给外协厂生产的情况,卡商自己生产制定的私密数据将会完全暴露给外界,造成安全问题;针对卡片的应用安装次数不可控,对于卡商而言变成了一次提供,反复使用,安全存在隐患。
发明内容
为解决现有技术存在的缺陷,本发明提供了一种安全下载应用的方法。一种安全下载应用的方法,包括步骤SI :卡连接器执行请求安装应用指令,判断是否成功读取到第一指令;是,执行步骤S2 ;否,输出错误信息,退出安装;步骤S2 :所述卡连接器向卡片发送第一指令;步骤S3 :所述卡片接收第一指令并从中读取第一指令的第一计算结果,然后与对第一指令进行计算得到的第一指令的第二计算结果比较;相同,向所述卡连接器发送第一成功响应状态码,然后,执行步骤S4;不相同,向所述卡连接器发送第一失败响应状态码,然后,退出安装;步骤S4 :所述卡连接器判断是否成功读取到下一条第一指令;是,返回步骤S2 ;否,执行步骤S5 ;步骤S5 :所述卡连接器判断是否成功读取到第二指令;是,执行步骤S6 ;否,输出错误信息,退出安装;步骤S6 :所述卡连接器向所述卡片发送第二指令;步骤S7:所述卡片接收第二指令并从中读取第二指令的第一计算结果,然后与对第二指令进行计算得到的第二指令的第二计算结果比较;相同,向所述卡连接器发送第二成功响应状态码,然后,执行步骤S8;不相同,向所述卡连接器发送第二失败响应状态码,然后,退出安装;步骤S8 :所述卡连接器判断是否成功读取到下一条第二指令;是,返回步骤S6 ;否,执行步骤S9 ;步骤S9 :所述卡连接器判断是否成功读取到第三指令;是,执行步骤SlO ;否,输出错误信息,退出安装;步骤SlO :所述卡连接器向所述卡片发送第三指令;步骤Sll :所述卡片接收第三指令并从中读取第三指令的第一计算结果,然后与对第三指令进行计算得到的第三指令的第二计算结果比较;相同,向所述卡连接器发送第三成功响应状态码,然后,执行步骤S12;不相同,向所述卡连接器发送第三失败响应状态码,然后,退出安装;步骤S12 :所述卡连接器判断是否成功读取到下一条第三指令;是,返回步骤SlO ;否,执行步骤S13 ;步骤S13 :所述卡连接器判断是否成功执行激活指令;是,执行步骤S14 ;否,退出安装;步骤S14 :所述卡连接器判断是否成功读取到第四指令;是,执行步骤S15 ;否,退出安装;步骤S15 :所述卡连接器向所述卡片发送第四指令;步骤S16 :所述卡片接收第四指令并执行相应操作,然后向所述卡连接器发送第四响应状态码; 步骤S17 :所述卡连接器判断第四响应状态码是否等于预设值;是,向所述卡片发送应用;否,退出安装。所述步骤SI之前包括步骤Al :所述卡连接器生成主机询问码并保存,向所述卡片发送包含所述主机询问码的内部初始化命令;步骤A2 :所述卡片接收所述内部初始化命令并从中读取主机询问码,生成并保存卡询问码、第一会话密钥以及第二会话密钥,根据主机询问码、序列计数值、卡询问码生成第一数据块,用第一会话密钥对第一数据块进行加密,得到第一加密结果,向所述卡连接器发送包含第一加密结果、卡询问码、序列计数值的内部初始化响应;步骤A3 :所述卡连接器接收内部初始化响应,从中读取第一加密结果、卡询问码、序列计数值,然后执行包含内部初始化响应的验证命令,生成并保存第三会话密钥和第四会话密钥,根据主机询问码、序列计数值、卡询问码生成第二数据块,用第三会话密钥对第二数据块进行加密得到第二加密结果,将第二加密结果与第一加密结果进行比较;相同,执行步骤A4 ;否,输出错误信息,退出安装;步骤A4 :所述卡连接器根据主机询问码、序列计数值、卡询问码生成第三数据块,用第三会话密钥对第三数据块进行加密,得到第三加密结果,并将其作为认证数据的一部分,用第四会话密钥和卡连接器信息值对认证数据进行计算,得到卡连接器计算结果,向所述卡片发送包含认证数据和卡连接器计算结果的外部认证命令;步骤A5 :所述卡片接收外部认证命令并从中读取认证数据和卡连接器计算结果,从认证数据中读取第三加密结果,根据主机询问码、序列计数值、卡询问码生成第四数据块,用第一会话密钥对第四数据块进行加密得到第四加密结果,将第四加密结果与第三加密结果比较;相同,执行步骤A6 ;不相同,发送错误信息,退出安装;步骤A6 :所述卡片用第二会话密钥和卡片信息值对认证数据进行计算,将得到的卡片计算结果与卡连接器计算结果比较;相同,向所述卡连接器发送外部认证成功响应,然后,执行步骤A7 ;不相同,发送错误信息,退出安装;步骤A7 :所述卡连接器判断请求安装的应用是否存在;是,执行步骤SI ;否,退出安装。所述步骤A2中所述的生成第一会话密钥具体包括所述卡片用序列计数值、第一常量、预设常量生成第一派生数据,再用内置的第一密钥对所述第一派生数据采用指定方式进行加密,生成第一会话密钥;所述卡片生成第二会话密钥,具体包括所述卡片用所述序列计数值、第二常量、预设常量生成第二派生数据,再用内置的第二密钥对所述第二派生数据采用指定方式进行加密,生成第二会话密钥;所述根据主机询问码、序列计数值、卡询问码生成第一数据块,具体包括按照所述主机询问码、所述序列计数值、所述卡询问码、第一变量的顺序进行拼接得到所述第一数据块;所述用第一会话密钥对第一数据块进行加密,具体包括用所述第一会话密钥对所述第一数据块采用指定方式进行加密。所述步骤A3中所述验证命令具体包括卡连接器构造的包含内部初始化响应并·且以指定字节作为数据头的命令;生成第三会话密钥具体包括所述卡连接器用序列计数值、第一常量、预设常量生成第三派生数据,再用内置的第一密钥对所述第三派生数据采用指定方式进行加密,生成第三会话密钥;所述卡连接器生成第四会话密钥,具体包括所述卡连接器用序列计数值、第二常量、预设常量生成第四派生数据,再用内置的第二密钥对所述第四派生数据采用所述指定方式进行加密,生成第四会话密钥;所述根据主机询问码、序列计数值、卡询问码生成第二数据块,具体包括按照所述主机询问码、所述序列计数值、所述卡询问码、第一变量的顺序进行拼接得到所述第二数据块;所述用第三会话密钥对第二数据块进行加密,具体包括用所述第三会话密钥对所述第二数据块采用指定方式进行加密。所述步骤A4中所述卡连接器根据主机询问码、序列计数值、卡询问码生成第三数据块,具体包括按照所述序列计数值、所述卡询问码、所述主机询问码、第一变量的顺序进行拼接得到所述第三数据块;所述用第三会话密钥对所述第三数据块进行加密,具体包括用所述第三会话密钥对所述第三数据块采用指定方式进行加密。所述步骤A5中所述卡片根据主机询问码、序列计数值、卡询问码生成第四数据块,具体包括按照所述序列计数值、所述卡询问码、所述主机询问码、第一变量的顺序进行拼接得到所述第四数据块;所述用第一会话密钥对所述第四数据块进行加密,具体包括用所述第一会话密钥对所述第四数据块采用指定方式进行加密。所述步骤A7中所述卡连接器判断请求安装的应用是否存在,具体包括所述卡连接器根据请求安装应用指令的指定字符判断请求安装的应用是否存在。所述步骤SI中所述第一指令,具体为第一动作指令指向的第一指令。所述读取第一指令具体包括根据第四会话密钥和卡连接器信息值对第一指令进行计算得到第一指令的第一计算结果,然后将其附加在第一指令右端,成为新的第一指令,用第三会话密钥对第一指令的数据域采用指定方式进行加密,加密后的结果替换原来的部分,得到最终的第一指令。
所述步骤S3中所述卡片读取第一指令的第一计算结果,然后与对第一指令进行计算得到的第一指令的第二计算结果比较,具体包括读取所述第一指令的后8字节得到第一指令的第一计算结果,然后用第一会话密钥对第一指令的数据域采用指定方式进行解密,用解密得到的结果替换原来的 数据域,然后用第二会话密钥和卡片信息值对第一指令的指定部分进行计算,得到第一指令的第二计算结果,比较第一指令的第一计算结果和第一指令的第二计算结果。所述步骤S5之前还包括判断第二动作指令指向的第一文件是否存在,是,执行步骤S5 ;否,输出错误信息,退出安装。所述步骤S5中所述第二指令,具体为第一文件和第三动作指令指向的第二指令。所述读取第二指令具体包括使用第四会话密钥和卡连接器信息值对第二指令进行计算,得到第二指令的第一计算结果,然后将其附加在第二指令右端,成为新的第二指令,用第三会话密钥对第二指令的数据域采用指定方式进行加密,加密后的结果替换原来的部分,得到最终的第二指令。所述步骤S7中所述卡片读取第二指令的第一计算结果,然后与对第二指令进行计算得到的第二指令的第二计算结果比较,具体包括读取所述第二指令的后8字节得到第二指令的第一计算结果,然后用第一会话密钥对第二指令的数据域采用指定方式进行解密,解密后的结果替换原来的部分,然后用第二会话密钥和卡片信息值对第二指令的指定部分进行计算,得到第二指令的第二计算结果,比较第二指令的第一计算结果和第二指令的第二计算结果。所述步骤S9之前还包括所述卡连接器判断第四动作指令指向的第二文件是否存在;是,执行步骤S9 ;否,输出错误信息,退出安装。所述步骤S9中所述第三指令,具体为第二文件和第五动作指令指向的第三指令。所述读取第三指令具体包括使用第四会话密钥和卡连接器信息值对第三指令进行计算,得到第三指令的第一计算结果,然后将其附加在第三指令右端,成为新的第三指令,用第三会话密钥对第三指令的数据域采用指定方式进行加密,加密后的结果替换原来的部分,得到最终的第三指令。所述步骤Sll中所述卡片读取第三指令的第一计算结果,然后与对第三指令进行计算得到的第三指令的第二计算结果比较,具体包括读取所述第三指令的后8字节得到第三指令的第一计算结果,然后用第一会话密钥对第三指令的数据域采用指定方式进行解密,解密后的结果替换原来的部分,然后用第二会话密钥和卡片信息值对第三指令的指定部分进行计算,得到第三指令的第二计算结果,比较第三指令的第一计算结果和第三指令的第二计算结果。所述步骤S13之前还包括所述卡连接器判断第二动作指令指向的下一条第一文件是否存在;是,返回步骤S5 ;否,执行步骤S13。所述步骤S13中所述的卡连接器判断是否成功执行激活指令,具体包括判断可激活次数是否大于O ;如果大于0,则执行激活操作,然后可激活次数减1,否则,退出安装。一种安全下载应用的方法,包括
步骤BI :卡片接收指令并判断指令类型;如果是内部初始化命令,则执行步骤B2 ;如果是外部认证命令,则执行步骤B3 ;如果是弟一指令,则执彳丁步骤B5 ;如果是第二指令,则执行步骤B6 ;如果是第三指令,则执行步骤B7 ;如果是其他命令,则根据所述其他命令执行相应操作,然后返回步骤BI ;步骤B2 :所述卡片从内部初始化命令中读取主机询问码,生成并保存卡询问码、第一会话密钥以及第二会话密钥,生成第一数据块,对第一数据块加密,得到第一加密结 果,向卡连接器发送内部初始化响应,然后返回步骤BI ;步骤B3 :所述卡片从外部认证命令中读取认证数据和卡连接器计算结果,再从认证数据中读取第三加密结果,生成第四数据块,对第四数据块加密得到第四加密结果,将第四加密结果与所述第三加密结果比较;相同,执行步骤B4 ;不相同,向所述卡连接器发送错误信息,然后返回步骤BI ;步骤B4 :所述卡片对认证数据进行计算得到卡片计算结果,将卡片计算结果与所述卡连接器计算结果比较,相同,向所述卡连接器发送外部认证成功响应状态码,然后返回步骤BI ;不相同,向所述卡连接器发送外部认证失败响应状态码,然后返回步骤BI ;步骤B5 :所述卡片从第一指令中读取第一指令的第一计算结果,对第一指令进行解密,得到的解密结果替换原来的部分,然后对第一指令进行计算得到第一指令的第二计算结果,将第一指令的第二计算结果与第一指令的第一计算结果进行比较;相同,向所述卡连接器发送第一成功响应状态码,然后返回步骤BI ;不相同,向所述卡连接器发送第一失败响应状态码,然后返回步骤BI ;步骤B6 :所述卡片从第二指令中读取第二指令的第一计算结果,对第二指令进行解密,得到的解密结果替换原来的部分,然后对第二指令进行计算得到第二指令的第二计算结果,将第二指令的第二计算结果与第二指令的第一计算结果进行比较;相同,向所述卡连接器发送第二成功响应状态码,然后返回步骤BI ;不相同,向所述卡连接器发送第二失败响应状态码,然后返回步骤BI ;步骤B7 :所述卡片从第三指令中读取第三指令的第一计算结果,对第三指令进行解密,得到的解密结果替换原来的部分,然后对第三指令进行计算得到第三指令的第二计算结果,将第三指令的第二计算结果与第三指令的第一计算结果进行比较;相同,向所述卡连接器发送第三成功响应状态码,然后返回步骤BI ;不相同,向所述卡连接器发送第三失败响应状态码,然后返回步骤BI。所述步骤B2中所述的生成第一会话密钥,具体为所述卡片用序列计数值、第一常量、预设常量生成第一派生数据,再用内置的第一密钥对所述第一派生数据采用指定方式进行加密,生成第一会话密钥;所述卡片生成第二会话密钥,具体包括所述卡片用所述序列计数值、第二常量、第二派生数据,再用内置的第二密钥对所述第二派生数据采用所述指定方式进行加密,生成第二会话密钥;所述生成第一数据块,具体包括按照所述主机询问码、所述序列计数值、所述卡询问码、第一变量的顺序进行拼接得到所述第一数据块;所述对第一数据块进行加密,具体包括用所述第一会话密钥对所述第一数据块采用指定方式进行加密;所述向卡连接器发送的内部初始化响应,具体为包含第一加密结果、卡询问码、序列计数值的内部初始化响应。所述步骤B3中所述生成第四数据块,具体为按照所述序列计数值、所述卡询问码、所述主机询问码、第一变量的顺序进行拼接得到所述第四数据块; 所述对所述第四数据块进行加密,具体包括用所述第一会话密钥对所述第四数据块采用指定方式进行加密。所述步骤B4中所述的对认证数据进行计算,具体为所述卡片用第二会话密钥和卡片信息值对认证数据进行计算。所述步骤B5或B6或B7中所述的进行解密,具体为所述卡片用第一会话密钥对指令的数据域采用指定方式解密;所述的对指令进行计算,具体为用第二会话密钥和卡片信息值对指令的指定部分进行计算。一种安全下载应用的方法,包括步骤Cl :所述卡片等待接收内部初始化命令,判断是否接收到内部初始化命令;是,执行步骤C2 ;否,返回步骤Cl ;步骤C2 :所述卡片从内部初始化命令中读取主机询问码,生成并保存卡询问码、第一会话密钥以及第二会话密钥,生成第一数据块,对第一数据块加密,得到第一加密结果,向卡连接器发送内部初始化响应,执行步骤C3 ;步骤C3 :所述卡片等待接收外部认证命令,判断是否接收到外部认证命令;是,执行步骤C4 ;否,返回步骤C3 ;步骤C4 :所述卡片从外部认证命令中读取认证数据和卡连接器计算结果,再从认证数据中读取第三加密结果,生成第四数据块,对第四数据块加密得到第四加密结果,将第四加密结果与所述第三加密结果比较;相同执行步骤C5 ;不相同,向卡连接器发送错误信息;步骤C5 :所述卡片对认证数据进行计算得到卡片计算结果,将卡片计算结果与所述卡连接器计算结果比较,相同,向所述卡连接器发送外部认证成功响应状态码,然后执行步骤C6 ;不相同,向所述卡连接器发送外部认证失败响应状态码;步骤C6 :所述卡片等待接收第一指令,判断是否接收到第一指令;是,执行步骤C7 ;否,返回步骤C6 ;步骤C7 :所述卡片从第一指令中读取第一指令的第一计算结果,对第一指令进行解密,得到的解密结果替换原来的部分,然后对第一指令进行计算得到第一指令的第二计算结果,将第一指令的第二计算结果与第一指令的第一计算结果进行比较;相同,向所述卡连接器发送第一成功响应状态码,然后执行步骤CS ;不相同,向所述卡连接器发送第一失败响应状态码;步骤CS :所述卡片等待接收第二指令,判断是否接收到第二指令;是,执行步骤C9 ;否,返回步骤C8 ;
步骤C9:所述卡片从第二指令中读取第二指令的第一计算结果,对第二指令进行解密,得到的解密结果替换原来的部分,然后对第二指令进行计算得到第二指令的第二计算结果,将第二指令的第二计算结果与第二指令的第一计算结果进行比较;相同,向所述卡连接器发送第二成功响应状态码,然后执行步骤ClO ;不相同,向所述卡连接器发送第二失败响应状态码;步骤ClO :所述卡片等待接收第三指令,判断是否接收到第三指令;是,执行步骤Cll ;否,返回步骤ClO ;步骤Cll :所述卡片从第三指令中读取第三指令的第一计算结果,对第三指令进行解密,得到的解密结果替换原来的部分,然后对第三指令进行计算得到第三指令的第二计算结果,将第三指令的第二计算结果与第三指令的第一计算结果进行比较;相同,向所述卡连接器发送第三成功响应状态码,然后执行步骤C12 ;不相同,向所述卡连接器发送第三失败响应状态码;·步骤C12 :所述卡片等待接收第四指令,判断是否接收到第四指令;是,执行所述第四指令,等待接收应用;否,返回步骤C12。所述步骤C2中所述的生成第一会话密钥,具体为所述卡片用序列计数值、第一常量、预设常量生成第一派生数据,再用内置的第一密钥对所述第一派生数据采用指定方式进行加密,生成第一会话密钥;所述卡片生成第二会话密钥,具体包括所述卡片用所述序列计数值、第二常量、预设常量生成第二派生数据,再用内置的第二密钥对所述第二派生数据采用所述指定方式进行加密,生成第二会话密钥;所述生成第一数据块,具体包括按照所述主机询问码、所述序列计数值、所述卡询问码、第一变量的顺序进行拼接得到所述第一数据块;所述对第一数据块进行加密,具体包括用所述第一会话密钥对所述第一数据块采用指定方式进行加密;所述向卡连接器发送内部初始化响应,具体为包含第一加密结果、卡询问码、序列计数值的内部初始化响应。所述步骤C4中所述生成第四数据块,具体为按照所述序列计数值、所述卡询问码、所述主机询问码、第一变量的顺序进行拼接得到所述第四数据块;所述对所述第四数据块进行加密,具体包括用所述第一会话密钥对所述第四数据块采用指定方式进行加密。所述步骤C5中所述的对认证数据进行计算,具体为所述卡片用第二会话密钥和卡片信息值对认证数据进行计算。所述步骤C7或C9或Cll中所述的进行解密,具体为所述卡片用第一会话密钥对指令的数据域采用指定方式解密;所述的对指令进行计算,具体为用第二会话密钥和卡片信息值对指令的指定部分进行计算。本发明实施例提供的技术方案有益效果为采取全密文通讯手段,并通过激活卡片操作控制应用安装次数,实现安全下载应用。本发明实现了卡片和卡连接器的全密文通讯,发卡次数可控;通过这种方法就可以保证在发卡的时候应用的独立性和安全性,同时限制发卡的次数,避免中介和客户随意下载应用,安全性较高。
图1-1、图1-2以及图1-3是本发明实施例I提供的一种安全下载应用的方法流程图;图2是本发明实施例2提供的一种安全下载应用的方法流程图;图3是本发明实施例3提供的一种安全下载应用的方法流程图。
具体实施例方式为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式做进一步地详细描述。 本发明所提到的卡连接器为主机和母卡的组合。实施例I参见图1-1,本实施例I提供了一种安全下载应用的方法。步骤101 :卡连接器生成主机询问码并保存;本实施例中,主机询问码为8字节的随机数。例如,主机询问码为1122334455667788 ;步骤102 :卡连接器向卡片发送包含主机询问码的内部初始化命令;本实施例中,具体向卡片发送前两字节为8050、包含主机询问码的内部初始化命令。例如,内部初始化命令为80500000081122334455667788 ;步骤103 :卡片接收内部初始化命令并从中读取主机询问码;步骤104 :卡片生成卡询问码并保存;本实施例中,卡询问码为6字节的随机数。例如,卡询问码为010203040506 ;步骤105 :卡片生成第一会话密钥、第二会话密钥并保存,根据主机询问码、序列计数值、卡询问码生成第一数据块;本实施例中,卡片用2字节序列计数值、2个双方约定的2字节常量以及2个内置密钥分别生成2个会话密钥。其中,2个内置密钥分别为16字节的第一密钥、16字节的第
二密钥。例如,序列计数值为0001。第一常量为0182;第二常量为0101;第一密钥为404142434445464748494a4b4c4d4e4f;第二密钥为404142434445464748494a4b4c4d4e4f;具体操作为卡片用2个字节的序列计数值、双方约定的2个字节的第一常量、12个字节的‘00’生成第一派生数据,再用第一密钥对第一派生数据采用3DES-CBC方式进行加密,也可以用第一密钥对第一派生数据采用其他方式进行加密,生成第一会话密钥。
例如,第一派生数据为01820001000000000000000000000000;第一会话密钥为25C9794A1205FF244F5FA0378D2F8D59;卡片用2个字节的序列计数值、双方约定的2个字节的第二常量、12个字节的‘00’生成第二派生数据,再用第二密钥对第二派生数据采用指定方式进行加密,指定方式优选为3DES-CBC,生成第二会话密钥;例如, 第二派生数据为01010001000000000000000000000000;第二会话密钥为9BED98891580C3B245FE9EC58BFA8D2A;本实施例中,第一数据块生成格式为主机询问码+序列计数值+卡询问码+8000000000000000。例如,第一数据块为112233445566778800010102030405068000000000000000 ;步骤106 :卡片用第一会话密钥对第一数据块进行加密,得到第一加密结果;本实施例中,用第一会话密钥对第一数据块采用指定方式进行加密,指定方式优选为3DES-CBC方式,得到8个字节第一加密结果。例如,第一加密结果为6DF0F3DE2BAE36AA;步骤107 :卡片向卡连接器发送包含第一加密结果、卡询问码、序列计数值的内部初始化响应;例如,内部初始化响应为00000000000000000000FF0200010102030405066DF0F3DE2BAE36AA9000 ;步骤108 :卡连接器接收内部初始化响应,从中读取第一加密结果、卡询问码、序列计数值,然后执行包含内部初始化响应的验证命令;本实施例中,验证命令为卡连接器构造的包含内部初始化响应并且前3个字节为808050的命令。例如8080500024E14D46103FFC193A00000000000000000000FF0200010102030405066DF0F3DE2BAE36AA9000 ;步骤109 :卡连接器生成第三会话密钥、第四会话密钥并保存,根据主机询问码、序列计数值、卡询问码生成第二数据块;本实施例中,卡连接器用2个字节的序列计数值、2个双方约定的2个字节的常量以及2个内置密钥生成2个会话密钥。其中,2个内置密钥分别为16个字节的第一密钥、16个字节的第二密钥。具体操作为卡连接器用2个字节的序列计数值、双方约定的2个字节的第一常量、12个字节的‘00’生成第三派生数据,再用第一密钥对第三派生数据采用3DES-CBC方式进行加密,也可以用第一密钥对第三派生数据采用其他方式进行加密,生成第三会话密钥;例如,第三派生数据为01820001000000000000000000000000 ;第三会话密钥为25C9794A1205FF244F5FA0378D2F8D59 ;
卡连接器用2个字节的序列计数值、双方约定的2个字节的第二常量、12个字节的‘00’生成第四派生数据,再用第二密钥对第四派生数据采用指定方式进行加密,指定方式优选为3DES-CBC方式,生成第四会话密钥;例如,第四派生数据为01010001000000000000000000000000 ;第四会话密钥为9BED98891580C3B245FE9EC58BFA8D2A ;本实施例中,第二数据块生成格式为主机询问码+序列计数值+卡询问码+8000000000000000。例如,第二数据块为112233445566778800010102030405068000000000000000 ; 步骤110 :卡连接器用第三会话密钥对第二数据块进行加密,得到第二加密结果;本实施例中,用第三会话密钥对第二数据块采用指定方式进行加密,指定方式优选为3DES-CBC方式,得到8个字节的第二加密结果。步骤111 :卡连接器比较第一加密结果和第二加密结果;相同,执行步骤113 ;不相同,执行步骤112。步骤112 :输出错误信息,退出安装;步骤113 :卡连接器根据主机询问码、序列计数值、卡询问码生成第三数据块,用第三会话密钥对第三数据块进行加密,得到第三加密结果,并将其作为认证数据的一部分;本实施例中,第三数据块生成格式为序列计数值+卡询问码+主机询问码+8000000000000000。例如,第三数据块为000101020304050611223344556677888000000000000000 ;用第三会话密钥对第三数据块采用指定方式加密,指定方式优选为3DES-CBC方式,得到8个字节的第三加密结果,例如8E14AC21FAE976BF。步骤114 :卡连接器用第四会话密钥和卡连接器信息值对认证数据进行计算,得到卡连接器计算结果;本实施例中,卡连接器用第四会话密钥和卡连接器信息值对认证数据进行计算,得到8个字节卡连接器计算结果,例如0FF4783B36D6CF61。其中,卡连接器信息值初始值为8个字节的‘00’。步骤115 :卡连接器向卡片发送包含认证数据和卡连接器计算结果的外部认证命令;例如,外部认证命令为84820300108E14AC21FAE976BF0FF4783B36D6CF61 ;步骤116 :卡片接收外部认证命令并从中读取认证数据和卡连接器计算结果;本实施例中,读取外部认证命令后8个字节为卡连接器计算结果。步骤117 :卡片从认证数据中读取第三加密结果,根据主机询问码、序列计数值、卡询问码生成第四数据块,用第一会话密钥对第四数据块进行加密,得到第四加密结果;本实施例中,第四数据块生成格式为序列计数值+卡询问码+主机询问码+8000000000000000。例如,第四数据块为000101020304050611223344556677888000000000000000 ;用第一会话密钥采用指定方式对第四数 据块进行加密,指定方式优选为3DES-CBC,得到8个字节的第四加密结果。步骤118 :卡片比较第三加密结果和第四加密结果;相同,执行步骤120 ;不相同,执行步骤119。步骤119 :卡片向卡连接器发送错误信息,然后返回步骤112 ;步骤120 :卡片用第二会话密钥和卡片信息值对认证数据进行计算,得到卡片计算结果;本实施例中,具体的用第二会话密钥对认证数据进行计算,得到8个字节的卡片
计算结果。步骤121 :卡片比较卡连接器计算结果和卡片计算结果;相同,执行步骤122 ;不相同,返回步骤119。步骤122 :卡片向卡连接器发送外部认证成功响应,然后参见图1-2,执行步骤123 ;步骤123 :卡连接器判断请求安装的应用是否存在;是,执行步骤124 ;否,退出安装;本实施例中,根据请求安装应用指令的第8个字符判断请求安装的应用是否存在,例如,请求安装应用指令为808000BX,如果第X值在预设范围内,则请求安装的应用存在,X初始值为I。步骤124 :卡连接器执行请求安装应用指令;本实施例中,具体的将应该设置的数据进行设置,将应该清空的数据进行清空。步骤125 :卡连接器判断是否成功读取第一动作指令指向的包含第四会话密钥和卡连接器信息值计算得到的第一指令的第一计算结果并用第三会话密钥加密的第一指令;是,执行步骤126 ;否,返回步骤112。本实施例中,第一动作指令为808010XX,卡连接器读取01类型文件的第XX条指令。其中XX在预设范围内,优选为广3,XX的初始值为I。读取第一指令具体包括首先,用第四会话密钥和卡连接器信息值对第一指令进行计算,得到第一指令的第一计算结果,具体的计算操作不再赘述。然后,将第一指令的第一计算结果附加在第一指令右端,用第三会话密钥对第一指令的数据域采用指定方式进行加密,指定方式优选为3DES-CBC,加密后的结果替换原来的部分,得到最终的第一指令,例如,84E4000018B72E016B0F470C92D411F4A2D480FA43BC372CF359FF2C3D ;其中第一指令的第一计算结果为BC372CF359FF2C3D ;步骤126 :卡连接器向卡片发送第一指令;步骤127 :卡片接收第一指令并从中读取第一指令的第一计算结果,然后用第一会话密钥对第一指令的数据域进行解密,解密后的结果替换原来的部分,然后,用第二会话密钥和卡片信息值对第一指令的指定部分进行计算,得到第一指令的第二计算结果,比较第一指令的第一计算结果和第一指令的第二计算结果;相同,执行步骤129 ;不相同,执行步骤128。本实施例中,第一指令的后8字节为第一指令的第一计算结果;用第一会话密钥对第一指令的数据域采用指定方式进行解密,指定方式优选为3DES-CBC方式解密;第一指令的指定部分为除最后8字节外的其余部分。步骤128 :卡片向卡连接器发送第一失败响应状态码,然后返回步骤112 ;步骤129 :卡片向卡连接器发送第一成功响应状态码;步骤130 :卡连接器接收第一成功响应状态码,判断是否成功读取第一动作指令指向的下一条第一指令; 是,返回步骤126 ;否,执行步骤131。本实施例中,具体判断方法与步骤125相同。步骤131 :卡连接器判断第二动作指令指向的第一文件是否存在;是,执行步骤132 ;否,返回步骤112。本实施例中,根据第二动作指令的第8字节判断第一文件是否存在;例如,第二动作指令为8080002Y。如果Y在预设范围内,则判断第一文件存在,否则第一文件不存在,Y优选范围为广2,Y的初始值为I。步骤132 :卡连接器判断是否成功读取第一文件和第三动作指令指向的包含第四会话密钥和卡连接器信息值计算得到的第二指令的第一计算结果并用第三会话密钥加密的第二指令;是,执行步骤133 ;否,返回步骤112。本实施例中,第三动作指令为808020YY。YY在预设范围内,优选为1 2,ΥΥ的初始值为I。读取第二指令具体包括首先,用第四会话密钥和卡连接器信息值对第二指令进行计算,得到第二指令的第一计算结果,具体的计算操作不再赘述。然后,将第二指令的第一计算结果附加在第二指令右端,用第三会话密钥对第二指令的数据域采用指定方式进行加密,指定方式优选为3DES-CBC方式,加密后的结果替换原来的部分,得到最终的第二指令,例如,80E60200207FE8E33C89B00BF36C4A9918434F782844E780899AC6C94000B8F28A960597C1 ;其中第二指令的第一计算结果为00B8F28A960597C1 ;步骤133 :卡连接器向卡片发送第二指令;步骤134 :卡片接收第二指令并从中读取第二指令的第一计算结果,然后用第一会话密钥对第二指令的数据域进行解密,解密后的结果替换原来的部分,然后,用第二会话密钥和卡片信息值对第二指令的指定部分进行计算,得到第二指令的第二计算结果,比较第二指令的第一计算结果和第二指令的第二计算结果;相同,执行步骤136 ;不相同,执行步骤135。本实施例中,第二指令的后8字节为第二指令的第一计算结果;用第一会话密钥对第二指令的数据域采用指定方式进行解密,指定方式优选为3DES-CBC方式解密;第二指令的指定部分为除最后8字节外的其余部分。
步骤135 :卡片向卡连接器发送第二失败响应状态码,然后返回步骤112 ;步骤136 :卡片向卡连接器发送第二成功响应状态码;步骤137 :卡连接器接收第二成功响应状态码,判断是否成功读取第一文件和第三动作指令指向的下一条第二指令;是,返回步骤133 ;否,执行步骤138 ;步骤138 :卡连接器判断第四动作指令指向的第二文件是否存在;是,参见图1-3,执行步骤139 ;否,返回步骤112。本实施例中,具体的卡连接器执行8080003Z,Z在预设范围内,优选为f 2,Z的初始值为I。步骤139 :卡连接器判断是否成功读取第二文件和第五动作指令指向的包含用第四会话密钥和卡连接器信息值计算得到的第三指令的第一计算结果、并用第三会话密钥加密的第三指令;是,执行步骤140 ;否,返回步骤112。本实施例中,第五动作指令为808030ZZ。ZZ在预设范围内,优选为1 200,ZZ初始值为I。首先,用第四会话密钥和卡连接器信息值对第三指令进行计算,得到第三指令的·第一计算结果,具体的计算操作不再赘述。然后,将第三指令的第一计算结果附加在第三指令右端,用第三会话密钥对第三指令的数据域采用指定方式进行加密,指定方式优选为3DES-CBC方式,加密后的结果替换原来的部分,得到最终的第三指令,例如,80E80000C8C4820FAF010022DECAFFED02020200010AD15600013203010302010D6A617661636172642F46696C650200210022002100000015011A00C00B71000A01BA002D04D11F4200000000000002000004001502000107A0000000620001020107A00000006201010600C00000008000010001010000010019008000040003010700000026002B00300035003C0043004800000E00FF000801000000880000260100010905000000A300AA00B200D500F800003201FF000B0200000121013500800001D81A3A70053F941A ;其中第三指令的第一计算结果为D81A3A70053F941A ;步骤140 :卡连接器向卡片发送第三指令;步骤141 :卡片接收第三指令并从中读取第三指令的第一计算结果,然后用第一会话密钥对第三指令的数据域进行解密,解密后的结果替换原来的部分,然后,用第二会话密钥和卡片信息值对第三指令的指定部分进行计算,得到第三指令的第二计算结果,比较第三指令的第一计算结果和第三指令的第二计算结果;相同,执行步骤143 ;不相同,执行步骤142。本实施例中,第三指令的后8字节为第三指令的第一计算结果;用第一会话密钥对第三指令的数据域采用指定方式进行解密,指定方式优选为3DES-CBC方式解密;第三指令的指定部分为除最后8字节外的其余部分。步骤142 :卡片向卡连接器发送第三失败响应状态码,然后返回步骤112 ;步骤143 :卡片向卡连接器发送第三成功响应状态码;步骤144 :卡连接器接收第三成功响应状态码,判断是否成功读取第二文件和第五动作指令指向的下一条第三指令;是,返回步骤140 ;否,执行步骤145。步骤145 :卡连接器判断第二动作指令指向的下一条第一文件是否存在;是,返回步骤132 ;否,执行步骤146。步骤146 :卡连接器判断是否成功执行激活指令;是,执行步骤147 ;否,退出安装;本实施例中,激活指令为0088。如果可激活次数大于0,执行激活操作,卡连接器可激活次数减1,;步骤147 :卡连接器判断是否成功读取第六动作指令指向的第四指令;·是,执行步骤148 ;否,退出安装。本实施例中,第六指令为808040MM ;步骤148 :卡连接器向卡片发送第四指令;本实施例中,第四指令是前3字节为0X84E60C的指令,如84E60C003807D2C6A5A82486A810A958901D59B20914BFAD0C5C729292927E0F3D207874AD67412DBFF2ECDC7A1F628516F9D6C54CB32AB42CE60364EE。步骤149 :卡片接收第四指令并执行相应操作;本实施例中,具体操作不再赘述。步骤150 :卡片向卡连接器发送第四响应状态码;本实施例中,如果卡片成功执行第四指令,则向卡连接器发送值为9000的第四响应状态码。步骤151 :判断第四响应状态码是否等于预设值;是,向卡片发送应用;否,退出安装。本实施例中,如果卡连接器接收到的第四响应状态码等于9000,那么第四响应状态码等于预设值。实施例2参见图2,本实施例2提供了一种安全下载应用的方法。步骤201 :卡片接收指令并判断指令类型;本实施例中,如果前2字节为0X8050,则为内部初始化指令,执行步骤202 ;如果前2字节为0X8482,则为外部认证指令,执行步骤206 ;如果前2字节为0X84E4,则为第一指令,执行步骤214 ;如果前2字节为0X80E6,则为第二指令,执行步骤218 ;如果前2字节为0X80E8,则为第三指令,执行步骤222 ;如果为其他指令,则执行相应操作,然后返回步骤201。本实施例中,其他指令包括前3字节为0X84E60C的第四指令。步骤202 :从内部初始化命令中读取主机询问码,生成卡询问码并保存;本实施例中,从内部初始化命令读取主机询问码,例如,内部初始化命令为80500000081122334455667788 ;主机询问码为1122334455667788 ;卡片生成6字节的卡询问码010203040506。步骤203 :生成第一会话密钥、第二会话密钥并保存,根据主机询问码、序列计数值、卡询问码生成第一数据块;按照2字节第一常数+2字节序列计数值+12个字节‘00’的格式生成第一派生数据,用第一密钥对第一派生数据采用3DES-CBC方式计算,得到第一会话密钥;例如,第一密钥为01820001000000000000000000000000 ;第一会话密钥为25C9794A1205FF244F5FA0378D2F8D59 ;按照2字节第二常数+2字节序列计数值+12字节‘00’格式生成第二派生数据,用第二内置密钥对第二派生数据采用3DES-CBC方式计算,得到第二会话密钥;例如,第二内置密钥为01010001000000000000000000000000 ;第二会话密钥为9BED98891580C3B245FE9EC58BFA8D2A ; 卡片按照2字节序列计数值+6字节卡询问码+8字节主机询问码+8000000000000000的格式,生成第一数据块,例如,第一数据块为000101020304050611223344556677888000000000000000 ;步骤204 :用第一会话密钥对第一数据块进行加密,得到第一加密结果;本实施例中,用第一会话密钥对第一数据块采用3DES-CBC方式加密,得到8字节的第一加密结果,例如6DF0F3DE2BAE36AA ;步骤205 :向卡连接器发送包含第一加密结果、卡询问码、序列计数值的内部初始化响应,然后返回步骤201 ;本实施例中,内部初始化响应为00000000000000000000FF0200010102030405066DF0F3DE2BAE36AA9000 ;步骤206 :从外部认证命令中读取认证数据和卡连接器计算结果;本实施例中,外部认证命令后8字节为卡连接器计算结果,例如0FF4783B36D6CF61 ;外部认证命令为84820300108E14AC21FAE976BF0FF4783B36D6CF61 ;卡连接器计算结果为0FF4783B36D6CF61。步骤207 :从认证数据中读取第三加密结果,根据主机询问码、序列计数值、卡询问码生成第四数据块,用第一会话密钥对第四数据块进行加密,得到第四加密结果;本实施例中,第四数据块生成格式为序列计数值+卡询问码+主机询问码+8000000000000000。例如,第四数据块为000101020304050611223344556677888000000000000000 ;用第一会话密钥采用指定方式对第四数据块进行加密,指定方式优选为3DES-CBC,得到8字节的第四加密结果,例如8E14AC21FAE976BF。步骤208 :判断第三加密结果和第四加密结果是否相同;是,执行步骤210 ;否,执行步骤209。步骤209 :向卡连接器发送错误信息,然后返回步骤201 ;步骤210 :用第二会话密钥和卡片信息值对认证数据进行计算,得到卡片计算结果;
本实施例中,卡片用第二会话密钥和卡片信息值对认证数据进行计算,得到8字节卡片计算结果,例如0FF4783B36D6CF61。其中,卡片信息值初始值为8字节的‘00’。步骤211 :判断卡连接器计算结果和卡片计算结果是否相同;是,执行步骤212 ;否,执行步骤213。步骤212 :向卡连接器发送外部认证成功响应状态码,然后返回步骤201 ;步骤213 :向卡连接器发送外部认证失败响应状态码,然后返回步骤201 ;步骤214:从第一指令中读取第一指令的第一计算结果,然后用第一会话密钥对第一指令的数据域进行解密,解密后的结果替换原来的部分,然后用第二会话密钥和卡片信息值对第一指令的指定部分进行计算,得到第一指令的第二计算结果;本实施例中,第一指令的后8字节为第一指令的第一计算结果;用第一会话密钥 对第一指令的数据域采用指定方式进行解密,指定方式优选为3DES-CBC方式;第一指令的指定部分为除最后8字节外的其余部分。卡片用第二会话密钥和卡片信息值对第一指令的指定部分进行计算,得到8字节第一指令的第二计算结果,例如,第一指令为84E4000018B72E016B0F470C92D411F4A2D480FA43BC372CF359FF2C3D ;其中第一指令的第一计算结果为BC372CF359FF2C3D ;步骤215 :判断第一指令的第一计算结果和第一指令的第二计算结果是否相同;是,执行步骤217 ;否,执行步骤216。步骤216 :向卡连接器发送第一失败响应状态码,然后返回步骤201 ;步骤217 :向卡连接器发送第一成功响应状态码,然后返回步骤201 ;步骤218 :从第二指令中读取第二指令的第一计算结果,然后用第一会话密钥对第二指令的数据域进行解密,解密后的结果替换原来的部分,然后用第二会话密钥和卡片信息值对第二指令的指定部分进行计算,得到第二指令的第二计算结果。本实施例中,第二指令的后8字节为第二指令的第一计算结果;用第一会话密钥对第二指令的数据域采用指定方式进行解密,指定方式优选为3DES-CBC方式;第二指令的指定部分为除最后8字节外的其余部分。卡片用第二会话密钥和卡片信息值对第二指令的指定部分进行计算,得到8字节第二指令的第二计算结果,例如,第二指令为80E60200207FE8E33C89B00BF36C4A9918434F782844E780899AC6C94000B8F28A960597C1 ;其中第二指令的第一计算结果为00B8F28A960597C1 ;步骤219 :判断第二指令的第一计算结果和第二指令的第二计算结果是否相同;是,执行步骤221 ;否,执行步骤220。步骤220 :向卡连接器发送第二失败响应状态码,然后返回步骤201 ;步骤221 :向卡连接器发送第二成功响应状态码,然后返回步骤201 ;步骤222 :从第三指令中读取第三指令的第一计算结果,然后用第一会话密钥对第三指令数据域进行解密,解密后的结果替换原来的部分,然后用第二会话密钥和卡片信息值对第三指令的指定部分进行计算,得到第三指令的第二计算结果;本实施例中,第三指令的后8字节为第三指令的第一计算结果;用第一会话密钥对第三指令的数据域采用指定方式进行解密,指定方式优选为3DES-CBC方式;第三指令的指定部分为除最后8字节外的其余部分。卡片用第二会话密钥和卡片信息值对第三指令的指定部分进行计算,得到8字节第三指令的第二计算结果,例如,第三指令为
80E80000C8C4820FAF010022DECAFFED02020200010AD15600013203010302010D6A617661636172642F46696C650200210022002100000015011A00C00B71000A01BA002D04D11F4200000000000002000004001502000107A0000000620001020107A00000006201010600C00000008000010001010000010019008000040003010700000026002B00300035003C0043004800000E00FF000801000000880000260100010905000000A300AA00B200D500F800003201FF000B0200000121013500800001D81A3A70053F941A ;其中第三指令的第一计算结果为D81A3A70053F941A ;步骤223 :判断第三指令的第一计算结果和第三指令的第二计算结果是否相同;是,执行步骤225 ;否,执行步骤224。步骤224 :向卡连接器发送第三失败响应状态码,然后返回步骤201 ;步骤225 :向卡连接器发送第三成功响应状态码,然后返回步骤201 ;
实施例3参见图3,本实施例3提供了一种安全下载应用的方法。步骤301 :等待接收内部初始化命令;步骤302 :判断是否接收到内部初始化命令;是,执行步骤303 ;否,返回步骤301。本实施例中,根据命令的前2字节判断接收到的是否为内部初始化命令,如果前2字节为0X8050,则为内部初始化命令,否则不为内部初始化命令。例如80500000081122334455667788 ;步骤303 :从内部初始化命令中读取主机询问码,生成卡询问码并保存;本实施例中,内部初始化命令后8字节为主机询问码,例如1122334455667788 ;卡片生成6字节随机数作为卡询问码,例如010203040506。步骤304 :生成第一会话密钥、第二会话密钥并保存,根据主机询问码、序列计数值、卡询问码生成第一数据块;按照2字节第一常数+2字节序列计数值+12字节‘00’的格式生成第一派生数据,用第一密钥对第一派生数据采用3DES-CBC方式计算,得到第一会话密钥;例如,第一钥为01820001000000000000000000000000 ;第一会话密钥为25C9794A1205FF244F5FA0378D2F8D59 ;按照2字节第二常数+2字节序列计数值+12字节‘00’的格式生成第二派生数据,用第二内置密钥对第二派生数据采用3DES-CBC方式计算,得到第二会话密钥;例如,第二内置密钥为01010001000000000000000000000000 ;第二会话密钥为9BED98891580C3B245FE9EC58BFA8D2A ;卡片按照2字节序列计数值+6字节卡询问码+8字节主机询问码+8000000000000000的格式,生成第一数据块,例如,第一数据块为000101020304050611223344556677888000000000000000 ;步骤305 :用第一会话密钥对第一数据块进行加密,得到第一加密结果;本实施例中,用第一会话密钥对第一数据块采用3DES-CBC方式加密,得到8字节的第一加密结果,例如6DF0F3DE2BAE36AA ;
步骤306 :向卡连接器发送包含第一加密结果、卡询问码、序列计数值的内部初始化响应;本实施例中,内部初始化响应为00000000000000000000FF0200010102030405066DF0F3DE2BAE36AA9000 ;步骤307 :等待接收外部认证命令;步骤308 :判断是否收到外部认证命令;是,执行步骤309 ;否,返回步骤307。本实施例中,根据命令的前2字节判断是否为外部认证命令,如果前2字节为0X8482,则为外部认证命令,否则不为外部认证命令,例如
84820300108E14AC21FAE976BF0FF4783B36D6CF61 ;步骤309 :从外部认证命令中读取认证数据和卡连接器计算结果;本实施例中,外部认证命令后8字节为卡连接器计算结果,例如0FF4783B36D6CF61 ;步骤310 :从认证数据中读取第三加密结果,根据主机询问码、序列计数值、卡询问码生成第四数据块,用第一会话密钥对第四数据块进行加密,得到第四加密结果;本实施例中,第四数据块生成格式为序列计数值+卡询问码+主机询问码+8000000000000000。例如,第四数据块为000101020304050611223344556677888000000000000000 ;用第一会话密钥采用指定方式对第四数据块进行加密,指定方式优选为3DES-CBC,得到8字节的第四加密结果,例如8E14AC21FAE976BF。步骤311 :判断第三加密结果和第四加密结果是否相同;是,执行步骤313 ;否,执行步骤312。步骤312 向卡连接器发送错误信息;步骤313 :用第二会话密钥和卡片信息值对认证数据进行计算,得到卡片计算结果;本实施例中,卡片用第二会话密钥和卡片信息值对认证数据进行计算,得到8字节卡片计算结果,例如0FF4783B36D6CF61。其中,卡片信息值初始值为8字节的‘00’。步骤314 :判断卡连接器计算结果和卡片计算结果是否相同;是,执行步骤316 ;否,执行步骤315。步骤315 :向卡连接器发送外部认证失败响应状态码;步骤316 向卡连接器发送外部认证成功响应状态码;步骤317 :等待接收第一指令;步骤318 :判断是否收到第一指令;是,执行步骤319 ;否,返回步骤317。本实施例中,根据指令的前2字节判断是否为第一指令,如果前2字节为0X84E4,则为第一指令,否则不为第一指令,例如84E4000018B72E016B0F470C92D411F4A2D480FA43BC372CF359FF2C3D ;步骤319 :从第一指令中读取第一指令的第一计算结果;
本实施例中,读取第一指令的后8字节为第一指令的第一计算结果,例如BC372CF359FF2C3D ;步骤320 :用第一会话密钥对第一指令的数据域进行解密,解密后的结果替换原来的部分,然后用第二会话密钥和卡片信息值对第一指令的指定部分进行计算,得到第一指令的第二计算结果;本实施例中,用第一会话密钥对 第一指令的数据域采用指定方式进行解密,指定方式优选为3DES-CBC方式;第一指令的指定部分为除最后8字节外的其余部分。卡片用第二会话密钥和卡片信息值对第一指令的指定部分进行计算,得到8字节第一指令的第二计
晳奸里异知米^步骤321 :判断第一指令的第一计算结果和第一指令的第二计算结果是否相同;是,执行步骤323 ;否,执行步骤322。步骤322 向卡连接器发送第一失败响应状态码;步骤323 向卡连接器发送第一成功响应状态码;步骤324 :等待接收第二指令;步骤325 :判断是否收到第二指令;是,执行步骤326 ;否,返回步骤324。本实施例中,根据指令的前2字节判断是否为第二指令,如果前2字节为0X80E6,则为第二指令,否则不为第二指令,例如80E60200207FE8E33C89B00BF36C4A9918434F782844E780899AC6C94000B8F28A960597C1 ;步骤326 :从第二指令中读取第二指令的第一计算结果;本实施例中,第二指令的后8字节为第二指令的第一计算结果,例如00B8F28A960597C1 ;步骤327 :用第一会话密钥对第二指令的数据域进行解密,解密后的结果替换原来的部分,然后用第二会话密钥和卡片信息值对第二指令的指定部分进行计算,得到第二指令的第二计算结果。本实施例中,用第一会话密钥对第二指令的数据域采用指定方式进行解密,指定方式优选为3DES-CBC方式。第二指令的指定部分为除最后8字节外的其余部分。卡片用第二会话密钥和卡片信息值对第二指令的指定部分进行计算,得到8字节第二指令的第二
计算结果。步骤328 :判断第二指令的第一计算结果和第二指令的第二计算结果是否相同;是,执行步骤330 ;否,执行步骤329。步骤329 向卡连接器发送第二失败响应状态码;步骤330 向卡连接器发送第二成功响应状态码;步骤331 :等待接收第三指令;步骤332 :判断是否收到第三指令;是,执行步骤333 ;否,返回步骤331。本实施例中,根据指令前2字节判断是否为第三指令,如果前2字节为0X80E8,则为第三指令,否则不为第三指令,例如
80E80000C8C4820FAF010022DECAFFED02020200010AD15600013203010302010D6A617661636172642F46696C650200210022002100000015011A00C00B71000A01BA002D04D11F4200000000000002000004001502000107A0000000620001020107A00000006201010600C00000008000010001010000010019008000040003010700000026002B00300035003C004300480-0000E00FF000801000000880000260100010905000000A300AA00B200D500F800003201FF000B0200000121013500800001D81A3A70053F941A ;步骤333 :从第三指令中读取第三指令的第一计算结果;本实施例中,第三指令的后8字节为第三指令的第一计算结果,例如D81A3A70053F941A ;步骤334 :用第一会话密钥对第三指令数据域进行解密,解密后的结果替换原来的部分,然后用第二会话密钥和卡片信息值对第三指令的指定部分进行计算,得到第三指令的第二计算结果; 本实施例中,用第一会话密钥对第三指令的数据域采用指定方式进行解密,指定方式优选为3DES-CBC方式;第三指令的指定部分为除最后8字节外的其余部分。卡片用第二会话密钥和卡片信息值对第三指令的指定部分进行计算,得到8字节第三指令的第二计
晳奸里异知米^步骤335 :判断第三指令的第一计算结果和第三指令的第二计算结果是否相同;是,执行步骤337 ;否,执行步骤336。步骤336 向卡连接器发送第三失败响应状态码;步骤337 向卡连接器发送第三成功响应状态码;步骤338 :等待接收第四指令步骤339 :判断是否收到第四指令;是,执行步骤340 ;否,返回步骤338。本实施例中,根据命令的前3字节判断是否为第四指令,如果前三字节为0X84E60C,则为第四指令,例如84E60C003807D2C6A5A82486A810A958901D59B20914BFAD0C5C729292927E0F3D207874AD67412DBFF2ECDC7A1F628516F9D6C54CB32AB42CE60364EE。步骤340 :执行相应操作并向卡连接器发送第四响应状态码;本实施例中,如果卡片成功执行第四指令,则向卡连接器发送值为9000的第四响应状态码。步骤341 :等待接收应用;以上所述,仅为本发明的具体实施方式
,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应所述以权利要求的保护范围为准。
权利要求
1.一种安全下载应用的方法,其特征是,包括 步骤SI :卡连接器执行请求安装应用指令,判断是否成功读取到第一指令;是,执行步骤S2 ;否,输出错误信息,退出安装; 步骤S2 :所述卡连接器向卡片发送第一指令; 步骤S3 :所述卡片接收第一指令并从中读取第一指令的第一计算结果,然后与对第一指令进行计算得到的第一指令的第二计算结果比较;相同,向所述卡连接器发送第一成功响应状态码,然后,执行步骤S4 ;不相同,向所述卡连接器发送第一失败响应状态码,然后,退出安装; 步骤S4 :所述卡连接器判断是否成功读取到下一条第一指令;是,返回步骤S2 ;否,执行步骤S5 ; 步骤S5 :所述卡连接器判断是否成功读取到第二指令;是,执行步骤S6 ;否,输出错误信息,退出安装; 步骤S6 :所述卡连接器向所述卡片发送第二指令; 步骤S7 :所述卡片接收第二指令并从中读取第二指令的第一计算结果,然后与对第二指令进行计算得到的第二指令的第二计算结果比较;相同,向所述卡连接器发送第二成功响应状态码,然后,执行步骤S8;不相同,向所述卡连接器发送第二失败响应状态码,然后,退出安装; 步骤S8 :所述卡连接器判断是否成功读取到下一条第二指令;是,返回步骤S6 ;否,执行步骤S9 ; 步骤S9 :所述卡连接器判断是否成功读取到第三指令;是,执行步骤SlO ;否,输出错误信息,退出安装; 步骤SlO :所述卡连接器向所述卡片发送第三指令; 步骤Sll :所述卡片接收第三指令并从中读取第三指令的第一计算结果,然后与对第三指令进行计算得到的第三指令的第二计算结果比较;相同,向所述卡连接器发送第三成功响应状态码,然后,执行步骤S12 ;不相同,向所述卡连接器发送第三失败响应状态码,然后,退出安装; 步骤S12 :所述卡连接器判断是否成功读取到下一条第三指令;是,返回步骤SlO ;否,执行步骤S13 ; 步骤S13 :所述卡连接器判断是否成功执行激活指令;是,执行步骤S14 ;否,退出安装; 步骤S14:所述卡连接器判断是否成功读取到第四指令;是,执行步骤S15 ;否,退出安装; 步骤S15 :所述卡连接器向所述卡片发送第四指令; 步骤S16 :所述卡片接收第四指令并执行相应操作,然后向所述卡连接器发送第四响应状态码; 步骤S17 :所述卡连接器判断第四响应状态码是否等于预设值;是,向所述卡片发送应用;否,退出安装。
2.根据权利要求I所述的方法,其特征是,所述步骤SI之前包括 步骤Al :所述卡连接器生成主机询问码并保存,向所述卡片发送包含所述主机询问码的内部初始化命令; 步骤A2 :所述卡片接收所述内部初始化命令并从中读取主机询问码,生成并保存卡询问码、第一会话密钥以及第二会话密钥,根据主机询问码、序列计数值、卡询问码生成第一数据块,用第一会话密钥对第一数据块进行加密,得到第一加密结果,向所述卡连接器发送包含第一加密结果、卡询问码、序列计数值的内部初始化响应; 步骤A3 :所述卡连接器接收内部初始化响应,从中读取第一加密结果、卡询问码、序列计数值,然后执行包含内部初始化响应的验证命令,生成并保存第三会话密钥和第四会话密钥,根据主机询问码、序列计数值、卡询问码生成第二数据块,用第三会话密钥对第二数据块进行加密得到第二加密结果,将第二加密结果与第一加密结果进行比较;相同,执行步 骤A4 ;否,输出错误信息,退出安装; 步骤A4:所述卡连接器根据主机询问码、序列计数值、卡询问码生成第三数据块,用第三会话密钥对第三数据块进行加密,得到第三加密结果,并将其作为认证数据的一部分,用第四会话密钥和卡连接器信息值对认证数据进行计算,得到卡连接器计算结果,向所述卡片发送包含认证数据和卡连接器计算结果的外部认证命令; 步骤A5 :所述卡片接收外部认证命令并从中读取认证数据和卡连接器计算结果,从认证数据中读取第三加密结果,根据主机询问码、序列计数值、卡询问码生成第四数据块,用第一会话密钥对第四数据块进行加密得到第四加密结果,将第四加密结果与第三加密结果比较;相同,执行步骤A6 ;不相同,发送错误信息,退出安装; 步骤A6 :所述卡片用第二会话密钥和卡片信息值对认证数据进行计算,将得到的卡片计算结果与卡连接器计算结果比较;相同,向所述卡连接器发送外部认证成功响应,然后,执行步骤A7 ;不相同,发送错误信息,退出安装; 步骤A7 :所述卡连接器判断请求安装的应用是否存在;是,执行步骤SI ;否,退出安装。
3.根据权利要求2所述的方法,其特征是,所述步骤A2中所述的生成第一会话密钥具体包括所述卡片用序列计数值、第一常量、预设常量生成第一派生数据,再用内置的第一密钥对所述第一派生数据采用指定方式进行加密,生成第一会话密钥; 所述卡片生成第二会话密钥,具体包括所述卡片用所述序列计数值、第二常量、预设常量生成第二派生数据,再用内置的第二密钥对所述第二派生数据采用指定方式进行加密,生成第二会话密钥; 所述根据主机询问码、序列计数值、卡询问码生成第一数据块,具体包括按照所述主机询问码、所述序列计数值、所述卡询问码、第一变量的顺序进行拼接得到所述第一数据块; 所述用第一会话密钥对第一数据块进行加密,具体包括用所述第一会话密钥对所述第一数据块采用指定方式进行加密。
4.根据权利要求2所述的方法,其特征是,所述步骤A3中所述验证命令具体包括卡连接器构造的包含内部初始化响应并且以指定字节作为数据头的命令;生成第三会话密钥具体包括所述卡连接器用序列计数值、第一常量、预设常量生成第三派生数据,再用内置的第一密钥对所述第三派生数据采用指定方式进行加密,生成第三会话密钥; 所述卡连接器生成第四会话密钥,具体包括所述卡连接器用序列计数值、第二常量、预设常量生成第四派生数据,再用内置的第二密钥对所述第四派生数据采用所述指定方式进行加密,生成第四会话密钥; 所述根据主机询问码、序列计数值、卡询问码生成第二数据块,具体包括按照所述主机询问码、所述序列计数值、所述卡询问码、第一变量的顺序进行拼接得到所述第二数据块; 所述用第三会话密钥对第二数据块进行加密,具体包括用所述第三会话密钥对所述第二数据块采用指定方式进行加密。
5.根据权利要求2所述的方法,其特征是,所述步骤A4中所述卡连接器根据主机询问码、序列计数值、卡询问码生成第三数据块,具体包括按照所述序列计数值、所述卡询问码、所述主机询问码、第一变量的顺序进行拼接得到所述第三数据块; 所述用第三会话密钥对所述第三数据块进行加密,具体包括用所述第三会话密钥对所述第三数据块采用指定方式进行加密。
6.根据权利要求2所述的方法,其特征是,所述步骤A5中所述卡片根据主机询问码、序列计数值、卡询问码生成第四数据块,具体包括按照所述序列计数值、所述卡询问码、所述主机询问码、第一变量的顺序进行拼接得到所述第四数据块; 所述用第一会话密钥对所述第四数据块进行加密,具体包括用所述第一会话密钥对所述第四数据块采用指定方式进行加密。
7.根据权利要求2所述的方法,其特征是,所述步骤A7中所述卡连接器判断请求安装的应用是否存在,具体包括所述卡连接器根据请求安装应用指令的指定字符判断请求安装的应用是否存在。
8.根据权利要求2所述的方法,其特征是,所述步骤SI中所述第一指令,具体为第一动作指令指向的第一指令。
9.根据权利要求8所述的方法,其特征是,所述读取第一指令具体包括根据第四会话密钥和卡连接器信息值对第一指令进行计算得到第一指令的第一计算结果,然后将其附加在第一指令右端,成为新的第一指令,用第三会话密钥对第一指令的数据域采用指定方式进行加密,加密后的结果替换原来的部分,得到最终的第一指令。
10.根据权利要求2所述的方法,其特征是,所述步骤S3中所述卡片读取第一指令的第一计算结果,然后与对第一指令进行计算得到的第一指令的第二计算结果比较,具体包括读取所述第一指令的后8字节得到第一指令的第一计算结果,然后用第一会话密钥对第一指令的数据域采用指定方式进行解密,用解密得到的结果替换原来的数据域,然后用第二会话密钥和卡片信息值对第一指令的指定部分进行计算,得到第一指令的第二计算结果,比较第一指令的第一计算结果和第一指令的第二计算结果。
11.根据权利要求I所述的方法,其特征是,所述步骤S5之前还包括判断第二动作指令指向的第一文件是否存在,是,执行步骤S5 ;否,输出错误信息,退出安装。
12.根据权利要求2所述的方法,其特征是,所述步骤S5中所述第二指令,具体为第一文件和第三动作指令指向的第二指令。
13.根据权利要求12所述的方法,其特征是,所述读取第二指令具体包括使用第四会话密钥和卡连接器信息值对第二指令进行计算,得到第二指令的第一计算结果,然后将其附加在第二指令右端,成为新的第二指令,用第三会话密钥对第二指令的数据域采用指定方式进行加密,加密后的结果替换原来的部分,得到最终的第二指令。
14.根据权利要求2所述的方法,其特征是,所述步骤S7中所述卡片读取第二指令的第一计算结果,然后与对第二指令进行计算得到的第二指令的第二计算结果比较,具体包括读取所述第二指令的后8字节得到第二指令的第一计算结果,然后用第一会话密钥对第二指令的数据域采用指定方式进行解密,解密后的结果替换原来的部分,然后用第二会话密钥和卡片信息值对第二指令的指定部分进行计算,得到第二指令的第二计算结果,比较第二指令的第一计算结果和第二指令的第二计算结果。
15.根据权利要求I所述的方法,其特征是,所述步骤S9之前还包括所述卡连接器判断第四动作指令指向的第二文件是否存在;是,执行步骤S9 ;否,输出错误信息,退出安装。
16.根据权利要求2所述的方法,其特征是,所述步骤S9中所述第三指令,具体为第二文件和第五动作指令指向的第三指令。
17.根据权利要求16所述的方法,其特征是,所述读取第三指令具体包括:使用第四会话密钥和卡连接器信息值对第三指令进行计算,得到第三指令的第一计算结果,然后将其附加在第三指令右端,成为新的第三指令,用第三会话密钥对第三指令的数据域采用指定方式进行加密,加密后的结果替换原来的部分,得到最终的第三指令。
18.根据权利要求2所述的方法,其特征是,所述步骤Sll中所述卡片读取第三指令的第一计算结果,然后与对第三指令进行计算得到的第三指令的第二计算结果比较,具体包括读取所述第三指令的后8字节得到第三指令的第一计算结果,然后用第一会话密钥对第三指令的数据域采用指定方式进行解密,解密后的结果替换原来的部分,然后用第二会话密钥和卡片信息值对第三指令的指定部分进行计算,得到第三指令的第二计算结果,比较第三指令的第一计算结果和第三指令的第二计算结果。
19.根据权利要求I所述的方法,其特征是,所述步骤S13之前还包括所述卡连接器判断第二动作指令指向的下一条第一文件是否存在;是,返回步骤S5 ;否,执行步骤S13。
20.根据权利要求I所述的方法,其特征是,所述步骤S13中所述的卡连接器判断是否成功执行激活指令,具体包括判断可激活次数是否大于O ;如果大于0,则执行激活操作,然后可激活次数减1,否则,退出安装。
21.一种安全下载应用的方法,其特征是,包括 步骤BI :卡片接收指令并判断指令类型; 如果是内部初始化命令,则执行步骤B2 ; 如果是外部认证命令,则执行步骤B3 ; 如果是第一指令,则执行步骤B5 ; 如果是第二指令,则执行步骤B6 ; 如果是第三指令,则执行步骤B7 ; 如果是其他命令,则根据所述其他命令执行相应操作,然后返回步骤BI ; 步骤B2:所述卡片从内部初始化命令中读取主机询问码,生成并保存卡询问码、第一会话密钥以及第二会话密钥,生成第一数据块,对第一数据块加密,得到第一加密结果,向卡连接器发送内部初始化响应,然后返回步骤BI ; 步骤B3 :所述卡片从外部认证命令中读取认证数据和卡连接器计算结果,再从认证数据中读取第三加密结果,生成第四数据块,对第四数据块加密得到第四加密结果,将第四加密结果与所述第三加密结果比较;相同,执行步骤B4 ;不相同,向所述卡连接器发送错误信息,然后返回步骤BI ; 步骤B4:所述卡片对认证数据进行计算得到卡片计算结果,将卡片计算结果与所述卡连接器计算结果比较,相同,向所述卡连接器发送外部认证成功响应状态码,然后返回步骤BI ;不相同,向所述卡连接器发送外部认证失败响应状态码,然后返回步骤BI ; 步骤B5:所述卡片从第一指令中读取第一指令的第一计算结果,对第一指令进行解密,得到的解密结果替换原来的部分,然后对第一指令进行计算得到第一指令的第二计算结果,将第一指令的第二计算结果与第一指令的第一计算结果进行比较;相同,向所述卡连接器发送第一成功响应状态码,然后返回步骤BI ;不相同,向所述卡连接器发送第一失败响应状态码,然后返回步骤BI ; 步骤B6:所述卡片从第二指令中读取第二指令的第一计算结果,对第二指令进行解密,得到的解密结果替换原来的部分,然后对第二指令进行计算得到第二指令的第二计算结果,将第二指令的第二计算结果与第二指令的第一计算结果进行比较;相同,向所述卡连接器发送第二成功响应状态码,然后返回步骤BI ;不相同,向所述卡连接器发送第二失败响应状态码,然后返回步骤BI ; 步骤B7:所述卡片从第三指令中读取第三指令的第一计算结果,对第三指令进行解密,得到的解密结果替换原来的部分,然后对第三指令进行计算得到第三指令的第二计算结果,将第三指令的第二计算结果与第三指令的第一计算结果进行比较;相同,向所述卡连接器发送第三成功响应状态码,然后返回步骤BI ;不相同,向所述卡连接器发送第三失败响应状态码,然后返回步骤BI。
22.根据权利要求21所述的方法,其特征是,所述步骤B2中所述的生成第一会话密钥,具体为所述卡片用序列计数值、第一常量、预设常量生成第一派生数据,再用内置的第一密钥对所述第一派生数据采用指定方式进行加密,生成第一会话密钥; 所述卡片生成第二会话密钥,具体包括所述卡片用所述序列计数值、第二常量、第二派生数据,再用内置的第二密钥对所述第二派生数据采用所述指定方式进行加密,生成第二会话密钥; 所述生成第一数据块,具体包括按照所述主机询问码、所述序列计数值、所述卡询问码、第一变量的顺序进行拼接得到所述第一数据块; 所述对第一数据块进行加密,具体包括用所述第一会话密钥对所述第一数据块采用指定方式进行加密; 所述向卡连接器发送的内部初始化响应,具体为包含第一加密结果、卡询问码、序列计数值的内部初始化响应。
23.根据权利要求21所述的方法,其特征是,所述步骤B3中所述生成第四数据块,具体为按照所述序列计数值、所述卡询问码、所述主机询问码、第一变量的顺序进行拼接得到所述第四数据块; 所述对所述第四数据块进行加密,具体包括用所述第一会话密钥对所述第四数据块采用指定方式进行加密。
24.根据权利要求21所述的方法,其特征是,所述步骤B4中所述的对认证数据进行计算,具体为所述卡片用第二会话密钥和卡片信息值对认证数据进行计算。
25.根据权利要求21所述的方法,其特征是,所述步骤B5或B6或B7中所述的进行解密,具体为所述卡片用第一会话密钥对指令的数据域采用指定方式解密; 所述的对指令进行计算,具体为用第二会话密钥和卡片信息值对指令的指定部分进行计算。
26.一种安全下载应用的方法,其特征是,包括 步骤Cl :所述卡片等待接收内部初始化命令,判断是否接收到内部初始化命令;是,执行步骤C2 ;否,返回步骤Cl ; 步骤C2 :所述卡片从内部初始化命令中读取主机询问码,生成并保存卡询问码、第一会话密钥以及第二会话密钥,生成第一数据块,对第一数据块加密,得到第一加密结果,向卡连接器发送内部初始化响应,执行步骤C3 ; 步骤C3 :所述卡片等待接收外部认证命令,判断是否接收到外部认证命令;是,执行步骤C4 ;否,返回步骤C3 ; 步骤C4 :所述卡片从外部认证命令中读取认证数据和卡连接器计算结果,再从认证数据中读取第三加密结果,生成第四数据块,对第四数据块加密得到第四加密结果,将第四加密结果与所述第三加密结果比较;相同执行步骤C5 ;不相同,向卡连接器发送错误信息; 步骤C5:所述卡片对认证数据进行计算得到卡片计算结果,将卡片计算结果与所述卡连接器计算结果比较,相同,向所述卡连接器发送外部认证成功响应状态码,然后执行步骤C6 ;不相同,向所述卡连接器发送外部认证失败响应状态码; 步骤C6 :所述卡片等待接收第一指令,判断是否接收到第一指令;是,执行步骤C7 ;否,返回步骤C6 ; 步骤C7 :所述卡片从第一指令中读取第一指令的第一计算结果,对第一指令进行解密,得到的解密结果替换原来的部分,然后对第一指令进行计算得到第一指令的第二计算结果,将第一指令的第二计算结果与第一指令的第一计算结果进行比较;相同,向所述卡连接器发送第一成功响应状态码,然后执行步骤CS ;不相同,向所述卡连接器发送第一失败响应状态码; 步骤CS :所述卡片等待接收第二指令,判断是否接收到第二指令;是,执行步骤C9 ;否,返回步骤C8 ; 步骤C9:所述卡片从第二指令中读取第二指令的第一计算结果,对第二指令进行解密,得到的解密结果替换原来的部分,然后对第二指令进行计算得到第二指令的第二计算结果,将第二指令的第二计算结果与第二指令的第一计算结果进行比较;相同,向所述卡连接器发送第二成功响应状态码,然后执行步骤ClO ;不相同,向所述卡连接器发送第二失败响应状态码; 步骤ClO :所述卡片等待接收第三指令,判断是否接收到第三指令;是,执行步骤Cll ;否,返回步骤ClO ; 步骤Cll :所述卡片从第三指令中读取第三指令的第一计算结果,对第三指令进行解密,得到的解密结果替换原来的部分,然后对第三指令进行计算得到第三指令的第二计算结果,将第三指令的第二计算结果与第三指令的第一计算结果进行比较;相同,向所述卡连接器发送第三成功响应状态码,然后执行步骤C12 ;不相同,向所述卡连接器发送第三失败响应状态码; 步骤C12 :所述卡片等待接收第四指令,判断是否接收到第四指令;是,执行所述第四指令,等待接收应用;否,返回步骤C12。
27.根据权利要求26所述的方法,其特征是,所述步骤C2中所述的生成第一会话密钥,具体为所述卡片用序列计数值、第一常量、预设常量生成第一派生数据,再用内置的第一密钥对所述第一派生数据采用指定方式进行加密,生成第一会话密钥; 所述卡片生成第二会话密钥,具体包括所述卡片用所述序列计数值、第二常量、预设常量生成第二派生数据,再用内置的第二密钥对所述第二派生数据采用所述指定方式进行加密,生成第二会话密钥; 所述生成第一数据块,具体包括按照所述主机询问码、所述序列计数值、所述卡询问码、第一变量的顺序进行拼接得到所述第一数据块; 所述对第一数据块进行加密,具体包括用所述第一会话密钥对所述第一数据块采用指定方式进行加密; 所述向卡连接器发送内部初始化响应,具体为包含第一加密结果、卡询问码、序列计数值的内部初始化响应。
28.根据权利要求26所述的方法,其特征是,所述步骤C4中所述生成第四数据块,具体为按照所述序列计数值、所述卡询问码、所述主机询问码、第一变量的顺序进行拼接得到所述第四数据块; 所述对所述第四数据块进行加密,具体包括用所述第一会话密钥对所述第四数据块采用指定方式进行加密。
29.根据权利要求26所述的方法,其特征是,所述步骤C5中所述的对认证数据进行计算,具体为所述卡片用第二会话密钥和卡片信息值对认证数据进行计算。
30.根据权利要求26所述的方法,其特征是,所述步骤C7或C9或ClI中所述的进行解密,具体为所述卡片用第一会话密钥对指令的数据域采用指定方式解密; 所述的对指令进行计算,具体为用第二会话密钥和卡片信息值对指令的指定部分进行计算。
全文摘要
本发明公开一种安全下载应用的方法,涉及智能卡领域。该方法包括卡片和卡连接器双方认证成功后,采取全密文通讯手段,并通过激活卡片操作控制应用安装次数,实现安全下载应用。本发明实现了卡片和卡连接器的全密文通讯,发卡次数可控;通过这种方法就可以保证在发卡的时候应用的独立性和安全性,同时限制发卡的次数,避免中介和客户随意下载应用,安全性较高。
文档编号H04L9/06GK102916805SQ20121042924
公开日2013年2月6日 申请日期2012年10月31日 优先权日2012年10月31日
发明者陆舟, 于华章 申请人:飞天诚信科技股份有限公司