1. 程式人生 > >數字簽名演算法MD5和SHA-1的比較

數字簽名演算法MD5和SHA-1的比較

什麼是MD5,什麼是SHA-1,如何校驗這些Hash。還有拿單個ISO檔案的MD5,SHA-1訊問是不是原版的問題,在這裡,對以上問題做一個終結解釋!

瞭解hash

Hash,一般翻譯做“雜湊”,也有直接音譯為”雜湊”的,就是把任意長度的輸入(又叫做預對映,pre-image),通過雜湊演算法,變換成固定長度的輸出,該輸出就是雜湊值。

這種轉換是一種壓縮對映,也就是,雜湊值的空間通常遠小於輸入的空間,不同的輸入可能會雜湊成相同的輸出,而不可能從雜湊值來唯一的確定輸入值。簡單的說就是一種將任意長度的訊息壓縮到某一固定長度的訊息摘要的函式。HASH主要用於資訊保安領域中加密演算法,他把一些不同長度的資訊轉化成雜亂的128位的編碼裡,

叫做HASH值.也可以說,hash就是找到一種資料內容和資料存放地址之間的對映關係.瞭解了hash基本定義,就不能不提到一些著名的hash演算法MD5和SHA1可以說是目前應用最廣泛的Hash演算法,而它們都是以MD4為基礎設計的。那麼他們都是什麼意思呢?這裡簡單說一下: 1)MD4MD4(RFC1320)是MIT的RonaldL.Rivest在1990年設計的,MD是MessageDigest的縮寫。它適用在32位字長的處理器上用高速軟體實現--它是基於32位運算元的位操作來實現的。 2)MD5MD5(RFC1321)是Rivest於1991年對MD4的改進版本。它對輸入仍以512位分組,其輸出是4個32位字的級聯,與MD4相同。MD5比MD4來得複雜,並且速度較之要慢一點,但更安全,在抗分析和抗差分方面表現更好。
MD5是一種不可逆的加密演算法,目前是最牢靠的加密演算法之一,尚沒有能夠逆運算的程式被開發出來,它對應任何字串都可以加密成一段唯一的固定長度的程式碼。那麼它有什麼用呢?

很簡單,通過它可以判斷原始值是否正確(是否被更改過)。一般用於密碼的加密。而我們所提供的MD5校驗碼就是針對安裝程式的唯一對應的一段程式碼。你可以使用任何MD5運算器對下載的檔案進行運算,運算出來的結果如果完全符合我們提供的MD5校驗碼,那麼說明你下載的這個程式沒有被中途修改過。這個特徵碼有如下特性首先它不可逆,例如我有一段祕密的文字如:”MySecretWords”,經演算法變換後得到MD5碼(b9944e9367d2e40dd1f0c4040d4daaf7),把這個碼告訴其他人,他們根據這個MD5碼是沒有系統的方法可以知道你原來的文字是什麼的。

其次,這個碼具有高度的離散性,也就是說,原資訊的一點點變化就會導致MD5的巨大變化,例如”ABC”MD5(902fbdd2b1df0c4f70b4a5d23525e932)和”ABC”(多了一空格)MD5(12c774468f981a9487c30773d8093561)差別非常大,而且之間沒有任何關係,也就是說產生的MD5碼是不可預測的。最後由於這個碼有128位那麼長,所以任意資訊之間具有相同MD5碼的可能性非常之低,通常被認為是不可能的。所以一般認為MD5碼可以唯一地代表原資訊的特徵,通常用於密碼的加密儲存,數字簽名,檔案完整性驗證等。 3)SHA1及其他SHA1是由NISTNSA設計為同DSA一起使用的,它對長度小於2^64的輸入,產生長度為160bit的雜湊值,因此抗窮舉(brute-force)性更好。

SHA-1設計時基於和MD4相同原理,並且模仿了該演算法。SHA-1是由美國標準技術局(NIST)頒佈的國家標準,是一種應用最為廣泛的hash函式演算法,也是目前最先進的加密技術,被政府部門和私營業主用來處理敏感的資訊。SHA-1基於MD5,MD5又基於MD4。論壇裡提供的系統映象檔案的hash也就是微軟官方提供的SHA-1值,下載後和此值對應,就說明你下載過程中檔案沒有被更改,屬於原版。 什麼是CRCCRC的全稱為CyclicRedundancyCheck,中文名稱為迴圈冗餘校驗。它是一類重要的線性分組碼,編碼和解碼方法簡單,檢錯和糾錯能力強,在通訊領域廣泛地用於實現差錯控制。

