>[0042]圖5和圖6是本發(fā)明實施例3提供的一種鏈路會話密鑰協(xié)商方法的流程圖;
[0043]圖7是本發(fā)明實施例4提供的一種鏈路會話密鑰協(xié)商裝置的組成框圖。
【具體實施方式】
[0044]下面將結(jié)合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本發(fā)明一部分實施例,而不是全部的實施例?;诒景l(fā)明中的實施例,本領域普通技術人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。在本發(fā)明提供的實施例中,術語“第一”、“第二”等僅用于描述目的,而不能理解為指示或暗示相對重要性或數(shù)量或先后順序。
[0045]本發(fā)明提供的鏈路會話密鑰協(xié)商方法,主要包括上位機與智能密鑰設備建立連接之后,上位機通過給智能密鑰設備發(fā)送兩條指令來獲得設備中的第二公鑰,并用獲取的第二公鑰對上位機中保存的第二預置數(shù)據(jù)執(zhí)行加密操作,根據(jù)加密操作后得到的數(shù)據(jù)組成一條指令發(fā)送到智能密鑰設備,智能密鑰設備解析該指令從中獲取上位機中保存的第二預置數(shù)據(jù),將其與設備中保存的第一預置數(shù)據(jù)進行比較,若不一致則協(xié)商失敗,結(jié)束;若一致則設備生成隨機數(shù)并保存,將生成的隨機數(shù)用第一公鑰加密后返回給上位機,上位機用第一私鑰解密得到所述隨機數(shù),智能密鑰設備和上位機將所述隨機數(shù)與預設數(shù)據(jù)拼接組成的數(shù)據(jù)作為鏈路會話密鑰值。
[0046]上述智能密鑰設備執(zhí)行的操作主要包括以下內(nèi)容:
[0047]當智能密鑰設備接收到上位機發(fā)來的獲取公鑰數(shù)據(jù)的請求時,向上位機返回第二公鑰;
[0048]當智能密鑰設備接收到上位機發(fā)來的獲取鏈路會話密鑰的請求時,使用第二私鑰從所述獲取鏈路會話密鑰的請求中解密出第二預置數(shù)據(jù);
[0049]智能密鑰設備比較所述第二預置數(shù)據(jù)與設備中的第一預置數(shù)據(jù)是否一致,若一致則智能密鑰設備生成隨機數(shù),根據(jù)所述隨機數(shù)與預設數(shù)據(jù)組成鏈路會話密鑰,并向上位機返回所述隨機數(shù);否則智能密鑰設備向上位機返回錯誤信息。
[0050]當智能密鑰設備接收到上位機發(fā)來的通信請求時,使用所述鏈路會話密鑰解密所述通信請求,并根據(jù)解密結(jié)果執(zhí)行相應操作,生成操作結(jié)果,使用所述鏈路會話密鑰對所述操作結(jié)果進行加密后返回給上位機。
[0051]優(yōu)選的,智能密鑰設備中預先保存有兩對密鑰對,即第一公鑰和第一私鑰、第二公鑰和第二私鑰,上位機通過發(fā)送獲取公鑰數(shù)據(jù)的請求來獲取智能密鑰設備中的第二公鑰。
[0052]實施例1
[0053]本實施例提供了一種鏈路會話密鑰協(xié)商方法,以上位機與智能密鑰設備(本實施例中簡稱設備)之間進行鏈路會話密鑰的協(xié)商為例,其中設備中預先保存有兩對密鑰對(KeyPairl和KeyPair2),分別為第一公鑰和第一私鑰、第二公鑰和第二私鑰,優(yōu)選的1^7?3化1和1^7?3化2為兩對1?4密鑰對,本實施例中的?1^5#1填充模式具體為1?4 PKCSl填充模式;上位機中預先保存有與所述設備中對應一致的第一私鑰,上位機和設備中還分別保存有第二預置數(shù)據(jù)和第一預置數(shù)據(jù)。如圖1所示,本實施例提供的協(xié)商流程包括以下內(nèi)容:
[0054]步驟101:設備與上位機建立連接;
[0055]優(yōu)選的,設備與上位機可以通過USB接口建立有線連接,也可以通過藍牙建立無線連接。
[0056]步驟102:上位機根據(jù)第一APDU數(shù)據(jù)組成第一獲取公鑰數(shù)據(jù)指令;
[0057]具體的,第一 APDU數(shù)據(jù)為0x00500000,上位機按照以下指令格式:OxOO+flag+APDULen+APDU+1字節(jié)CRC校驗值,組成第一獲取公鑰數(shù)據(jù)指令,其中,已知flag = 0x01,APDU為0x00500000,APDULen為APDU的長度,I字節(jié)CRC校驗值為對數(shù)據(jù)0x00+f lag+APDULen+APDU進行CRC校驗得到的值。
[0058]步驟103:上位機向設備發(fā)送第一獲取公鑰數(shù)據(jù)指令;
[0059]步驟104:設備接收到第一獲取公鑰數(shù)據(jù)指令,對第二公鑰的第一部分數(shù)據(jù)和第二部分數(shù)據(jù)分別執(zhí)行PKCS#1填充模式的數(shù)據(jù)填充得到第一填充數(shù)據(jù)和第二填充數(shù)據(jù),用第一公鑰對第一填充數(shù)據(jù)和第二填充數(shù)據(jù)分別執(zhí)行加密運算得到第一密文數(shù)據(jù)和第二密文數(shù)據(jù),將第一密文數(shù)據(jù)與部分第二密文數(shù)據(jù)進行數(shù)據(jù)拼接得到第一響應數(shù)據(jù),取剩余的第二密文數(shù)據(jù)得到第二響應數(shù)據(jù);
[0060]具體的,第二公鑰是長度為128字節(jié)的數(shù)據(jù),第二公鑰的第一部分數(shù)據(jù)為前117字節(jié)的數(shù)據(jù),第二公鑰的第二部分數(shù)據(jù)為后11字節(jié)的數(shù)據(jù)。部分第二密文數(shù)據(jù)具體為第二密文數(shù)據(jù)的前120字節(jié)的數(shù)據(jù),剩余的第二密文數(shù)據(jù)具體為第二密文數(shù)據(jù)的后8字節(jié)的數(shù)據(jù)。
[0061]對第二公鑰的第一部分數(shù)據(jù)執(zhí)行PKCS#1填充模式的數(shù)據(jù)填充得到第一填充數(shù)據(jù)具體為,在所述第一部分數(shù)據(jù)之前填充11字節(jié)的數(shù)據(jù)得到第一填充數(shù)據(jù),得到的第一填充數(shù)據(jù)的格式如下:00 02Rand......Rand OOData,其中Rand為非O隨機數(shù),Data為所述第一部分數(shù)據(jù);
[0062]對第二公鑰的第二部分數(shù)據(jù)執(zhí)行PKCS#1模式填充的數(shù)據(jù)填充得到第二填充數(shù)據(jù)具體為,在所述第二部分數(shù)據(jù)之前填充117字節(jié)的數(shù)據(jù)得到第二填充數(shù)據(jù),得到的第二填充數(shù)據(jù)的格式如下:00 02Rand......Rand OOData,其中Rand為非O隨機數(shù),Data為所述第二部分數(shù)據(jù)。
[0063]將第一密文數(shù)據(jù)與部分第二密文數(shù)據(jù)進行數(shù)據(jù)拼接得到第一響應數(shù)據(jù),取剩余的第二密文數(shù)據(jù)得到第二響應數(shù)據(jù)具體為,將第一密文數(shù)據(jù)與第二密文數(shù)據(jù)的前120字節(jié)數(shù)據(jù)拼接得到第一響應數(shù)據(jù),取第二密文數(shù)據(jù)的后8字節(jié)數(shù)據(jù)作為第二響應數(shù)據(jù)。
[0064]步驟105:設備對第一響應數(shù)據(jù)執(zhí)行指令編碼得到第一響應指令;
[0065]具體為,對第一響應數(shù)據(jù)按照0x00+flag+Len(APDU)+APDU+l字節(jié)CRC校驗值的格式編碼組成第一響應指令,其中,flag = 0x20,Len(APDU)為APDU的長度,APDU為所述第一響應數(shù)據(jù),I字節(jié)CRC校驗值為對數(shù)據(jù)0x00+flag+Len(APDU)+APDU進行CRC校驗得到的值。
[0066]步驟106:設備向上位機返回第一響應指令;
[0067]步驟107:上位機對接收到的第一響應指令進行指令解碼獲得第一響應數(shù)據(jù);
[0068]具體的,上位機對接收到的第一響應指令進行CRC校驗,若通過校驗則根據(jù)第一響應指令格式從第一響應指令中解析獲得第一響應數(shù)據(jù),若未通過校驗則結(jié)束。
[0069]步驟108:上位機取部分第一響應數(shù)據(jù),使用第一私鑰執(zhí)行解密運算,并對解密得到的數(shù)據(jù)執(zhí)行PKCS#1填充模式的解碼操作得到一部分第二公鑰數(shù)據(jù),根據(jù)第二 APDU數(shù)據(jù)組成第二獲取公鑰數(shù)據(jù)指令;
[0070]具體的,上位機取第一響應數(shù)據(jù)的前128字節(jié)數(shù)據(jù),使用第一私鑰對第一響應數(shù)據(jù)的的前128字節(jié)數(shù)據(jù)執(zhí)行解密運算,并根據(jù)數(shù)據(jù)填充格式0x00 0x02Rand......Rand 0x00
Data對解密得到的數(shù)據(jù)進行解碼獲得Data,其中Rand為非O隨機數(shù),Data為解密得到的一部分第二公鑰數(shù)據(jù)。具體的,第二APDU數(shù)據(jù)為0x00500090,優(yōu)選的將第二APDU數(shù)據(jù)直接作為第二獲取公鑰數(shù)據(jù)指令。
[0071]步驟109:上位機向設備發(fā)送第二獲取公鑰數(shù)據(jù)指令;
[0072]具體的,上位機向設備發(fā)送的第二獲取公鑰數(shù)據(jù)指令為0x00500090。
[0073]步驟110:設備接收到第二獲取公鑰數(shù)據(jù)指令,對第二響應數(shù)據(jù)執(zhí)行指令編碼得到第二響應指令;
[0074]具體的,設備對第二響應數(shù)據(jù)按照0x00+flag+Len(APDU)+APDU+l字節(jié)CRC校驗值的格式編碼組成第二響應指令,其中,flag = 0x40,Len(APDU)為APDU的長度,AI3DU為所述第二響應數(shù)據(jù),I字節(jié)CRC校驗值為對數(shù)據(jù)0x00+flag+Len(APDU)+APDU進行CRC校驗得到的值。
[0075]步驟111:設備向上位機返回第二響應指令;
[0076]步驟112:上位機對接收到的第二響應指令進行指令解碼獲得第二響應數(shù)據(jù);
[0077]具體的,上位機對接收到的第二響應指令進行CRC校驗,若通過校驗則根據(jù)第二響應指令格式從第二響應指令中解析獲得第二響應數(shù)據(jù),若未通過校驗則結(jié)束。
[0078]步驟113:上位機取剩余的第一響應數(shù)據(jù)與第二響應數(shù)據(jù)進行拼接,對拼接得到的數(shù)據(jù)使用第一私鑰執(zhí)行解密運算,并對解密得到的數(shù)據(jù)執(zhí)行PKCS#1填充模式的解碼操作得到另一部分第二公鑰數(shù)據(jù);
[0079]具體的,取第一響應數(shù)據(jù)的后120字節(jié)數(shù)據(jù)與第二響應數(shù)據(jù)拼接,對拼接后得到的數(shù)據(jù)使用第一私鑰執(zhí)行解密運算,并根據(jù)數(shù)據(jù)填充格式0x00 0x02Rand......Rand 0x00
Data對解密得到的數(shù)據(jù)進行解碼獲得Data,其中Rand為非O隨機數(shù),Data為另一部分第二公鑰數(shù)據(jù)。
[0080]步驟114:上位機將解碼得到的兩部分第二公鑰數(shù)據(jù)拼接組成第二公鑰,使用第二公鑰對第二預置數(shù)據(jù)執(zhí)行加密運算得到第三APDU數(shù)據(jù),根據(jù)第三APDU數(shù)據(jù)組成獲取鏈路會話密鑰指令;
[0081 ] 具體的,根據(jù)指令格式0x00500100+len(K)+K+l字節(jié)CRC校驗值,組成獲取鏈路會話密鑰指令,其中,K為第三APDU數(shù)據(jù),Ien(K)為第三APDU數(shù)據(jù)的長度,I字節(jié)的CRC校驗值為對數(shù)據(jù)0x00500100+len(K)+K進行CRC校驗得到值。
[0082]步驟11