本發(fā)明屬于信息安全領(lǐng)域,特別是涉及到對系統(tǒng)內(nèi)或系統(tǒng)間的數(shù)據(jù)機密性的技術(shù)。
背景技術(shù):
分組密碼具有加密速度快、安全性高、易于標準化等特點,特別是在網(wǎng)絡(luò)日趨普及的當(dāng)今,更是成為確保敏感數(shù)據(jù)機密性的一種主流加解密方法,因而廣泛應(yīng)用于數(shù)據(jù)的安全傳輸與保密存儲等多個應(yīng)用場合中。但是現(xiàn)有的分組密碼仍有一個共同的缺陷,即,分析者可利用被加密分組只有有限的幾個長度尺寸這一特點,將枚舉分組長度尺寸與暴力破解相結(jié)合就有可能破解出明文。本發(fā)明提出了一種暴力方法不可能破解的分組密碼。
技術(shù)實現(xiàn)要素:
本發(fā)明的目的是提供交疊分組的數(shù)據(jù)加解密方法,該交疊分組的數(shù)據(jù)加解密方法是為了解決現(xiàn)有分組密碼輸出的密文可能被暴力破解的問題。采用分組交疊的方式對各個明文分組進行兩層加密,包括:(1)對兩兩明文分組加密形成第1層密文分組;(2)以壓蓋邊界的方式對第1層密文分組進行加密形成第2層密文分組,并將第2層密文分組作為最終的數(shù)據(jù)密文。
本發(fā)明的技術(shù)解決方案是采用交疊的方法對數(shù)據(jù)明文中的各分組進行兩層的加密,其步驟如下;
(1)對兩兩明文分組加密形成第1層密文分組;
(2)以壓蓋邊界的方式對第1層密文分組進行加密形成第2層密文分組,并將第2層密文分組作為最終的數(shù)據(jù)密文。
對以上交疊的方法對數(shù)據(jù)明文中的各分組進行兩層的加密步驟如下:
(1)數(shù)據(jù)的加解密雙方事先共享兩種已有的對稱加密算法以及加解密相關(guān)素材;
(2)按單長分組長度將數(shù)據(jù)明文劃分成若干個定長的分組;
(3)加密方對兩兩明文分組實施聯(lián)合加密,生成第1層密文分組;
(4)加密方以壓蓋分組邊界的方式對兩兩第1層密文分組實施聯(lián)合加密,生成第2層密文分組并作為最終的密文;
(5)解密方對兩兩第2層密文分組實施聯(lián)合解密,生成第1層密文分組;
(6)解密方對兩兩第1層密文分組實施聯(lián)合解密,將解密結(jié)果作為最終的數(shù)據(jù)明文。
對以上步驟(1)中,選擇des、3des、idea、aes、rc5、blowfish、或者rijadeal。
對以上步驟(2)中,“壓蓋”是指對兩個相鄰明文分組實施如下操作:對前一個分組的后一半內(nèi)容和后一個分組的前一半內(nèi)容進行聯(lián)合加密從而生成一個第1層密文分組,或者,對兩個相鄰的第1層密文分組實施如下操作:對前一個分組的后一半內(nèi)容和后一個分組的前一半內(nèi)容進行聯(lián)合加密從而生成一個第2層密文分組。
對以上步驟(1)中,所需的加解密素材類型有多個,包括鏈接操作模式、初始向量以及對稱密鑰,使用本方法前,加解密雙方要選擇一種已有方法來共享所需的加解密素材。
對以上步驟(2)中,可將單長分組的長度可以定義為32位、64位或128位,對應(yīng)的倍長分組長度則為64位、128位或256位。
對以上步驟(3)中,加密方對兩個相鄰的明文分組實施聯(lián)合加密,生成一個第1層密文分組,對后續(xù)明文分組也按此法操作直至所有明文被加密。
對以上步驟(4)中,加密方按照如下方式對兩個相鄰的第1層密文分組實施加密從而生成一個第2層的密文分組:使得該第2層密文分組壓蓋第1層兩個密文分組之間的邊界,其結(jié)果,第2層密文分組的中點對準第1層兩個密文分組的邊界。
對以上步驟(5)中,解密方將兩個相鄰的第2層密文分組實施聯(lián)合解密,生成一個第1層密文分組,對后續(xù)的第2層密文分組也按此法操作直至所有第2層密文分組被解密。
對以上步驟(6)中,解密方將兩個相鄰的第1層密文分組實施聯(lián)合解密,生成一個明文分組,對后續(xù)的第1層密文分組也按此法操作直至所有第1層密文分組被解密。
下文從使用前提、概念符號、核心方法、方法總結(jié)四個方面說明本發(fā)明。
1、使用前提
(1)本發(fā)明是一個復(fù)合型的分組加密算法,使用兩種現(xiàn)有的針對單長分組與倍長分組的密碼算法(單長分組與倍長分組的含義見概念符號一節(jié))。
(2)加密方與解密方事先通過安全的通道共享兩個密鑰ks與kd,其中ks與kd為單長分組與倍長分組的密鑰。
(3)加密方與解密方事先通過安全的通道共享兩個初始向量ivs與ivd,其中ivs與ivd為單長分組與倍長分組的初始向量。
(4)加密方與解密方事先約定一種密文分組之間的鏈接操作模式。
(5)使用本發(fā)明時,數(shù)據(jù)明文的最小長度為64位。當(dāng)數(shù)據(jù)明文長度為64位時,對應(yīng)的單長分組與倍長分組的長度分別為32位與64位。
(6)當(dāng)數(shù)據(jù)明文的長度不是單長分組長度的整數(shù)倍時,應(yīng)當(dāng)采用加解密雙方約定好的填充方法對明文進行填充,使填充后的數(shù)據(jù)明文長度等于單長分組的倍數(shù)。
2、概念符號
(1)概念
分組尺寸:本發(fā)明采用兩層加密的方法,其中第2層加密生成的每一個密文分組要壓蓋第1層兩個相鄰密文分組的邊界,從而實現(xiàn)高強度的機密性。兩層與交疊加密需要引入兩種分組長度,即單長分組與倍長分組。如果單長分組為m比特,則倍長分組為2m比特。
層:本發(fā)明需要進行兩層加密,相應(yīng)地將數(shù)據(jù)分組分為三個層,即第0層分組、第1層密文分組、第2組密文分組。對所有第0層明文分組加密后生成的分組稱為第1層密文分組,對所有第1層密文分組加密后生成的密文分組稱為第2層密文分組。
交疊:指的是第2層密文分組壓蓋第1層兩個密文分組之間的邊界,具體地,使得第2層密文分組的中點對準第1層兩個密文分組的邊界。
(2)符號
表1符號約定表
(3)核心方法
本發(fā)明包含確定分組尺寸長度與密碼算法、確定密文分組鏈接操作模式、兩層分組加密、兩層分組解密四個核心內(nèi)容。
①確定單長分組與倍長分組的尺寸長度以及相應(yīng)的密碼算法。
單長分組可以選擇32位、64位或128位。當(dāng)單長分組尺寸確定后,則倍長分組的尺寸也就確定了,即倍長分組的尺寸是單長分組的兩倍。對單長分組與倍長分組可以選擇任意一種滿足需求的密碼算法,如表2所示。
例如,當(dāng)單長/倍長分組尺寸為64/128時,可選擇des/aes分別作為單長/倍長分組的密碼算法。若單長/倍長分組尺寸為128/256,可選擇aes/rijadeal分別作為單長/倍長分組的密碼算法。
下文以單長分組為64位,而倍長分組是128位為例進行說明。
表2密碼算法選擇表
②密文分組鏈接操作模式
本發(fā)明可采用cbc、ofb、cfb、ctr中任意一種分組鏈接操作模式。由于存在兩種不同長度的密文分組,故需要對相鄰但長度不同的兩個密文分組的鏈接向量進行匹配變換。下文以cbc操作模式為例,對兩個密文分組的鏈接向量的匹配變換進行說明,具體分為兩種情況:
情況1:單長分組在先,倍長分組在后。
此時采用“簡單擴展”的方法將在先的單長密文分組擴展至倍長分組,并作為后面倍長分組加解密所需的鏈接向量
情況2:倍長分組在先,單長分組在后。
此時采用“簡單壓縮”的方法將在先的倍長密文分組壓縮至單長分組,并作為后面單長分組加解密所需的鏈接向量
③兩層分組加密
將數(shù)據(jù)明文按單長分組長度劃分后生成的明文分組序列記為p=<p0,p1,p2,…>,其中pi是明文序列中第i個單長明文分組。對p的加密過程分為兩層。首先使用密鑰k=(ks,kd)和初始向量iv=(ivs,ivd)的對第0層明文分組序列p進行第1層加密,生成第1層密文分組序列
在對明文進行分組之后,明文分組的個數(shù)分為偶數(shù)與奇數(shù)兩種情況,下面對這兩種情況分別進行說明。
情況1——明文分組的個數(shù)為偶數(shù)
設(shè)明文分組序列為p=<p0,p1,p2,…,pn-1>,此時n為偶數(shù)。對該明文序列兩兩分組進行第一次加密后,生成了第1層密文分組序列
第1層的加密是針對明文分組,具體地,將兩個相鄰的單長明文分組<pj,pj+1|j=0,2,4,…,n-2>作為倍長分組密碼算法的輸入,最終得到第1層密文分組序列
對后續(xù)明文分組仿照此法操作,得到相應(yīng)的第1層密文分組
第2層加密采用交疊分組的方式,具體地,先將
對后續(xù)明文分組仿照此法操作,得到相應(yīng)的第2層密文分組
1≤i≤n/2-1
第2層的最后一個密分分組
如果將本發(fā)明的方法用于通信場合,可采用“隨加隨發(fā)”方式,具體地,只要生成第2層密文的條件成立,就立即生成該第2層密文分組,然后立即向解密方發(fā)送該密第2層密文。該方式能顯著提高數(shù)據(jù)發(fā)送的效率。
情況2——明文分組的個數(shù)為奇數(shù)
設(shè)明文分組序列為p=<p0,p1,p2,…,pn-1,pn>,此時n為偶數(shù)。對該明文序列兩兩分組進行第一次加密后,生成了第1層密文分組序列
第1層的加密是針對明文分組,具體地,將兩個相鄰的單長明文分組<pj,pj+1|j=0,2,4,…,n-2>作為倍長分組密碼算法的輸入,最終得到第1層密文分組序列
對后續(xù)明文分組仿照此法操作,得到相應(yīng)的第1層密文分組
第2層加密采用交疊分組的方式,具體地,先將
對后續(xù)明文分組仿照此法操作,得到相應(yīng)的第2層密文分組
其中,
④兩層分組解密
采用本發(fā)明得到的最終密文分組(即第2層密文分組)序列記為
在解密之前,密文分組序列u的第一個分組是單長分組,其后是若干個倍長分組,最后一個分組有單長與倍長兩種不同情況,下面對這兩種情況分別進行說明。
情況1——u的最后一個分組為單長分組
記第1層解密操作后的所有密文分組序列為
記第2層解密操作后的單長分組序列為q=<q0,q1,q2,…,qn-1>,其中的每個qi按如下方法計算:
由于以上兩層解密都是針對倍長分組,因此,初始向量與各個鏈接向量的長度都等于倍長分組的長度,不存在鏈接向量長度的切換問題。
情況2——u的最后一個分組為倍長分組
記第1層解密操作后的所有密文分組序列為
由于以上解密都是針對倍長分組進行解密,因此,不存在鏈接向量長度的切換問題。
u中最后一個密文分組
由于
記第2層解密操作后的單長分組序列為q=<q0,q1,q2,…qn>,其中的每個qi按如下方法計算:
由于qn是單長分組,因此,計算qn時所需的鏈接向量長度也是單長分組的長度,因此,需要進行鏈接向量長度切換。
(4)方法總結(jié)
①本發(fā)明特點。
本發(fā)明具有以下三個特點。
第一,對分組采用了兩層交疊加密,其結(jié)果是,在不知曉本方法前提下,即使密碼分析者獲得了加解密所得到的密鑰k=(ks,kd),也只能通過暴力方法得到第1層密文分組,不可能得到最終的數(shù)據(jù)明文。
第二,采用了隨加隨發(fā)方式,其結(jié)果是,提高了通信的效率。
③適用場合
本發(fā)明適用于對數(shù)據(jù)具有以下機密性要求的場合:
第一,強安全性的保密通信。例如總部與分部之間的安全通信、總部與合作伙伴之間的安全通信,當(dāng)然也包括個人與個人之間通過安全通道的通信。
第二,強安全性的敏感數(shù)據(jù)存儲。例如u盤加密、硬盤加密、云存儲加密等數(shù)據(jù)存儲設(shè)備安全。
④實現(xiàn)提示
當(dāng)所選擇的單長分組與倍長分組密碼算法有多種長度的密鑰時,應(yīng)盡可能選擇較長的密鑰作為本發(fā)明的兩個密鑰ks與kd,以加強安全性。
其次,兩個密鑰ks與kd和兩個初始向量ivs與ivd必須通過安全通道使雙方共享。然而通過安全通道共享的方法不屬于本發(fā)明的內(nèi)容。
發(fā)明特點
第一,對分組采用了兩層交疊加密,其結(jié)果是,在不知曉本方法前提下,即使密碼分析者得到加解密的密鑰,通過暴力破解也不可能得到最終的數(shù)據(jù)明文。
第二,采用了隨加隨發(fā)方式,其結(jié)果是,提高了通信的效率。
附圖說明
圖1為本發(fā)明的安全模型;
圖2為加密流程圖;
圖3為解密流程圖。
具體實施方式
1、加密流程與實現(xiàn)方法
具體的加密過程如圖2所示,對于明文分組p,以單長分組的長度尺寸為單位計算其分組個數(shù)n,并初始化三個變量,i=0,c存放第1層的密文分組,c存放第2層的密文分組。其中變量i是用于密文分組的數(shù)組的下標變量,因為數(shù)組的第一個元素以及第一個分組的編號都是從0開始,所以給其初始值為0。數(shù)組p為存放明文分組的數(shù)組,數(shù)組里的每一元素都存放明文的一個單長的分組,而c則存放第1層的密文分組的數(shù)組,每一個元素存放第1層密文的一個密文分組,c則存放第2層的密文分組的數(shù)組,每一個元素存放第2層密文的一個密文分組。
整個加密過程不管是單長分組的個數(shù)是奇數(shù),還是偶數(shù),前面部分的分組加密過程是一樣的,只有最后一次加密有差異,因此,可以把整個的加密過程分成兩個部分。通過i來進行區(qū)分,如果i<n/2,則進入的是前一部分分組的加密,否則就進入最后的明文分組加密。
先處理p0與p1兩個明文分組的加密,首先需要判斷i是否為0,判斷的條件為真則需要加密p0與p1兩個明文分組,具體的過程為,
然后再進行第2層的密文加密,算出
當(dāng)i<n/2的所有單長明文分組的加密都是一樣的,其中第2i個與第2i+1個單長的明文分組加密具體操作為:首先進行第1層的密文加密,第1層后續(xù)的密文分組
第2層的加密密文
當(dāng)變量i=n/2時,此時就進入了最后一個單長分組或最后一次的加密,其過程為先用分組的個數(shù)n是否能被2整除,如果能整除,說明現(xiàn)在加密的是偶數(shù)個單長明文分組,否則,說明是奇數(shù)個單長明文分組。如果為偶數(shù)個分組,則使用單長加密算法計算
如果是奇數(shù)單長分組,最后一個第1層密文分組
而第2層的最后為
從而完成所有的加密操作。
2、解密流程與實現(xiàn)方法
整個解密的流程如圖3所示,首先初始化幾個變量:i、ui、ui、qi。變量i是分組的序號,變量ui為接收到的對方的密文,ui存放第一次解密的密文,qi存放的是解密之后的明文。
首先判斷i是否小于n/2,如果條件為真,則收到對方發(fā)過來的密文不是最后一次的密文分組,否則就是最后一次加密的密文分組。
剛開始解密時,i是為0,所以首先要解密的是收到前兩個密文分組,從收到的前面兩個密文分組中解密出
其中ivd為倍長解密算法的初始向量。后續(xù)的解密是一樣的,直到i<n/2,即:
變量i自增至n/2時,也就意味著最后解密操作,首先判斷接收到的密文u的分組長度是否為128位,條件為真則說明是奇數(shù)個單長分組進行解密,否則為偶數(shù)個單長分組的解密。如果是奇數(shù)個單長分組的解密,則先解出密文分組
再通過
如果是偶數(shù)個單長分組的解密,則先進行第一次解密操作,即:
再通過
從而完成整個的解密操作。