什麼是哈希函數? [Criptomonedas]


哈希函數是一種數學函數,可將任意大小的輸入轉換為固定大小的加密貨幣輸出。

無論我們在散列函數中輸入多少信息,它可以是一串單詞或一個文件,它總是會返回相同大小的散列。

該函數的重要之處在於它不能用於從輸出中獲取輸入,在這種情況下沒有逆向工程。這就是為什麼散列被認為是一種單向、單方面的功能。這類似於當我們點燃一張紙時,我們以後無法取回它。

另一方面,每當我們使用相同的信息時,通過散列函數傳遞它時我們將獲得相同的結果,這允許我們在知道散列的情況下驗證信息。知道它是否未被更改非常重要。

所有這些都是加密貨幣的基礎,尤其是區塊鏈技術。

加密貨幣哈希如何工作?

通常,使用散列函數,我們輸入可變長度的信息並獲得固定大小的輸出作為回報。

SHA256 輸入和輸出示例

但是當涉及到加密貨幣散列函數時,散列的能力和一些安全屬性被結合起來傳遞消息。

哈希函數不僅用於區塊鏈,還用於需要驗證消息完整性和信息認證的計算機系統。

一般來說,這些散列被認為是弱安全措施,因為它們是多項式時間算法。這意味著執行時間受限於輸入大小的多項式表達式。

這篇文章的主題有點複雜,但我們應該清楚的是,即便如此,它們也不容易破譯。

加密貨幣散列函數具有一些典型散列所沒有的額外安全功能,這使得某人更難以確定消息或其中的信息。

強去中心化算法的特性

但是有一些特性使一種哈希算法比其他算法更強大。這裡有一些很好的例子。

1. 決定論

去中心化算法必須是確定性的,這意味著無論輸入的長度如何,它都必須始終提供相同大小的輸出。

這意味著如果我們有一個句子,結果哈希應該和我們在輸入中輸入一整本書一樣大小。

2.抵抗原像攻擊

強大的哈希函數必須能夠抵抗原像攻擊。也就是說,反轉散列以檢索原始輸入消息的值一定非常困難。因此,散列函數必須是單向的,或者更確切地說是不可逆的。

3. 抗碰撞

當兩個物體碰撞時會發生碰撞。我們也可以在加密貨幣學和哈希中找到一個概念。

當兩個不同的輸入產生相同的輸出結果時,就說存在衝突。

這對我們用來生成散列的算法非常不利,因為它會被破壞,因此不安全。

像這樣的事情意味著有人可以創建假裝是真實信息的惡意信息以繞過安全性,從而使散列函數過時。

因此,安全可靠的算法必須是此類問題的助手。

4.Avalanche效應

這個屬性意味著,如果我們做出改變,無論多麼小,它都必須在輸出中產生實質性的變化。

這就是名稱的原因,因為即使我們更改了輸入句子中的句點或逗號,它也好像會產生Avalanche效果。它看起來應該完全不同。

5. 哈希速度

在許多情況下,去中心化算法必須快速生成散列。

這被認為是加密貨幣哈希函數的理想屬性。此外,它是一種受主觀性支配的屬性。

也就是說,有時我們希望函數盡可能快地進行計算,而有時我們需要它花時間減慢速度。這一切都取決於我們將如何使用它。

例如,如果我們有一個網站,我們想盡快向訪問者展示信息,那麼第一件事是可取的。但是,當涉及到加密貨幣時,我們希望攻擊者做很多工作。

哈希算法

算法,一般來說,我們不應該創建它們,以防我們需要使用它們,很多時候它們已經被其他人設計並準備使用。

有很多,我們可以將它們添加到不同的系列中,以下是最著名的和一些示例:

安全哈希算法(SHA):在這個家族中,我們發現SHA-1、SHA-2(其中包括SHA-224、SHA-56、SHA-384 和SHA-512)和SHA-3(SHA3-224、SHA3 -256、SHA3-384 和SHA3-512)。 SHA-1 不再使用,而最常見的是SHA-256,這是比特幣使用的一種。消息摘要(MD) – 該系列包含各種散列函數,包括MD2、MD4、MD5 和MD6。它以前被認為是首選算法,但當發現它會導致衝突時,它就不再適用了。 Windows NTHash – 也稱為Unicode 或NTLM 散列,此散列通常由Windows 系統使用,因為它比其前身LM 散列更安全。不過,NTHash 也有漏洞需要擔心,但這種特殊的算法是Windows 系統不可或缺的一部分。

其他示例包括BLAKE 2 和BLAKE 3、RIPMD-160 和WHIRPOOL 等。

哈希示例

現在我們知道了哈希函數是什麼,是時候脫離理論並轉向實際層面了。讓我們看一些例子。

