Hash

什麼死的簡單算法可用於通過鋼筆和鉛筆生成校驗和?

  • January 9, 2018

我正在舉辦關於比特幣和區塊鏈技術的課程。在我的議程上,我有一個練習,我將讓與會者使用便利貼在牆上創建自己的區塊鏈。

我正在尋找可以重新採樣比特幣工作證明的東西,與會者可以用紙和鉛筆計算出來。我已經看到每天 0.67 個雜湊值,但是我正在尋找更簡單的東西。

存在哪些不需要 ascii 或基本轉換的生成雜湊碼或更好的校驗和算法?你能為此發明一些東西嗎?

手動進行簡單計算時,您將遇到問題。加密散列函式的一個重要部分是不可預測性。正是這種不可預測性使我們能夠使用加密雜湊函式作為工作證明。

為了比較,讓我們在字母表上使用一個簡單的校驗和方法。通常,校驗和用於檢測數據傳輸或複制期間的複制錯誤。一個簡單的方法是計算消息中元音的數量,並將這個數字附加到結尾。例如:

This message is checksummed

變成

This message is checksummed|7

像這樣的簡單校驗和可用於檢查元音是否意外變成了輔音,或者輔音意外變成了元音(我知道不是很有用)。如果在傳輸過程中發生這兩種錯誤中的任何一種,則接收端的校驗和將不匹配,我們就會知道發生了錯誤。

This mrssage is checksummed|7  <--- the checksum is wrong, so there's an error

這個簡單的校驗和也是一個雜湊函式,因為它將較大的數據塊映射到較小的數據塊。顯然,這是一個非常糟糕的雜湊函式,具有極高的碰撞率,但它是一個足夠簡單的例子,可以用紙筆計算。

現在讓我們看看當我們嘗試使用這個散列函式作為工作量證明時會發生什麼。我們還需要添加一個可以更改的*nonce值來修改散列函式的輸出,而無需修改消息的重要部分。*我將使用表格message|nonce|hash。假設執行工作量證明的人需要找到一個隨機數,使得雜湊摘要大於或等於 10。例如,以下將滿足工作量證明:

This message is checksummed|aaa|10

當消息與隨機數一起被散列(校驗和)時,我們遇到了工作量證明。

然而,問題在於我們的雜湊函式是非加密的,因此是可逆的。從我們的目標值10和我們的消息開始This message is checksummed,我們可以對消息執行校驗和,然後進行簡單的算術以生成可接受的隨機數。系統中沒有不可預測性。

如果你使用某種紙筆雜湊函式,你幾乎肯定會遇到這個問題。很可能,那些參加你課程的人會看穿它,並且不理解工作量證明的目的。在這個例子的情況下,這將毫無意義。

如果您選擇使用這樣的方法,可能值得向您的班級解釋密碼散列函式的重要性。否則,工作量證明的整個概念是沒有意義的。

引用自:https://bitcoin.stackexchange.com/questions/68002