專利名稱:一種安全下載應用的方法
技術領域:
本發明涉及智能卡領域,特別涉及一種安全下載應用的方法。
背景技術:
在下載應用過程中,發明人發現現有技術存在以下問題針對廠商將應用安裝到卡片的情況,對于卡片的應用管理的問題全部由卡商負責;針對卡商將自己卡片的應用包發給客戶或外包給外協廠生產的情況,卡商自己生產制定的私密數據將會完全暴露給外界,造成安全問題;針對卡片的應用安裝次數不可控,對于卡商而言變成了一次提供,反復使用,安全存在隱患。
發明內容
為解決現有技術存在的缺陷,本發明提供了一種安全下載應用的方法。一種安全下載應用的方法,包括步驟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日
發明者陸舟, 于華章 申請人:飛天誠信科技股份有限公司