讓我們以哈利波特的一句話作為輸入:

在我看來,文字是我們最取之不盡的魔法之源,能夠造成傷害並對其進行補救。

阿不思·鄧布利多

如果我們通過SHA-256 哈希算法傳遞它,結果將如下:

dc18ec2991d457843657e792583e78e1af9023d92a8a7f29863d6c298ed3b17f

SHA-256

但是如果我們想輸入一個像“哈利波特”這樣的小得多的消息呢?那麼只要我們使用相同的算法,輸出就會是相同的大小。

f984f4bdcde0465676326e5d329aff6a84d1395c3d606827473764ff43b3feb6

SHA-256

這是因為兩個輸出都是256 位,以十六進製表示為64 個字符的字符串。

無論消息有多長,我們都會得到相同長度的回复。這是因為算法是確定性的,正如我們之前看到的。

現在,如果我們嘗試使用與上面相同的字符串,但使用MD5 哈希函數,那麼我們最終會得到其他內容:

1803c4bf3dc3c0493fc2f2bf8b0e5d8f

MD5

在這種情況下,輸出有點短,這是因為MD5 為我們提供了32 個十六進製字符長的輸出。

我們也可以用一種叫做SHA-512 的算法來測試它,你可以想像它是SHA-256 的兩倍。

796261d150c5902abfc38d4b9681b7a93351084cd2ddf2778ed71daf8fc0ddd6b5ecaacaeac5e07bb59b760f6e3e3abb7dc83bcba832a894eb7cee

SHA-512

你可以在此站點上生成自己的哈希值。

哈希函數和加密貨幣

允許加密貨幣工作的是區塊鏈,它是一種分佈式賬本,在區塊之間形成鏈接以存儲交易。

區塊鏈只包含具有有效交易的區塊,這可以防止欺詐交易和所謂的雙花問題。

塊之間的這種鏈接是通過它們的哈希實現的。一系列數字和字母,看起來與生成它們的信息完全不同。

當一個新塊被創建時,前一個的哈希值也會被添加,作為哈希函數輸入的一部分來生成新塊的哈希值。因此我們確信一個區塊是鏈的一部分,因為任何更改都會在整個區塊鏈中產生級聯效應。

這就是挖礦的用武之地,因為這是礦工為生成新區塊所做的工作。他們不僅必須生成新塊的哈希值,而且還必須具有一定的值。

當礦工想要創建一個有效的區塊時,他必須獲得將進入內部的交易以及將進入頭部的一系列重要信息。

整個塊不通過哈希函數,而只通過頭部。一個具有區塊版本號、時間、前一個區塊的哈希值、默克​​爾樹根的哈希值、隨機數和目標哈希值的信息。

這個想法是你生成的哈希低於目標哈希。但我們知道,如果我們輸入相同的信息,我們將始終得到相同的結果。

這就是為什麼一個nonce 或number 只使用一次,它只用於更改並且函數返回另一個結果。

所以你應該開始嘗試多種組合,直到你想出一個解決方案。只有這樣,區塊才會有效,並且可以在以加密貨幣形式獲得獎勵的同時集成到鏈中。

你可以在比特幣挖礦文章中了解更多相關信息。

要考慮的細節

礦工必須找到生成正確哈希的隨機數,這需要耗時的反複試驗方法。

礦工在第一次嘗試時極不可能找到正確的隨機數,這意味著礦工在命中之前必須嘗試大量的隨機數選項。

難度越高,生成解決方案所需的時間就越長。

常見問題

什麼是哈希函數?

散列函數是將一系列信息轉換或映射為固定大小的位串(也稱為散列值)的數學函數。

哈希值是如何計算的?

哈希函數以算法的形式使用複雜的數學方法將任意大小的信息轉換為固定大小,例如256 個字符。如果我們更改輸入中的某些內容,無論多麼小,最終值都會完全改變。這使得確保數字文件的保真度變得有趣。

區塊鏈中使用的哈希是什麼?

哈希值用於區塊鏈系統的各個部分。
首先,每個區塊都包含前一個區塊頭的哈希值,確保在添加新區塊時沒有被篡改。
此外,使用工作量證明(PoW) 機制的加密貨幣挖礦使用隨機生成數字的散列來獲得包含一系列前導零的特定散列值。這種任意功能是資源密集型的,使惡意行為者難以超越網絡。

概括

散列是加密貨幣加密貨幣需求的重要功能。相同的輸入總是產生相同的輸出。哈希函數是區塊鏈技術中非常重要的一部分。區塊鏈中的哈希是根據區塊頭中的信息生成的。

資訊來源:由0x資訊編譯自CRIPTOTARIO。版權歸作者Criptotario所有,未經許可,不得轉載

Total
0
Shares
Related Posts