磨空心3星評價
2020-04-22 14:45:35
hash是什么,有點類似「洗牌」把牌洗亂的概念,只是洗的不是牌,而是一筆數據,這個「洗」的過程是經過嚴謹定義的,且產生的結果會是固定長度的。常見的hash算法有MD5.RIPEMD-160.SHA1.SHA256等,不同hash算法「洗」的過程都不同,產生出來hash值長度也不同,像是MD5不管喂進去的數據多大,最終都會產生128 bits的結果,而SHA256產生的hash值則會是256 bits。一個好的hash算法通常需要具備以下這些特性:
1.輸入任意長度的數據,產生的hash值是固定長度的
2.取得hash值的計算過程是快速的
3.輸入的數據有任何一點改變,產生的hash值會有很大的差異
4.具有單向性,可輕易輸入數據取得hash值,但無法從hash值得知原始數據的內容
hash可以拿來做什么呢?假如今天阿牛在下班前打了一份500頁的重要文件,因為文件很重要不能帶離公司,那隔天他上班時如何得知是否有人趁晚上潛入公司偷改他的文件,有一個很簡單的作法,就是取得整份文件的hash值,比如說用SHA256取得一個256bits的hash值,然后記在紙上或其他地方,隔天到公司時,只要對這份文件取得hash值,然后跟昨天下班前得到那個256bits的hash值比對,如果兩者有差異,表示有人偷改這份文件,阿牛就要再仔細檢查這份文件,如果兩者一樣,表示文件沒有被修改過,阿牛可以安心的繼續(xù)編輯他的文件。
再回來看為什么一個好的hash值需要上述的四點呢?
1.固定長度:因為結果是固定長度的,阿??梢灾酪獪蕚涠啻髲埖募垇沓?,而不會有時長有時短,也不方便比對。若是程序來說,設計者可以事先規(guī)劃多大的空間放置hash值,不用擔心Overflow的問題
2.快速得到結果:雖然輸入的數據越大,計算hash的時間會相對增加,不過整體的過程還是不需要太復雜的計算,因此即便阿牛的文件是500頁,也可以快速的得到hash值
3.任何改變產生的結果都截然不同:阿牛的整份500頁文件即便有人多加了一個空格,隔天阿牛也可以明顯的知道hash值不一樣了,而第三個特性還有一個重要的原因,就是不能讓原始數據與hash值可以看出什么關聯(lián)性,因此即便是原始數據有任何一點改變,結果都是截然不同的
4.具有單向性:假如今天阿牛不小心將紙條掉落在電梯里,被其他人撿走也不會擔心重要文件的信息會外流,因為無法從hash值回推原始數據的內容
hash應用非常廣泛,比如說網站登入時會先將密碼轉成hash值,若有人擷取到信息,密碼也不會外流。有些軟件也會提供hash值,使用者下載后可以將檔案hash比對,就能知道下載的軟件是否有被竄改。而數位簽章也是使用hash來減少需要加密的數據。不過有些hash算法像是MD5.SHA1已經不建議使用了。
那么hash值與比特幣有什么關系呢?比特幣所謂的「挖礦」,其實就是不斷的計算hash
直到找到合法的hash值,這個合法的hash值就是我們上一篇說的「幸運草」。我們在第一篇文章里說到區(qū)塊鏈的特性之一「難以竄改」就是利用hash值一筆一筆串接下去產生「鏈」的概念,其中任何數據被竄改,會讓原本合法的hash值變成不合法,導致「鏈」斷掉下一篇我們就來講比特幣的「區(qū)塊」有哪些數據,「挖礦」是怎么計算hash值的,并將「區(qū)塊」連成「區(qū)塊鏈」。
全興5星評價
2020-04-22 14:46:27
Hash算法我們可能早就聽過,不僅僅應用在密碼學領域。由于hash算法所體現(xiàn)的思想十分的滿足我們的需求,比如可以把一個十分復雜的東西映射到另外一個較為簡單的地方,所以很多地方都有應用。
1. 什么是hash算法?
Hash(哈?;蛏⒘?,Hash Algorithm)算法是信息技術領域非?;A也非常重要的技術。它能任意長度的二進制值(明文)映射為較短的固定長度的二進制值(Hash值),并且不同的明文很難映射為相同的Hash值。
Hash算法的核心思想:基于內容進行編址或者命名。
2. Hash算法的特點
一個優(yōu)秀的 hash 算法,將能實現(xiàn):
正向快速:給定明文和hash算法,在有限時間和有限資源內能計算出hash值。
逆向困難:給定(若干)hash值,在有限時間內很難(基本不可能)逆推出明文。
輸入敏感:原始輸入信息修改一點信息,產生的hash值看起來應該都有很大不同。
沖突避免:很難找到兩段內容不同的明文,使得它們的hash值一致(發(fā)生沖突)。
如果給定一個明文前提下,難以找到碰撞的另一個明文,稱為“弱抗碰撞性”;如果難以找到任意兩個明文,發(fā)生碰撞,則稱算法具有“強抗碰撞性”。
3. 流行的hash算法
目前流行的 Hash 算法包括 MD5、SHA-1 和 SHA-2。
MD是Message Digest的縮寫。
MD4(RFC 1320)是 MIT 的 Ronald L. Rivest 在 1990 年設計的,MD 是 Message Digest 的縮寫。其輸出為 128 位。MD4 已證明不夠安全。
MD5(RFC 1321)是 Rivest 于1991年對 MD4 的改進版本。它對輸入仍以 512 位分組,其輸出是 128 位。MD5 比 MD4 復雜,并且計算速度要慢一點,更安全一些。MD5 已被證明不具備"強抗碰撞性"(強抗碰撞性參考上面的內容)。
SHA (Secure Hash Algorithm)是一個 Hash 函數族,由 NIST(National Institute of Standards and Technology)于 1993 年發(fā)布第一個算法。目前知名的 SHA-1 在 1995 年面世,它的輸出為長度 160 位的 hash 值,因此抗窮舉性更好。SHA-1 設計時基于和 MD4 相同原理,并且模仿了該算法。SHA-1 已被證明不具"強抗碰撞性"。
4. hash算法的缺點
一般而言,Hash需要較強的算力資源,所以算力很可能成為hash算法的瓶頸。一般選擇進行hash算法的CPU需要較高的主頻。
5. Hash算法與數字摘要之間的關系
數字摘要的意思是對內容進行Hash運算,把運算結果作為唯一的值來代表之前的值。
根據前面所學習的內容,我們可以根據前面所學的hash函數的特點之一(抗碰撞性)來解決確保內容沒有被篡改的問題。
數字摘要是Hash算法的一個很重要的使用場景。當我們在網絡上下載東西的時候,很可能被不法分子篡改,這個時候我們就可以對下載的資源進行數字摘要,這樣當我們下載之后,通過把下載的文件進行Hash計算,把結果與數字摘要進行對比,就可以知道文件是否被篡改。