一、概念
將任意長度的輸入變換為固定長度的輸出的不可逆的單向密碼體制。
hash函式h將可變長度的資料塊m作為輸入,產生固定長度的hash值:h = h(m)。其中h是定長的雜湊值,h是雜湊函式,m是乙個變長訊息。
稱m是h的原像。因為h是多對一的對映,所以對於任意給定的hash值h,對應有多個原像。如果滿足x≠y且h(x)=h(y),則稱為碰撞。
hash函式在數字簽名和訊息完整性檢測等方面有著廣泛的應用。hash函式同時是一種具有壓縮特性的單向函式,其像通常稱為數字指紋,訊息摘要或雜湊值。
雜湊函式主要用於訊息認證和數字簽名,因此需要具備以下特性:
h可應用於任意長度的訊息
h產生定長的輸出
對任意給定的訊息x,計算h(x)比較容易,用硬體軟體均可實現
單向性:對任意給定的雜湊值h,找到滿足h(x) = h 的x在計算上是不可行的
抗弱碰撞性:對任意給定的訊息x,找到x != y並且h(x) = h(y)的訊息y在計算上是不可行的
抗強碰撞性:找到任何滿足h(x) = h(y) 的偶對(x,y)在計算上是不可行的
性質2是雜湊函式的基本特性,性質3是雜湊函式的可用性,性質4,5,6是雜湊函式為滿足不同應用而需具備的基本安全性質。
弱hash函式:只滿足以上前五個要求的hash函式。
強hash函式:滿足以上前六個要求的hash函式。
強hash函式能夠保證免受以下攻擊:假設bob寫一條借據訊息並傳送給alice,alice在借據上簽名認可。bob如果能找到兩條訊息具有同樣的hash值,其中乙個借據訊息要求alice歸還金額較小,另乙個金額很大,那麼讓alice簽下第乙個小額借據後,bob就能聲稱第二個借據是真實的(將alice在第乙個借據的簽名附到第二個借據中)。
下圖展示了抗原像攻擊、抗弱碰撞攻擊和抗強碰撞攻擊三者之間的關係
在傳統觀念中並沒有把偽隨機性作為密碼學hash函式的安全性需求,但在實際應用中或多或少有所要求。密碼學hash函式通常用於金鑰產生、偽隨機數發生器以及訊息完整性應用,上述三個應用都要求hash函式的輸出是隨機的。
二、對hash函式的攻擊
1、窮舉攻擊
a) 原像攻擊和第二原像攻擊
攻擊者對給定的hash值h,試圖找到滿足h(y) = h的y。窮舉攻擊的方法是隨機選擇y,嘗試計算其hash值知道碰撞出現。對於m位的hash值,窮舉的規模大約是2的m次方,對於攻擊者平均嘗試次數為2的m-1次方,才能找到乙個滿足h(y)=h的y值。
b) 碰撞攻擊
對於碰撞攻擊,攻擊者試圖找到兩個訊息或資料塊x和y,滿足h(x)=h(y),與原像攻擊和第二原像攻擊相比,其窮舉的規模相對更小一些,這也通過數學上的生日悖論得到印證。本質上,如果我們在均勻分布的0到n-1的範圍內選擇隨機整數變數,那麼在n的1/2次方 次選擇後發生重複的概率就會超過0.5。因此,對於m位的hash值,如果我們隨機選擇資料塊,預計在2的m/2次方 次嘗試後就能找到兩個具有相同hash值的資料塊。
yuval提出以下策略進行碰撞攻擊:
2、密碼分析
對hash函式的密碼分析攻擊,也是利用演算法的某種性質而不是通過窮舉來進行攻擊的。理想的hash函式演算法要求密碼分析攻擊所需的代價大於或等於窮舉攻擊所需的代價。
三、雜湊演算法
計算2的n次方
任意給定乙個正整數n n 100 計算2的n次方的值。輸入乙個正整數n。輸出2的n次方的值。計算2的n次方也是依次相乘2,大於個位則進製,從後向前儲存元素,所以要令初始值為1.includeint main 建立儲存資料的陣列 a 49 1 用陣列儲存 int n int i int x 0 x代表...
計算2的N次方
總時間限制 1000ms 記憶體限制 65536kb 描述任意給定乙個正整數n n 100 計算2的n次方的值。輸入輸入乙個正整數n。輸出輸出2的n次方的值。樣例輸入 5樣例輸出 32提示高精度計算 1 include 2 int main int argc,char ar 3 表示大整數,低位在前...
計算2的N次方 C語言
總時間限制 1000ms 記憶體限制 65536kb 描述 任意給定乙個正整數n n 100 計算2的n次方的值。輸入輸入乙個正整數n。輸出輸出2的n次方的值。思考 當n值小時可用函式pow 2,n 當2 n值大於int型的範圍時?樣例輸入 5樣例輸出 32核心思考 運用一維陣列如何在值大於等於10...