實際上,除資料通訊外,CRC在其它很多領域也是大有用武之地的。例如我們讀軟盤上的檔案,以及解壓一個ZIP檔案時,偶爾會碰到“BadCRC”錯誤,由此它在資料儲存方面的應用可略見一斑。

 那麼這些Hash演算法到底有什麼用呢?Hash演算法在資訊保安方面的應用主要體現在以下的3個方面: 1)檔案校驗我們比較熟悉的校驗演算法有奇偶校驗和CRC校驗,這2種校驗並沒有抗資料篡改的能力,它們一定程度上能檢測並糾正資料傳輸中的通道誤碼,但卻不能防止對資料的惡意破壞。MD5Hash演算法的”數字指紋”特性,使它成為目前應用最廣泛的一種檔案完整性校驗和(Checksum)演算法,不少Unix系統有提供計算md5checksum的命令。 2)數字簽名Hash演算法也是現代密碼體系中的一個重要組成部分。由於非對稱演算法的運算速度較慢,所以在數字簽名協議中,單向雜湊函式扮演了一個重要的角色。Hash值,又稱”數字摘要”進行數字簽名,在統計上可以認為與對檔案本身進行數字簽名是等效的。而且這樣的協議還有其他的優點。 3)鑑權協議如下的鑑權協議又被稱作”挑戰--認證模式:在傳輸通道是可被偵聽,但不可被篡改的情況下,這是一種簡單而安全的方法。當然,hash函式並不是完全可靠,不同檔案產生相同MD5和SHA1的機率還是有的,只是不高,在我們論壇裡提供的系統光碟,你想對這麼幾個檔案存在相同HASH的不同檔案根本是不可能的。論壇MSDN版塊,提供的就是微軟釋出MSDN提供給程式設計師研究的Windows系統的映象的HASH值——SHA-1,不提供MD5因為微軟只提供了SHA1。而論壇釋出區釋出的映象是和這些值對應的映象,你校驗自己的映象的HASH和MSDN資訊區相應版本的SHA-1對應的上,說明你手中的光碟是微軟通過MSDN釋出的原盤。對不上還存在屬於零售或通過銷售渠道釋出的映象的可能。畢竟MSDN只是微軟釋出系統光碟的一個途徑,MSDN只是給程式開發人員研究用的。尋求原版的證實,對應SHA-1和MD5外,CRC的認證也是一個很重要的因素,CRC同樣是校驗檔案的完整性,還有CDIMGE的封裝版本。微軟出品的映象都能通過CRC驗證,當然也有人使用CRC自己進行製作可以得到通過CRC的映象,那麼這時候你需要對應映象的SHA-1等了,所以,驗證一個映象的原盤可以通過對應多個數值來完成。

   隨著資訊科技和Internet 的迅速發展,資訊保安和可靠性問題越來越重要。現在資訊安全面臨兩大基本攻擊:被動式攻擊(獲取訊息的內容、業務流分析)和主動攻擊(假冒、訊息的篡改、業務拒絕)。

前者主要靠加密和解密技術進行有效處理,而後者就要靠訊息認證來處理。在金融交易、電子商務、電子信件、手機使用者資訊的確認等領域,資料完整性確認和資料來源的真偽鑑定都是很重要的安全服務。實現這些安全服務的最好方法就是使用加密函式中的單項雜湊(Hash)函式。單項雜湊(Hash)函式是一種單項密碼體制,它是一個從明文到密文的不可逆函式,也就是說,是無法解密的。通常應用在只需要加密、不需要解密的特殊應用場合。單項雜湊(Hash)函式H(M)作用於一任意長度的訊息M,它返回一固定長度的雜湊值h:h=H(M)作為初始訊息的獨一無二的“數字指紋”,從而能保證資料的完整性和惟一性。 

3.1 MD5 與SHA-1 的比較     由於MD5 與SHA-1均是從MD4 發展而來,它們的結構和強度等特性有很多相似之處,表(1)是對MD5SHA-1 的結構比較。SHA-1MD5 的最大區別在於其摘要比MD5 摘要長 32 位元。

