專利名稱:高效散列方法
技術(shù)領(lǐng)域:
本發(fā)明涉及數(shù)據(jù)操作,更具體地,本發(fā)明涉及一種高效的把長(zhǎng)的數(shù)據(jù)串表示成短數(shù)據(jù)串的技術(shù)。
散列是一種把長(zhǎng)度較長(zhǎng)的數(shù)據(jù)表示成長(zhǎng)度較短的數(shù)據(jù)的技術(shù)。該技術(shù)在于,二個(gè)不同的長(zhǎng)度較長(zhǎng)的數(shù)據(jù)代表一個(gè)相同的長(zhǎng)度較短的數(shù)據(jù)的概率相對(duì)的小。這種特性被稱為碰撞概率。
Pr(h(m1)=h(m2))≤ε (1)ϵ≥12l]]>碰撞概率由式(1)表示,該式表明在串x1上執(zhí)行散列函數(shù)“h”的結(jié)果和在串x2上執(zhí)行散列函數(shù)“h”的結(jié)果相等的概率少于或等于
或ε。
未散列的較長(zhǎng)串中包含的位數(shù)為“n”,并稱為域(domain)。較短的或散列后的串的位數(shù)為l,并通常稱為散列函數(shù)的距(range)。滿足式(1)的散列函數(shù)通常稱為泛ε的。
Pr(h(m1)-h(m2)=Δ)≤ε (2)ϵ≥12l]]>另一個(gè)和散列函數(shù)相關(guān)的典型特性由式(2)表示,該式指出散列函數(shù)“h”在串x1上的輸出和散列函數(shù)在串x2上的輸出之間的差等于某預(yù)選量Δ的概率小于或等于
或ε。滿足式(2)的散列函數(shù)通常稱為泛εΔ散列函數(shù)。Pr(h(m1)=c1,h(m2)=c2)≤ϵ2l---(3)]]>ϵ≥12l]]>某些散列函數(shù)還具有由式(3)表示的第三特性。式(3)顯示散列函數(shù)“h”對(duì)輸入串x1的輸出等于預(yù)定的數(shù)c1并且散列函數(shù)“h”對(duì)輸入串x2的輸出等于預(yù)定的數(shù)c2的聯(lián)合概率小于
或ε。滿足式(3)的散列函數(shù)被稱為強(qiáng)泛ε的。滿足式(3)的散列函數(shù)自動(dòng)滿足式(1)和(2)。
許多應(yīng)用中使用散列函數(shù),其中之一是簡(jiǎn)化對(duì)文本串的搜索。在運(yùn)用于文本串搜索時(shí),散列函數(shù)用于縮短被存儲(chǔ)信息的長(zhǎng)度,并且接著把同一散列函數(shù)用于縮短搜索準(zhǔn)則的長(zhǎng)度。然后利用縮短的搜索準(zhǔn)則搜索縮短的被存儲(chǔ)信息,以便更有效地定位所需的信息條。一旦定位該條所需的信息后,可提供和縮短的文本關(guān)聯(lián)的未散列處理的或全長(zhǎng)度的文本。
在無(wú)線通信中還把散列函數(shù)用于消息鑒定。通過(guò)和消息一起發(fā)送標(biāo)記對(duì)消息鑒定,該標(biāo)記是通過(guò)對(duì)消息執(zhí)行加密函數(shù)計(jì)算出的。為消息產(chǎn)生一個(gè)標(biāo)記是計(jì)算密集的。散列函數(shù)用來(lái)把消息縮短成標(biāo)記,從而所需進(jìn)行的加密處理不那么計(jì)算密集。
h(m)=(ma)modp(4)h(m,···,mk)=(Σi=lkmiαi)modp---(5)]]>諸如式(4)表達(dá)的線性散列和式(5)表達(dá)的MMH散列現(xiàn)在被用于把較長(zhǎng)的數(shù)據(jù)或文本的串表示成較短的串,其中二個(gè)不同的長(zhǎng)串產(chǎn)生相同的短串的概率是相對(duì)小的。這些散列函數(shù)需要字?jǐn)?shù)為“w”的一個(gè)密鑰和字?jǐn)?shù)為“w”的要被散列的消息或文本進(jìn)行相乘。結(jié)果是,為了對(duì)某特定的數(shù)據(jù)或文本串執(zhí)行散列需要w2次運(yùn)算。對(duì)于具有許多字的大數(shù)據(jù)或文本串,這造成計(jì)算密集型運(yùn)算。
本發(fā)明提供一種高效散列技術(shù),其用
次運(yùn)算對(duì)“w”個(gè)字長(zhǎng)的串進(jìn)行散列,無(wú)需現(xiàn)有技術(shù)的w2次運(yùn)算。本發(fā)明通過(guò)對(duì)密鑰和被散列的串的之和進(jìn)行平方以代替該密鑰和該串的相乘達(dá)到這種效果。
h(m)=((m+a)2modp)mod2l(6)在本發(fā)明的一種實(shí)施例中,如式(6)所示,通過(guò)對(duì)消息串“m”和密鑰串“a”相加再形成該和的平方對(duì)該消息進(jìn)行散列。在平方運(yùn)算的結(jié)果上執(zhí)行模為“p”的運(yùn)算,并且對(duì)該?!皃”運(yùn)算的結(jié)果執(zhí)行模為2l的運(yùn)算。在該情況下,“m”和“a”的長(zhǎng)度相同,即“n”位長(zhǎng)或“w”字長(zhǎng)。請(qǐng)注意“a”可長(zhǎng)于“n”位,但最好是“n”位。值“l(fā)”代表散列結(jié)果后的縮短串的按位數(shù)計(jì)的長(zhǎng)度,并稱之為“距”。把值“p”選為第一個(gè)大于“2n”的質(zhì)數(shù),其中“n”是消息串“m”的位數(shù)。請(qǐng)注意,式(6)提供一種滿足式(1)和(2)的散列方法,即,式(6)的散列方法是泛Δ的。
h(m)=(((m+a)2+b)modp)mod2l(7)在本發(fā)明的第二實(shí)施例中,提供一種強(qiáng)泛的散列方法。在該情況下,消息串“m”和密鑰“a”相加,接著平方所產(chǎn)生的和。消息串“m”和密鑰“a”都為“w”字長(zhǎng)(各含有“n”個(gè)位)。請(qǐng)注意,密鑰“a”可含有多于“n”個(gè)的位,但“n”為最佳。平方運(yùn)算的結(jié)果和至少為“n”位長(zhǎng)的第二密鑰b相加。如前面參照式(6)討論的那樣,對(duì)平方項(xiàng)和密鑰“b”的和進(jìn)行模為“p”的運(yùn)算。如參照式(6)說(shuō)明的那樣,對(duì)?!皃”運(yùn)算的結(jié)果進(jìn)行模為2l的運(yùn)算。采用這種散列方法提供了一種滿足式(1)、(2)和(3)的強(qiáng)泛散列方法。
在本發(fā)明的再一個(gè)實(shí)施例中,對(duì)“k”個(gè)消息或串進(jìn)行散列以產(chǎn)生單個(gè)較短的串。h(m1,···,mk)=((Σi=1kmi-ai)2)modp)mod2l---(8)]]>式(8)說(shuō)明把各為“w”字長(zhǎng)的“k”個(gè)消息散列以形成單個(gè)較短的串。每個(gè)消息mi和一個(gè)密鑰ai相加,并平方產(chǎn)生的和。然后對(duì)這“k”個(gè)消息相加每個(gè)消息mi的平方運(yùn)算的結(jié)果。對(duì)總和進(jìn)行模為“p”的運(yùn)算。并且對(duì)?!皃”運(yùn)算的結(jié)果進(jìn)行模為“2l”的運(yùn)算。值“p”和“l(fā)”和前面的定義相同。式(8)表達(dá)的散列方法產(chǎn)生滿足式(1)、(2)的泛Δ散列函數(shù)。
圖1是平方散列方法的流程圖;圖2是一種強(qiáng)泛平方散列方法的流程圖;以及圖3是第二種泛Δ平方散列方法的流程圖。
圖1說(shuō)明一種實(shí)現(xiàn)式(6)的平方散列方法的方法。在步驟100輸入輸入串或消息“m”。在步驟102輸入某輸入密鑰“a”。消息或串“m”以及密鑰“a”各為由“w”個(gè)字組成的“n”位長(zhǎng)。密鑰“a”是一個(gè)隨機(jī)或偽隨機(jī)數(shù),可長(zhǎng)于“n”位,但最好為“n”位。在步驟104,產(chǎn)生串“m”和密鑰“a”的和“s”。在步驟106平方和“s”。在步驟108,對(duì)步驟106的結(jié)果進(jìn)行模為“p”的運(yùn)算?!皃”是比2n大的下一個(gè)質(zhì)數(shù);然而“p”可以是更大的質(zhì)數(shù),但它可能降低性能。在步驟110,對(duì)步驟108的結(jié)果進(jìn)行模為2l的運(yùn)算?!發(fā)”是輸出的短消息或串的位數(shù)。在步驟112輸出模2l運(yùn)算的結(jié)果。圖1的處理造成把“n”位的消息或串縮短成“l(fā)”位的消息或串。請(qǐng)注意,如圖1相關(guān)的處理執(zhí)行一種滿足式(1)、(2)的特性的泛εΔ散列函數(shù)。
圖2說(shuō)明一種實(shí)現(xiàn)式(7)描述的強(qiáng)泛散列方法的方法。在步驟140,輸入消息或串“m”。在步驟142輸入密鑰“a”和“b”。消息“m”、密鑰“a”及“b”各為具有“w”個(gè)字的“n”位長(zhǎng)。在步驟144,產(chǎn)生消息“m”和密鑰“a”的和并作為和“s”存儲(chǔ)。在步驟146把和“s”的平方存儲(chǔ)成項(xiàng)“SQ”。在步驟148,產(chǎn)生項(xiàng)“SQ”和密鑰“b”的和。在步驟150,對(duì)步驟148產(chǎn)生的結(jié)果進(jìn)行模為“p”的運(yùn)算。再次,“p”等于下一個(gè)大于2n的質(zhì)數(shù);不過(guò)“p”可以是更大的質(zhì)數(shù)但可能降低性能。在步驟152,對(duì)步驟150的結(jié)果進(jìn)行模2l運(yùn)算。“l(fā)”等于該方法輸出的串或消息的位數(shù)。在步驟154,輸出長(zhǎng)度為“l(fā)”的短消息或串。請(qǐng)注意,圖2的方法把“n”位的串或消息縮短成“l(fā)”位的串和消息。還請(qǐng)注意,圖2的處理是一種滿足式(1)、(2)、(3)的特性的強(qiáng)泛ε散列函數(shù)。
圖3說(shuō)明一種用于執(zhí)行式(8)所描述的泛εΔ散列方法的方法。在步驟170,把下標(biāo)“i”置為等于1并把變量SUM置為等于0。在步驟172輸入值“k”?!発”等于要輸入的串?dāng)?shù)或消息數(shù),以生成單個(gè)縮短的消息。在步驟174分開(kāi)消息或串mi,并在步驟176輸入密鑰ai。請(qǐng)注意,消息或串mi和密鑰ai長(zhǎng)度相同,各具有由“w”個(gè)字組成的“n”個(gè)位。密鑰“ai”是一個(gè)隨機(jī)或偽隨機(jī)數(shù)并可比“n”位長(zhǎng),但最好為“n”位。ai最好是一個(gè)隨機(jī)數(shù)。可以從許多源如偽隨機(jī)發(fā)生器產(chǎn)生隨機(jī)數(shù)。在步驟178,通過(guò)生成消息mi和密鑰ai的和形成和si。在步驟180,把si的平方置成等于變量SQi。在步驟182,把變量SUM置成等于變量SUM加SQi。在步驟184,檢查“i”的值,以判定它是否等于值“k”。若不等于值“k”,執(zhí)行把下標(biāo)“i”遞增1的步驟186,并接著執(zhí)行步驟174。若在步驟184中判定“i”的值等于“k”,執(zhí)行步驟188,其中對(duì)變量SUM的當(dāng)前值進(jìn)行模為“p”的運(yùn)算。如上面所述,值“p”是下一個(gè)大于值2n的質(zhì)數(shù),“p”可是更大的質(zhì)數(shù)但這會(huì)降低性能。在步驟190,對(duì)步驟188產(chǎn)生的結(jié)果進(jìn)行模2l運(yùn)算。再次,“l(fā)”是組成輸出串或消息的位數(shù)。在步驟192,輸出縮短的“l(fā)”位的消息或串。請(qǐng)注意,圖3的處理把“k”個(gè)各為“n”位的消息縮短成一個(gè)“l(fā)”位的消息。還請(qǐng)注意,圖3的散列方法是一種滿足式(1)和(2)的特性的泛εΔ散列方法。
在參照?qǐng)D1、2、3下,請(qǐng)注意典型地根據(jù)在所需的長(zhǎng)度為“l(fā)”的短輸出消息和使式(1)和(2)的概率為最小或在強(qiáng)泛ε散列函數(shù)情況下,使式(3)的概率為最小之間的折衷選擇值“l(fā)”。
下面提供簡(jiǎn)略證明以示出所公開(kāi)的平方散列函數(shù)滿足式(1)、(2)和(3)的特性。理論1式(6)描述的散列函數(shù)是泛Δ的。證明對(duì)于所有“m”≠“n”εZp和ΔεZpPxr[hx(m)-hx(n)=Δ] (1)=Pxr[(m+x)2-(n+x)2=Δ] (2)=Pxr[(m2-“n”2+2(m-n)x=Δ] (3)=1/p (4)其中因?yàn)閷?duì)于任何給定的“m”≠“n”εZp以及δεZp存在唯一的滿足式m2-“n”2+2(m-n)x=δ的x,而得到最后一個(gè)不等式。理論2式(7)描述的散列函數(shù)是散列函數(shù)的強(qiáng)泛類證明這是下述引理的直接推論,該引理表示如何把泛Δ類的散列函數(shù)轉(zhuǎn)換成強(qiáng)泛類的散列函數(shù)。引理1令“h”={hxD→R|xεK}是一個(gè)泛Δ類的散列函數(shù),其中R是阿貝爾群,“k”是密鑰集。則,由h’x,b(m)≡(hx(m)+b)(其中加法是在群R中的運(yùn)算)定義的H’={h’x,bD→R|xεK,bεR}是強(qiáng)泛類的散列函數(shù)。證明對(duì)于所有“m”≠“n”εD以及所有α,βεRPrx,b[hx,b'(m)=α,hx,b'(n)=β]---(5)]]>=Prx,b[hx(m)+b=α,hx(n)+b=β]---(6)]]>=Prx,b[hx(m)-hx(n)=α-β,b=α-hx(m)]---(7)]]>=Prx,b[hx(m)-hx(n)=α-β|b=α-hx(m)]Prx,b[b=α-hx(m)]---(8)]]>=1/lR2(9)由于hx是泛Δ散列函數(shù)并且hx(m)-hx(n)可按等概率取R中的任何值,而得到最后一個(gè)等式。
權(quán)利要求
1.一種產(chǎn)生位集合的縮短表示的方法,包括步驟輸入該“n”位的集合;把具有至少“n”位的某密鑰和該位集合相加以得到一個(gè)和;平方該和以得到和的平方;對(duì)和的平方進(jìn)行模為“p”的運(yùn)算以產(chǎn)生?!皃”結(jié)果,其中“p”至少和第一個(gè)大于2n的質(zhì)數(shù)一樣大;對(duì)該模“p”結(jié)果進(jìn)行模為2l的運(yùn)算以產(chǎn)生模2l結(jié)果,其中“l(fā)”小于“n”;以及輸出該模2l結(jié)果。
2.一種產(chǎn)生位集合的縮短表示的方法,包括步驟輸入該“n”位的集合;把具有至少“n”位的第一密鑰和該位集合相加以得到第一和;平方第一和以得到和的平方;把該和的平方和具有至少“n”位的第二密鑰相加以得到第二和;對(duì)第二和進(jìn)行模為“p”的運(yùn)算以產(chǎn)生模“p”結(jié)果,其中“p”至少和第一個(gè)大于2n的質(zhì)數(shù)一樣大;對(duì)該?!皃”結(jié)果進(jìn)行模為2l的運(yùn)算以產(chǎn)生模2l結(jié)果,其中“l(fā)”小于“n”;以及輸出該模2l結(jié)果。
3.一種產(chǎn)生位集合的縮短表示的方法,包括步驟輸入某“n”位的集合;把具有至少“n”位的某密鑰和該位集合相加以得到一個(gè)和;平方該和以得到和的平方;至少重復(fù)上述三個(gè)步驟一次以產(chǎn)生多個(gè)和的平方,每次重復(fù)這些步驟時(shí)采用某個(gè)不同的密鑰;把多個(gè)和的平方相加以產(chǎn)生總和;對(duì)總和進(jìn)行模為“p”的運(yùn)算以產(chǎn)生?!皃”結(jié)果,其中“p”至少和第一個(gè)大于2n的質(zhì)數(shù)一樣大;對(duì)該?!皃”結(jié)果進(jìn)行模為2l的運(yùn)算以產(chǎn)生模2l結(jié)果,其中“l(fā)”小于“n”;以及輸出該模2l結(jié)果。
全文摘要
一種高效散列技術(shù)利用(W
文檔編號(hào)G09C1/00GK1251451SQ9912312
公開(kāi)日2000年4月26日 申請(qǐng)日期1999年10月19日 優(yōu)先權(quán)日1998年10月20日
發(fā)明者薩瓦爾·帕特爾, 祖爾非卡·阿明·蘭姆魯 申請(qǐng)人:朗迅科技公司