一種安全讀卡器及其工作方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及信息安全領(lǐng)域,尤其涉及一種安全讀卡器及其工作方法。
【背景技術(shù)】
[0002]在現(xiàn)有技術(shù)中,讀卡器作為上位機(jī)和卡片之間的通訊通道,在接收到上位機(jī)發(fā)送的包含指令的數(shù)據(jù)包時,獲取數(shù)據(jù)包中的指令,將獲取到的指令發(fā)送給卡片,接收卡片返回的數(shù)據(jù)并發(fā)送給上位機(jī)。由于讀卡器與卡片之間只能傳輸明文的APDU(Applicat1nProtocol Data Unit,應(yīng)用協(xié)議數(shù)據(jù)單元),而上位機(jī)與卡片之間的通訊數(shù)據(jù)有時會包含敏感信息,如PIN或密鑰信息等,在通訊過程中存在安全隱患,并且在上位機(jī)與卡片的通訊過程中,讀卡器僅起到轉(zhuǎn)接的作用,敏感信息均是從上位機(jī)輸入的,而上位機(jī)的環(huán)境存在木馬等危險因素,也增加了通訊的風(fēng)險。
【發(fā)明內(nèi)容】
[0003]本發(fā)明的目的是為了克服現(xiàn)有技術(shù)的缺陷,提供一種安全讀卡器及其工作方法。
[0004]本發(fā)明方法是通過下述技術(shù)方案實(shí)現(xiàn)的:
[0005]本發(fā)明提供的一種安全讀卡器的工作方法,其基本實(shí)施過程為:所述讀卡器上電初始化后,使能總中斷,并在完成USB枚舉之后進(jìn)入主循環(huán)流程,所述主循環(huán)流程包括以下步驟:
[0006]步驟S1:判斷是否接收到上位機(jī)發(fā)送的USB數(shù)據(jù)包,是則執(zhí)行步驟S2,否則重新執(zhí)行主循環(huán)流程;
[0007]步驟S2:根據(jù)所述USB數(shù)據(jù)包中的預(yù)設(shè)字節(jié)判斷所述USB數(shù)據(jù)包中包含的指令的類型,若為第一預(yù)設(shè)通道指令則執(zhí)行步驟S3,若為其他通道指令則執(zhí)行通用讀卡器的常規(guī)操作后,重新執(zhí)行主循環(huán)流程;
[0008]步驟S3:根據(jù)所述USB數(shù)據(jù)包中的預(yù)設(shè)標(biāo)識判斷所述第一預(yù)設(shè)通道指令是否需要在安全通道中傳輸,若不需要在安全通道中傳輸則執(zhí)行步驟S4,若需要在安全通道中傳輸則執(zhí)行步驟S5 ;
[0009]步驟S4:將所述第一預(yù)設(shè)通道指令直接發(fā)送給卡片,執(zhí)行步驟S8 ;
[0010]步驟S5:檢查安全通道是否已建立,是則執(zhí)行步驟S6,否則執(zhí)行步驟S7 ;
[0011]步驟S6:將所述第一預(yù)設(shè)通道指令通過安全通道發(fā)送給卡片,執(zhí)行步驟S8 ;
[0012]步驟S7:建立與卡片之間的安全通道,將所述第一預(yù)設(shè)通道指令通過安全通道發(fā)送給卡片,執(zhí)行步驟S8 ;
[0013]步驟S8:根據(jù)卡片的返回結(jié)果設(shè)置返回數(shù)據(jù)和返回狀態(tài),并將返回數(shù)據(jù)和返回狀態(tài)返回給所述上位機(jī),重新執(zhí)行主循環(huán)流程。
[0014]上述主循環(huán)流程的步驟S5之前,還可以包括:判斷所述第一預(yù)設(shè)通道指令的類型,若所述第一預(yù)設(shè)通道指令為建立安全通道指令,則建立與卡片之間的安全通道,設(shè)置返回狀態(tài),并將返回狀態(tài)返回給所述上位機(jī),重新執(zhí)行主循環(huán)流程,否則執(zhí)行所述步驟S5 ;此時,上述主循環(huán)流程的步驟S7還可以替換為,設(shè)置返回狀態(tài)為安全通道未建立,并將返回狀態(tài)返回給所述上位機(jī),重新執(zhí)行主循環(huán)流程。
[0015]上述主循環(huán)流程中,所述判斷是否接收到上位機(jī)發(fā)送的USB數(shù)據(jù)包,可以具體包括:檢查USB接收標(biāo)志是否被置位,是則接收到上位機(jī)發(fā)送的USB數(shù)據(jù)包,否則未接收到上位機(jī)發(fā)送的USB數(shù)據(jù)包;此時,上述主循環(huán)流程的步驟SI中,當(dāng)接收到上位機(jī)發(fā)送的USB數(shù)據(jù)包時,還包括復(fù)位所述USB接收標(biāo)志;所述方法中還包括:當(dāng)USB中斷被觸發(fā)時,所述讀卡器獲取上位機(jī)發(fā)送的USB數(shù)據(jù)包,置位所述USB接收標(biāo)志。
[0016]上述主循環(huán)流程中,所述根據(jù)所述USB數(shù)據(jù)包中的預(yù)設(shè)字節(jié)判斷所述USB數(shù)據(jù)包中包含的指令的類型,可以具體包括:判斷所述USB數(shù)據(jù)包中的第一個字節(jié),若為預(yù)設(shè)數(shù)據(jù)則所述USB數(shù)據(jù)包中包含的指令為第一預(yù)設(shè)通道指令,否則所述USB數(shù)據(jù)包中包含的指令為其他通道指令。
[0017]上述主循環(huán)流程中,所述根據(jù)所述USB數(shù)據(jù)包中的預(yù)設(shè)標(biāo)識判斷所述第一預(yù)設(shè)通道指令是否需要在安全通道中傳輸,可以具體包括:判斷所述USB數(shù)據(jù)包中的第十一個字節(jié)的高位端第6個比特,若所述比特為第一預(yù)設(shè)值則所述第一預(yù)設(shè)通道指令不需要在安全通道中傳輸,若所述比特為第二預(yù)設(shè)值則所述第一預(yù)設(shè)通道指令需要在安全通道中傳輸。
[0018]上述主循環(huán)流程中,所述檢查安全通道是否已建立,可以具體包括:檢查安全通道標(biāo)志是否被置位,是則安全通道已建立,否則安全通道未建立;此時,上述主循環(huán)流程的步驟S7中,所述建立與卡片之間的安全通道之后,還包括置位所述安全通道標(biāo)志;所述步驟S2中,還包括:若所述USB數(shù)據(jù)包中包含的指令為第三預(yù)設(shè)通道指令,且所述第三預(yù)設(shè)通道指令為給卡片下電指令,則對卡片下電,并復(fù)位所述安全通道標(biāo)志。
[0019]進(jìn)一步地,所述讀卡器進(jìn)入上述主循環(huán)流程之前,還可以包括:檢查并記錄卡槽狀態(tài),上報卡槽狀態(tài)給所述上位機(jī);更進(jìn)一步地,上述主循環(huán)流程的步驟Si之前還可以包括:檢查并記錄卡槽狀態(tài),判斷與上次記錄的卡槽狀態(tài)是否相同,若相同則執(zhí)行步驟SI,若不相同則上報卡槽狀態(tài)給所述上位機(jī)后執(zhí)行步驟SI ;或者上述主循環(huán)流程的步驟S8中,所述將返回數(shù)據(jù)和返回狀態(tài)返回給所述上位機(jī)之后,還可以包括:檢查并記錄卡槽狀態(tài),判斷與上次記錄的卡槽狀態(tài)是否相同,若相同則重新執(zhí)行主循環(huán)流程,若不相同則上報卡槽狀態(tài)給所述上位機(jī)后重新執(zhí)行主循環(huán)流程;再進(jìn)一步地,當(dāng)判斷出與上次記錄的卡槽狀態(tài)不同之后,還可以包括:若檢查并記錄的卡槽狀態(tài)為無卡,則復(fù)位所述安全通道標(biāo)志;
[0020]或者,進(jìn)一步地,所述讀卡器進(jìn)入上述主循環(huán)流程之前,還可以包括:檢查并記錄卡槽狀態(tài),置位上報卡槽狀態(tài)標(biāo)志;此時,上述主循環(huán)流程的步驟Si之前,還包括判斷所述上報卡槽狀態(tài)標(biāo)志是否被置位,若被置位則上報卡槽狀態(tài)給所述上位機(jī),復(fù)位所述上報卡槽狀態(tài)標(biāo)志,執(zhí)行步驟SI,若未被置位則執(zhí)行步驟SI ;或者,所述步驟S8中,所述將返回數(shù)據(jù)和返回狀態(tài)返回給所述上位機(jī)之后,還包括判斷所述上報卡槽狀態(tài)標(biāo)志是否被置位,若被置位則上報卡槽狀態(tài)給所述上位機(jī),復(fù)位所述上報卡槽狀態(tài)標(biāo)志,重新執(zhí)行主循環(huán)流程,若未被置位則重新執(zhí)行主循環(huán)流程;更進(jìn)一步地,上述主循環(huán)流程的步驟SI之前,還可以包括:檢查并記錄卡槽狀態(tài),判斷與上次記錄的卡槽狀態(tài)是否相同,若相同則執(zhí)行步驟Si,若不相同則置位所述上報卡槽狀態(tài)標(biāo)志后執(zhí)行步驟SI ;或者,上述主循環(huán)流程的步驟S8中,所述將返回數(shù)據(jù)和返回狀態(tài)返回給所述上位機(jī)之后,還可以包括檢查并記錄卡槽狀態(tài),判斷與上次記錄的卡槽狀態(tài)是否相同,若相同則重新執(zhí)行主循環(huán)流程,若不相同則置位所述上報卡槽狀態(tài)標(biāo)志后重新執(zhí)行主循環(huán)流程;再進(jìn)一步地,當(dāng)判斷出與上次記錄的卡槽狀態(tài)不同之后,還可以包括:若檢查并記錄的卡槽狀態(tài)為無卡,則復(fù)位所述安全通道標(biāo)志。
[0021]上述主循環(huán)流程中,所述建立與卡片之間的安全通道,可以具體包括:與卡片協(xié)商生成數(shù)據(jù)密鑰、認(rèn)證密鑰和會話密鑰;所述將所述第一預(yù)設(shè)通道指令通過安全通道發(fā)送給卡片,具體包括:用所述數(shù)據(jù)密鑰加密所述第一預(yù)設(shè)通道指令中的敏感信息,用所述會話密鑰計算包含敏感信息密文的第一預(yù)設(shè)通道指令的消息認(rèn)證碼,用所述認(rèn)證密鑰加密包含敏感信息密文的第一預(yù)設(shè)通道指令,將所述消息認(rèn)證碼和包含敏感信息密文的第一預(yù)設(shè)通道指令的密文發(fā)送給卡片。
[0022]所述與卡片協(xié)商生成數(shù)據(jù)密鑰、認(rèn)證密鑰和會話密鑰之前,還包括:獲取所述讀卡器中預(yù)置的初始密鑰;所述與卡片協(xié)商生成數(shù)據(jù)密鑰、認(rèn)證密鑰和會話密鑰,具體為:根據(jù)所述初始密鑰與卡片協(xié)商生成數(shù)據(jù)密鑰、認(rèn)證密鑰和會話密鑰;
[0023]或者,所述與卡片協(xié)商生成數(shù)據(jù)密鑰、認(rèn)證密鑰和會話密鑰之前,還包括:獲取所述讀卡器中保存的初始密鑰;所述與卡片協(xié)商生成數(shù)據(jù)密鑰、認(rèn)證密鑰和會話密鑰,具體為:根據(jù)所述初始密鑰與卡片協(xié)商生成數(shù)據(jù)密鑰、認(rèn)證密鑰和會話密鑰;此時,上述主循環(huán)流程的步驟S2中,還包括:若所述USB數(shù)據(jù)包中包含的指令為第二預(yù)設(shè)通道指令,且所述第二預(yù)設(shè)通道指令為下載密鑰指令,則保存所述下載密鑰指令中的初始密鑰。
[0024]所述第一預(yù)設(shè)通道指令包括登陸指令;所述登陸指令需要在安全通道中傳輸;當(dāng)所述USB數(shù)據(jù)包中包含的第一預(yù)設(shè)通道指令為所述登陸指令時,所述將所述第一預(yù)設(shè)通道指令通過安全通道發(fā)送給卡片之前,還包括:判斷PIN的來源,若來源于默認(rèn)PIN則獲取讀卡器中預(yù)置的默認(rèn)PIN,添加獲取的默認(rèn)PIN到所述登陸指令中,若來源于鍵盤輸入則獲取用戶輸入的PIN,添加獲取的PIN到所述登陸指令中。
[0025]所述第一預(yù)設(shè)通道指令包括輸入密鑰信息指令;所述輸入密鑰信息指令需要在安全通道中傳輸;當(dāng)所述USB數(shù)據(jù)包中包含的第一預(yù)設(shè)通道指令為所述輸入密鑰信息指令時,所述將所述第一預(yù)設(shè)通道指令通過安全通道發(fā)送給卡片之前,還包括:判斷密鑰信息的來源,若來源于卡片則獲取卡片中存儲的密鑰信息,顯示獲取的密鑰信息,當(dāng)接收到用戶確認(rèn)信息時添加獲取的密鑰信息到所述輸入密鑰信息指令中,若來源于鍵盤輸入則獲取用戶輸入的密鑰信息,顯示獲取的密鑰信息,當(dāng)接收到用戶確認(rèn)信息時添加獲取的密鑰信息到所述輸入密鑰信息指令中。
[0026]所述第一預(yù)設(shè)通道指令包括修改用戶數(shù)據(jù)指令;所述修改用戶數(shù)據(jù)指令需要在安全通道中傳輸;當(dāng)所述USB數(shù)據(jù)包中包含的第一預(yù)設(shè)通道指令為所述修改用戶數(shù)據(jù)指令時,所述將所述第一預(yù)設(shè)通道指令通過安全通道發(fā)送給卡片之前,還包括:判斷更新前的PIN和更新后的PIN的來源,當(dāng)更新前的PIN來源于默認(rèn)PIN時,獲取讀卡器中預(yù)置的默認(rèn)PIN,添加獲取的PIN到所述修改用戶數(shù)據(jù)指令中,當(dāng)更新前的PIN來源于用戶輸入時,獲取用戶輸入的PIN,添加獲取的PIN到所述修改用戶數(shù)據(jù)指令中,當(dāng)更新后的PIN來源于默認(rèn)PIN時,獲取讀卡器中預(yù)置的默認(rèn)PIN,添加獲取的PIN到所述修改用戶數(shù)據(jù)指令中,當(dāng)更新后的PIN來源于用戶輸入時,獲取用戶輸入的PIN,添加獲取的PIN到所述修改用戶數(shù)據(jù)指令中。
[0027]所述第一預(yù)設(shè)通道指令包括獲取用戶名稱指令;所述獲取用戶名稱指令不需要在安全通道中傳輸;當(dāng)所述USB數(shù)據(jù)包中包含的第一預(yù)設(shè)通道指令為所述獲取用戶名稱指令時,所述步驟S4中,所述將所述第一預(yù)設(shè)通道指令直接發(fā)送給卡片之后,還包括:顯示卡片返回的用戶名稱。
[0028]本發(fā)明提供的一種安全讀卡器,其基本實(shí)施過程為:所述安全讀卡器包括初始化模塊和功能模塊,所述初始化模塊與所述功能模塊相連,所述初始化模塊用于在所述安全讀卡器上電后進(jìn)行初始化,使能總中斷,以及進(jìn)行USB枚舉,所述功能模塊用于在所述初始化模塊完成USB枚舉后執(zhí)行主循環(huán)流程;
[0029]所述功能模塊具體包括:
[0030]數(shù)據(jù)包接收判斷單元,用于判斷是否接收到上位機(jī)發(fā)送的USB數(shù)據(jù)包;
[0031]指令類型判斷單元,用于當(dāng)所述數(shù)據(jù)包接收判斷單元判斷出接收到上位機(jī)發(fā)送的USB數(shù)據(jù)包時,根據(jù)所述USB數(shù)據(jù)包中的預(yù)設(shè)字節(jié)判斷所述USB數(shù)據(jù)包中包含的指令的類型;
[0032]安全傳輸標(biāo)識判斷單元,用于當(dāng)所述指令類型判斷單元判斷出所述USB數(shù)據(jù)包中包含的指令為第一預(yù)設(shè)通道指令時,根據(jù)所述USB數(shù)據(jù)包中的預(yù)設(shè)標(biāo)識判斷所述第一預(yù)設(shè)通道指令是否需要在安全通道中傳輸;
[0033]安全通道檢查單元,用于當(dāng)所述安全傳輸標(biāo)識判斷單元判斷出所述第一預(yù)設(shè)通道指令需要在安全通道中傳輸時,檢查安全通道是否已建立;
[0034]安全通道建立單元,用于當(dāng)所述安全通道檢查單元檢查到安全通道未建立時,建立與卡片之間的安全通道;
[0035]安全傳輸單元,用于當(dāng)所述安全通道檢查單元檢查到安全通道已建立時,或者當(dāng)所述安全通道建立單元建立與卡片之間的安全通道之后,將所述第一預(yù)設(shè)通道指令通過安全通道發(fā)送給卡片,接收卡片的返回結(jié)果;
[0036]直接傳輸單元,用于當(dāng)所述安全傳輸標(biāo)識判斷單元判斷出所述第一預(yù)設(shè)通道指令不需要在安全通道中傳輸時,將所述第一預(yù)設(shè)通道指令直接發(fā)送給卡片,接收卡片的返回結(jié)果;
[0037]上報單元,用于根據(jù)所述安全傳輸單元和所述直接傳輸單元接收到的卡片的返回結(jié)果設(shè)置返回數(shù)據(jù)和返回狀態(tài),并將返回數(shù)據(jù)和返回狀態(tài)返回給所述上位機(jī);
[0038]常規(guī)操作執(zhí)行單元,用于當(dāng)所述指令類