本發(fā)明涉及基于加密卡的計(jì)算機(jī)數(shù)據(jù)加解密技術(shù),具體涉及一種基于多卡冗余校驗(yàn)的數(shù)據(jù)加解密調(diào)度方法。
背景技術(shù):
在政府、軍隊(duì)、有保密要求的企業(yè)或組織內(nèi)部有對(duì)重要數(shù)據(jù)進(jìn)行加密的需求。出于保密性和性能的考慮,現(xiàn)有數(shù)據(jù)加密系統(tǒng)普遍使用硬件加解密。加密硬件為pci卡的形式(以下簡(jiǎn)稱(chēng)加密卡)。單塊加密卡的加解密速度是有上限的。對(duì)于單臺(tái)主機(jī)來(lái)說(shuō),有時(shí)單塊加密卡并不能在速度上滿足處理大量數(shù)據(jù)的需要,因此可同時(shí)插入多塊加密卡分擔(dān)任務(wù)。因?yàn)榧咏饷苊總€(gè)數(shù)據(jù)塊的任務(wù)彼此獨(dú)立不相互依賴(lài),對(duì)于多卡環(huán)境,可簡(jiǎn)單的把加解密數(shù)據(jù)塊任務(wù)平均分配到每個(gè)加密卡上,這也是目前使用的加密卡調(diào)度算法。
每個(gè)加密卡有多個(gè)端口,每個(gè)端口可處理一個(gè)加解密數(shù)據(jù)任務(wù),也就是說(shuō)一個(gè)有n個(gè)端口的正常狀態(tài)下的加密卡可同時(shí)進(jìn)行n個(gè)數(shù)據(jù)的加解密。
在實(shí)際使用過(guò)程中,加密卡可能出現(xiàn)故障,導(dǎo)致加解密無(wú)法進(jìn)行。對(duì)于單卡系統(tǒng)來(lái)說(shuō),由于加密卡故障為單點(diǎn)故障,從而導(dǎo)致整個(gè)系統(tǒng)故障。對(duì)于多卡系統(tǒng),當(dāng)一部分加密卡出現(xiàn)故障時(shí),在使用目前調(diào)度算法的情況下,當(dāng)任務(wù)分配到故障加密卡上時(shí),會(huì)導(dǎo)致該任務(wù)失敗,總體看來(lái)會(huì)有部分任務(wù)失敗。因此即使多卡系統(tǒng)也無(wú)法冗余加密卡故障。
在實(shí)際的加密卡加解密過(guò)程中,發(fā)現(xiàn)有時(shí)在密鑰和數(shù)據(jù)正確的情況下,會(huì)出現(xiàn)錯(cuò)誤的結(jié)果。這種錯(cuò)誤具有隨機(jī)性,表現(xiàn)為對(duì)于相同的密鑰和數(shù)據(jù),在同一加密卡上重復(fù)加密兩次,可能會(huì)出現(xiàn)不同的結(jié)果,考慮結(jié)果的惟一性,必然有一次產(chǎn)生了錯(cuò)誤的結(jié)果。這種情況通常不被認(rèn)為是加密卡故障,但是如何保證數(shù)據(jù)的正確性,仍然是一項(xiàng)亟待解決的技術(shù)問(wèn)題。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明要解決的技術(shù)問(wèn)題:針對(duì)現(xiàn)有技術(shù)的上述問(wèn)題,提供一種考慮到了加密卡的數(shù)據(jù)錯(cuò)誤及調(diào)用錯(cuò)誤等情況,使用特定調(diào)度算法在多卡環(huán)境下建立冗余,最大限度提高了多加密卡并行性能和系統(tǒng)可用性,降低了數(shù)據(jù)錯(cuò)誤率的基于多卡冗余校驗(yàn)的數(shù)據(jù)加解密調(diào)度方法。
為了解決上述技術(shù)問(wèn)題,本發(fā)明采用的技術(shù)方案為:
一種基于多卡冗余校驗(yàn)的數(shù)據(jù)加解密調(diào)度方法,其特征在于實(shí)施步驟包括:
1)預(yù)先維護(hù)一個(gè)加密卡狀態(tài)列表、為每一個(gè)加密卡維護(hù)一個(gè)端口狀態(tài)列表,所述加密卡狀態(tài)列表包括每一個(gè)加密卡的狀態(tài),所述加密卡的狀態(tài)包括正常、故障和飽和三種,所述端口狀態(tài)列表包括加密卡的每一個(gè)端口的狀態(tài),所述端口的狀態(tài)包括使用中和未使用兩種;初始化用于存放加解密任務(wù)的等待隊(duì)列;當(dāng)收到當(dāng)前加解密任務(wù)時(shí),跳轉(zhuǎn)執(zhí)行步驟2);
2)將當(dāng)前加解密任務(wù)分配到兩個(gè)正常狀態(tài)的加密卡中的兩個(gè)未使用的目標(biāo)端口進(jìn)行指定的加密或解密處理,且在兩個(gè)目標(biāo)端口進(jìn)行指定的加密或解密處理的輸出一致的情況下判定當(dāng)前加解密任務(wù)執(zhí)行成功,調(diào)用目標(biāo)端口過(guò)程中將目標(biāo)端口標(biāo)記為使用中、且在調(diào)用目標(biāo)端口完畢后恢復(fù)端口為未使用,如果加密卡端口全在使用中且標(biāo)記該加密卡為飽和,且根據(jù)目標(biāo)端口的調(diào)用成功情況標(biāo)記加密卡的狀態(tài)為正?;蚬收蠣顟B(tài)。
2.根據(jù)權(quán)利要求1所述的基于多卡冗余校驗(yàn)的數(shù)據(jù)加解密調(diào)度方法,其特征在于,步驟2)的詳細(xì)步驟包括:
2.1)判斷等待隊(duì)列是否為空,如果等待隊(duì)列為空則直接跳轉(zhuǎn)執(zhí)行步驟2.2);否則,將當(dāng)前加解密任務(wù)加入等待隊(duì)列,且在等待隊(duì)列中位于當(dāng)前加解密任務(wù)前面的任務(wù)全部完成后,跳轉(zhuǎn)執(zhí)行步驟2.2);
2.2)根據(jù)加密卡狀態(tài)列表嘗試獲取正常狀態(tài)的兩個(gè)加密卡,如果獲取成功,則跳轉(zhuǎn)執(zhí)行步驟2.3);否則,將加密卡總數(shù)量減去處于故障狀態(tài)的加密卡數(shù)量得到可用加密卡數(shù)量,如果可用加密卡數(shù)量小于二則返回錯(cuò)誤并退出,如果可用加密卡數(shù)量大于等于二,則跳轉(zhuǎn)執(zhí)行步驟2.1);
2.3)根據(jù)兩個(gè)加密卡的端口狀態(tài)列表,從所述兩個(gè)加密卡中分別獲取一個(gè)未使用的端口,并置該端口狀態(tài)為已使用,如果此時(shí)加密卡的所有端口均被使用,則將加密卡狀態(tài)列表中該加密卡的相關(guān)狀態(tài)置為飽和,最終得到分屬于不同加密卡的兩個(gè)端口作為兩個(gè)目標(biāo)端口;
2.4)將當(dāng)前加解密任務(wù)分別調(diào)用兩個(gè)目標(biāo)端口進(jìn)行指定的加密或解密處理得到兩個(gè)輸出;如果兩個(gè)目標(biāo)端口均調(diào)用正常、且兩個(gè)輸出相同則返回當(dāng)前加解密任務(wù)執(zhí)行成功;如果兩個(gè)目標(biāo)端口均調(diào)用正常、且兩個(gè)輸出不同,則返回當(dāng)前加解密任務(wù)執(zhí)行校驗(yàn)錯(cuò)誤;如果任意目標(biāo)端口調(diào)用出錯(cuò),則將加密卡狀態(tài)列表中調(diào)用出錯(cuò)的目標(biāo)端口對(duì)應(yīng)加密卡的相關(guān)狀態(tài)置為故障,返回當(dāng)前加解密任務(wù)執(zhí)行錯(cuò)誤;
2.5)針對(duì)調(diào)用正常的目標(biāo)端口對(duì)應(yīng)的加密卡,將對(duì)應(yīng)端口狀態(tài)列表中的目標(biāo)端口的狀態(tài)置為未使用,且將加密卡狀態(tài)列表中的對(duì)應(yīng)狀態(tài)置為正常。
本發(fā)明基于多卡冗余校驗(yàn)的數(shù)據(jù)加解密調(diào)度方法具有下述優(yōu)點(diǎn):
1、本發(fā)明方法預(yù)先維護(hù)一個(gè)加密卡狀態(tài)列表、為每一個(gè)加密卡維護(hù)一個(gè)端口狀態(tài)列表,加密卡的狀態(tài)包括正常、故障和飽和三種,端口狀態(tài)包括使用中和未使用兩種;初始化用于存放加解密任務(wù)的等待隊(duì)列;當(dāng)收到當(dāng)前加解密任務(wù)時(shí),將當(dāng)前加解密任務(wù)分配到兩個(gè)正常狀態(tài)的加密卡中的兩個(gè)未使用的目標(biāo)端口進(jìn)行指定的加密或解密處理,輸出一致的情況則判定當(dāng)前加解密任務(wù)執(zhí)行成功,在調(diào)用過(guò)程中更新維護(hù)加密卡狀態(tài)列表和端口狀態(tài)列表,本發(fā)明考慮到了加密卡的數(shù)據(jù)錯(cuò)誤及調(diào)用錯(cuò)誤等情況,使用特定調(diào)度算法在多卡環(huán)境下建立冗余,最大限度提高了多加密卡并行性能和系統(tǒng)可用性,降低了數(shù)據(jù)錯(cuò)誤率。
2、本發(fā)明能夠解決現(xiàn)有采用多加密卡環(huán)境的數(shù)據(jù)加解密系統(tǒng)存在加密卡故障導(dǎo)致系統(tǒng)故障,以及加解密小概率產(chǎn)生錯(cuò)誤結(jié)果的問(wèn)題。
附圖說(shuō)明
圖1為本發(fā)明實(shí)施例方法的應(yīng)用環(huán)境示意圖。
圖2為本發(fā)明實(shí)施例方法的流程示意圖。
圖3為本發(fā)明實(shí)施例中的加密卡狀態(tài)列表示意圖。
圖4為本發(fā)明實(shí)施例中的端口狀態(tài)列表示意圖。
圖5為本發(fā)明實(shí)施例中步驟2)的詳細(xì)流程示意圖。
圖6為本發(fā)明實(shí)施例中的等待隊(duì)列示意圖。
具體實(shí)施方式
如圖1所示,本實(shí)施例中具體是包含4塊加密卡的linux操作系統(tǒng)為例,對(duì)本發(fā)明基于多卡冗余校驗(yàn)的數(shù)據(jù)加解密調(diào)度方法進(jìn)行進(jìn)一度的詳細(xì)說(shuō)明。參見(jiàn)圖1,該包含4塊加密卡的linux操作系統(tǒng)文件系統(tǒng)驅(qū)動(dòng)調(diào)度算法模塊,文件系統(tǒng)驅(qū)動(dòng)為調(diào)度算法模塊的調(diào)用者,調(diào)度算法模塊則為加密卡驅(qū)動(dòng)的調(diào)用者,加密卡驅(qū)動(dòng)為原始的加密卡硬件接口,要求調(diào)用者指定卡號(hào)和端口號(hào),調(diào)度算法模塊為采用本實(shí)施例基于多卡冗余校驗(yàn)的數(shù)據(jù)加解密調(diào)度方法的實(shí)例,對(duì)上層調(diào)用者屏蔽了加密卡的細(xì)節(jié),提供了單一的加解密接口。
如圖2所示,本實(shí)施例基于多卡冗余校驗(yàn)的數(shù)據(jù)加解密調(diào)度方法的實(shí)施步驟包括:
1)預(yù)先維護(hù)一個(gè)加密卡狀態(tài)列表(如圖3所示,其中卡1、卡2、卡3……分別不同的加密卡)、為每一個(gè)加密卡維護(hù)一個(gè)端口狀態(tài)列表(如圖4所示,其中端口1、端口2、端口3……分別同一加密卡的不同端口),加密卡狀態(tài)列表包括每一個(gè)加密卡的狀態(tài),加密卡的狀態(tài)包括正常、故障和飽和三種,端口狀態(tài)列表包括加密卡的每一個(gè)端口的狀態(tài),端口的狀態(tài)包括使用中和未使用兩種;初始化用于存放加解密任務(wù)的等待隊(duì)列(如圖5所示,其中任務(wù)1~任務(wù)n表示等待隊(duì)列中緩存的任務(wù));當(dāng)收到當(dāng)前加解密任務(wù)時(shí),跳轉(zhuǎn)執(zhí)行步驟2);
2)將當(dāng)前加解密任務(wù)分配到兩個(gè)正常狀態(tài)的加密卡中的兩個(gè)未使用的目標(biāo)端口進(jìn)行指定的加密或解密處理,且在兩個(gè)目標(biāo)端口進(jìn)行指定的加密或解密處理的輸出一致的情況下判定當(dāng)前加解密任務(wù)執(zhí)行成功,調(diào)用目標(biāo)端口過(guò)程中將目標(biāo)端口標(biāo)記為使用中、且在調(diào)用目標(biāo)端口完畢后恢復(fù)端口為未使用,如果加密卡端口全在使用中且標(biāo)記該加密卡為飽和,且根據(jù)目標(biāo)端口的調(diào)用成功情況標(biāo)記加密卡的狀態(tài)為正?;蚬收蠣顟B(tài)。
如圖6所示,步驟2)的詳細(xì)步驟包括:
2.1)判斷等待隊(duì)列是否為空,如果等待隊(duì)列為空則直接跳轉(zhuǎn)執(zhí)行步驟2.2);否則,將當(dāng)前加解密任務(wù)加入等待隊(duì)列,且在等待隊(duì)列中位于當(dāng)前加解密任務(wù)前面的任務(wù)全部完成后,跳轉(zhuǎn)執(zhí)行步驟2.2);本實(shí)施例中,等待隊(duì)列采用fifo的方式進(jìn)行調(diào)度,如果等待隊(duì)列非空,則將當(dāng)前加解密任務(wù)加入等待隊(duì)列,直到前面的任務(wù)都完成才能夠?qū)?dāng)前加解密任務(wù)進(jìn)行調(diào)度處理,這樣做的目的是為了提供qos(服務(wù)質(zhì)量),防止的等待隊(duì)列中的任務(wù)可能長(zhǎng)時(shí)間得不到處理;
2.2)根據(jù)加密卡狀態(tài)列表嘗試獲取正常狀態(tài)的兩個(gè)加密卡,如果獲取成功,則跳轉(zhuǎn)執(zhí)行步驟2.3);否則,將加密卡總數(shù)量減去處于故障狀態(tài)的加密卡數(shù)量得到可用加密卡數(shù)量,如果可用加密卡數(shù)量小于二則返回錯(cuò)誤并退出,如果可用加密卡數(shù)量大于等于二,則跳轉(zhuǎn)執(zhí)行步驟2.1);
2.3)根據(jù)兩個(gè)加密卡的端口狀態(tài)列表,從兩個(gè)加密卡中分別獲取一個(gè)未使用的端口,并置該端口狀態(tài)為已使用,如果此時(shí)加密卡的所有端口均被使用,則將加密卡狀態(tài)列表中該加密卡的相關(guān)狀態(tài)置為飽和,最終得到分屬于不同加密卡的兩個(gè)端口作為兩個(gè)目標(biāo)端口;
2.4)將當(dāng)前加解密任務(wù)分別調(diào)用兩個(gè)目標(biāo)端口進(jìn)行指定的加密或解密處理得到兩個(gè)輸出;如果兩個(gè)目標(biāo)端口均調(diào)用正常、且兩個(gè)輸出相同則返回當(dāng)前加解密任務(wù)執(zhí)行成功;如果兩個(gè)目標(biāo)端口均調(diào)用正常、且兩個(gè)輸出不同,則返回當(dāng)前加解密任務(wù)執(zhí)行校驗(yàn)錯(cuò)誤;如果任意目標(biāo)端口調(diào)用出錯(cuò),則將加密卡狀態(tài)列表中調(diào)用出錯(cuò)的目標(biāo)端口對(duì)應(yīng)加密卡的相關(guān)狀態(tài)置為故障,返回當(dāng)前加解密任務(wù)執(zhí)行錯(cuò)誤;
2.5)針對(duì)調(diào)用正常的目標(biāo)端口對(duì)應(yīng)的加密卡,將對(duì)應(yīng)端口狀態(tài)列表中的目標(biāo)端口的狀態(tài)置為未使用,且將加密卡狀態(tài)列表中的對(duì)應(yīng)狀態(tài)置為正常。
以上所述僅是本發(fā)明的優(yōu)選實(shí)施方式,本發(fā)明的保護(hù)范圍并不僅局限于上述實(shí)施例,凡屬于本發(fā)明思路下的技術(shù)方案均屬于本發(fā)明的保護(hù)范圍。應(yīng)當(dāng)指出,對(duì)于本技術(shù)領(lǐng)域的普通技術(shù)人員來(lái)說(shuō),在不脫離本發(fā)明原理前提下的若干改進(jìn)和潤(rùn)飾,這些改進(jìn)和潤(rùn)飾也應(yīng)視為本發(fā)明的保護(hù)范圍。