對於強行攻擊,產生任何一個報文使之摘要等於給定報文摘要的難度:MD5 是2128 數量級的操作,SHA-1 是2160 數量級的操作。

產生具有相同摘要的兩個報文的難度:MD5 264 是數量級的操作,SHA-1 是280 數量級的操作。因而,SHA-1 對強行攻擊的強度更大。但由於SHA-1 的迴圈步驟比MD5 多(80:64)且要處理的快取大(160 位元:128 位元),SHA-1 的執行速度比MD5 慢。 

5 結束語

MD5 和SHA-1 是單項雜湊函式的典型代表,它們廣泛地應用在資訊保安和數字簽名等各個領域。從而有效地抗擊了資訊的主動式攻擊,本文基於AVR 微控制器實現了這兩種演算法,並結合組合語言盡心了優化,取得了較好的效果。根據資訊保安的要求的不同層次可以靈活選擇這兩種演算法從而達到實際目的。 


相關推薦

數字簽名演算法MD5SHA-1比較

什麼是MD5,什麼是SHA-1,如何校驗這些Hash。還有拿單個ISO檔案的MD5,SHA-1訊問是不是原版的問題,在這裡,對以上問題做一個終結解釋!瞭解hashHash,一般翻譯做“雜湊”,也有直接音譯為”雜湊”的,就是把任意長度的輸入(又叫做預對映,pre-image),

MD5SHA-1

術語 說明 iges object類 改變 href edi 一個 個數字 MD5和SHA-1都是我們耳熟能詳的術語了,很多人可能知道他們跟加密有關系,但是他們是怎麽做到加密的,他們各自的特點又是什麽。我來簡單的講一講。 MD5和SHA-1都被稱作哈希(Hash)函數,用過

Java加密演算法(MD5SHA-1)

1.MD5演算法(Message Digest Algorithm 5) 可以保證資料傳輸完整性和一致性 摘要後長度為16位元組 摘要資訊中不包含原文資訊,所有加密結果不可逆(無法解密) 一般在傳送檔案時 對原始檔進行md5 hash 傳送到對方後 檢測hash值是否相等 如

46.Fabric 1.0原始碼分析(46)ECDSA(橢圓曲線數字簽名演算法

Fabric 1.0原始碼筆記 之 ECDSA(橢圓曲線數字簽名演算法) 1、橢圓曲線演算法概述 1.1、無窮遠點、無窮遠直線、射影平面 平行線相交於無窮遠點; 直線上有且只有一個無窮遠點; 一組相互平行的直線有公共的無窮遠點; 平面上任何相交的兩直線,有不同

演算法-基礎查詢-1.漢諾塔/2.順序查詢/3.二分查詢/4.順序查詢二分查詢的比較

1.漢諾塔:   如下圖所示,需要將A柱子中的所有圓盤按照從小到大的順序移動到C柱子上,並且在移動過程中大圓盤不能在小圓盤上面      分析問題:最終希望呈現的結果是將A柱子上的盤子全部按照從小到大的順序移動到C柱子上     1.n個盤子,將n-1視為一個整體     2.將n-1個盤子視為一個

Fabric 1.0原始碼分析(46)ECDSA(橢圓曲線數字簽名演算法

# Fabric 1.0原始碼筆記 之 ECDSA(橢圓曲線數字簽名演算法)## 1、橢圓曲線演算法概述### 1.1、無窮遠點、無窮遠直線、射影平面* 平行線相交於無窮遠點;* 直線上有且只有一個無窮遠點;* 一組相互平行的直線有公共的無窮遠點;* 平面上任何相交的兩直線,有不同的無窮遠點;* 全部無窮遠點

Java 自帶的加密類MessageDigest類(加密MD5SHA

turn md4 格式化 字節轉換 查看 new word 用戶名 trac Java 自帶的數據加密類MessageDigest(MD5或SHA加密)說明:在網站中,為了保護網站會員的用戶名和密碼等隱私信息,所以我們在用戶註冊時就直接進行MD5方式或其他方式進行加密,

區塊鏈教程Fabric1.0原始碼分析ECDSA橢圓曲線數字簽名演算法

  兄弟連區塊鏈教程Fabric1.0原始碼分析ECDSA橢圓曲線數字簽名演算法,2018年下半年,區塊鏈行業正逐漸褪去發展之初的浮躁、迴歸理性,表面上看相關人才需求與身價似乎正在回落。但事實上,正是初期泡沫的漸退,讓人們更多的關注點放在了區塊鏈真正的技術之上。 Fabric 1.0原始碼筆記 之 ECDS

多重數字簽名演算法

什麼是數字簽名? 數字簽名就是附加在資料單元上的一些資料,或是對資料單元所作的密碼變換。 這裡的數字簽名,不是簡單的把紙質的簽名改為電子簽名,我們需要知道的是,數字簽名包含兩點:一是保證資訊傳輸的完整性,防止其在途中被篡改;二是保證傳送者的身份認證,防止其抵賴。在學習數字簽名之前,我們先介紹

HMAC-SHA1簽名演算法(JAVAPHP) base64簽名演算法(PHP)

HMAC 根據RFC 2316(Report of the IAB,April 1998),HMAC(雜湊訊息身份驗證碼: Hashed Message Authentication Code)以及IPSec被認為是Interact安全的關鍵性核心協議。它不是雜湊函式,而是採用了將MD5或S

數字簽名演算法

數字簽名演算法主要包含RSA、DSA、ECDSA三種演算法 1. 它的訊息傳遞操作是: 由訊息傳送方構建密匙對, 由訊息傳送的一方公佈公鑰至訊息接收方, 訊息傳送方對訊息用私鑰做簽名處理 訊息接收方用公鑰對訊息做驗證 2. RSA簽名演算法主要分為

國密SM2數字簽名演算法

SM2是基於橢圓曲線的數字簽名演算法,關於橢圓曲線的解釋可以常見前一篇關於橢圓曲線的微博,下面概要的介紹一下SM2簽名的過程。 對於要簽名的資訊e,這個是原始資訊經過一定的處理通過雜湊函式得到的,雜湊演算法用的是國密SM3演算法,這個過程也略過,只介紹重點的簽

SM2演算法第二十五篇:ECDSA數字簽名演算法原理與實現

---------------------------------------------轉載原因------------------------------------------------- 這邊部落格中有關 EC_KEY_set_private_key和EC_KEY_set_public_key

Android APK的數字簽名的作用意義

(1)有利於程序升級 當新版程式和舊版程式的數字證書相同時,Android系統才會認為這兩個程式是同一個程式的不同版本。如果新版程式和舊版程式的數字證書不相同,則Android系統認為他們是不同的程式,併產生衝突,會要求新程式更改包名。 (2)有利於程式的模組化設計和開發。 Android系統允許擁有

java 實現各種加密(MD5SHA-1,SHA-256)

常用加密演算法通用方法: package BinTest.bin; import java.security.MessageDigest; import java.security.NoSuchAl

專案裡面常用的加密方式base64、AES、MD5sha-1

今天重新整理了一遍以前專案中經常用到過的幾種加密的方式,發現以前其實對這幾種加密的方式理解的不是特別的深刻首先從加密的本質是來看,是把一些不定長度的資料按照一定的編碼規則輸出為一種一定長度的資料串。這個是我理解的加密,其中不同的加密手段採用不同的編碼規則。閱讀之前先了解一些

ecdsa 橢圓曲線數字簽名演算法

來源:http://www.cryptopp.com/wiki/Elliptic_Curve_Digital_Signature_Algorithm Elliptic Curve Digital Signature Algorithm, 或者 ECDSA, 是 FIPS

獲取android APP 簽名MD5SHA1

private void getSign(Context ctx){try {         PackageInfo packageInfo = getPackageManager().getPackageInfo("***.***.**", PackageManager

Android網路傳輸中必用的兩個加密演算法:MD5 RSA (附java完成測試程式碼)

MD5和RSA是網路傳輸中最常用的兩個演算法,瞭解這兩個演算法原理後就能大致知道加密是怎麼一回事了。但這兩種演算法使用環境有差異,剛好互補。一、MD5演算法首先MD5是不可逆的,只能加密而不能解密。比如明文是yanzi1225627,得到MD5加密後的字串是:14F2AE15

HMAC-SHA1簽名演算法(JAVAPHP) base64簽名演算法(PHP)

HMAC 根據RFC 2316(Report of the IAB,April 1998),HMAC(雜湊訊息身份驗證碼: Hashed Message Authentication Code)以及IPSec被認為是Interact安全的關鍵性核心協議。它不是雜湊函式,而是