區塊鏈 位元幣的密碼學基礎

2021-09-29 19:07:42 字數 2125 閱讀 7738

位元幣主要用到的密碼學基礎就是cryptographic hash function,程式設計師應該都很熟悉hash函式,這裡還是簡單介紹一下。

hash函式是把任意長度的輸入通過雜湊函式或者說是hash函式轉化為固定長度的輸出的一種演算法。這個輸入區間可以無窮大,但輸出區間是固定的。比如輸入可以是 0~∞,輸出是乙個3位數。

這種轉換是一種壓縮對映,也就是,雜湊值的空間通常遠小於輸入的空間,不同的輸入可能會雜湊成相同的輸出,所以不可能從雜湊值來確定唯一的輸入值。簡單的說就是一種將任意長度的訊息壓縮到某一固定長度的訊息摘要的函式。2

乙個好的hash函式,應該做到的是,相似輸入的輸出差異性大。輸出相同的時候,輸入差異大。並且保證輸入數量住夠多的時候,輸出值的數量均勻。不會出現有的輸出只有一兩個,輸出集中在幾個值上。

那麼其實乙個很好的解決辦法就是,我們在我們要的輸入後,加上乙個隨機值,這樣哪怕輸入本身不夠隨機,加上隨機值後它也足夠離散。

那麼就會有乙個問題,就是hash碰撞。hash碰撞是指兩個不同的輸入,通過hash函式的轉化,得到了相同的hash值,稱作collision。根據定義很容易知道,collision是一定會發生的,因為輸入區間可以無窮大,但輸出區間的長度是固定。

密碼學中要求hash函式有乙個特性:collision resistance(抗碰撞),就是沒有辦法人為的去製造hash碰撞。要得到相同的hash值,唯一的辦法就是遍歷輸入區間,乙個個試hash值,然後找相同的。

第二個特性是:hiding,就是我的輸入x->h(x),我沒辦法由h(x)推導出x。也就是h(x)是不會洩露任何x的資訊的。當然,遍歷輸入區間也可以求出很多個輸出為h(x)的輸入值,然後再從這些輸入值裡面去找跟我需要的x相似的值。但是,回到前面說的,我們的輸入空間足夠大,接近於無窮,那麼就不存在遍歷輸入區間的可能。也就是說hiding成立的前提必須是輸入空間足夠大。

以上是密碼學上,cryptographic hash function的特性。

那麼這些特性有什麼用呢。這裡就有乙個概念,叫digital commitment或者叫digital equivalent of a sealed envelope,也就是區塊鏈去中心化的思想。

什麼叫中心化,比如說a借給b一百元,那麼當b不承認,a就沒辦法要回這一百元,所以現在有中心化的解決方案,c做公證人,看著a借給b一百元,那麼最後c就能證明b欠a一百。但是中心化後出現的問題是什麼呢,首先c可能跟b私交很好,那麼不承認這個過程,或者是c老了忘了等等。公證人可以是法院、銀行等等,但這些就需要人力的投入和場地的投入。

那麼區塊鏈去中心化的思想是什麼呢,所有人都獲得了資料的副本,也就是說,當a借了b錢之後,是所有人都知道了,b可以收買乙個,但他沒辦法收買所有人。

前面的collision resistance和hiding都是密碼學裡cryptographic hash function的特性,而位元幣還有乙個特性,叫puzzle friendly。就是事先我們沒辦法知道用什麼輸入可以的到某個特定的hash值。這個聽起來跟collision resistance是一樣的,實際上他們就是相輔相成的。

這個有什麼意義呢,

比如說這是我的輸出區間,但只有hash值在某個範圍例如:hash值小於target的時候才是我需要的。

由於我事先不知道什麼輸入才能得到這個target,那麼我就只能乙個個的去試輸入。實際上這就是位元幣挖礦的過程。

當你找到這個輸入後別人要驗證結果就很簡單,其實只需要做一次hash運算。

位元幣本身是不加密的,從上面挖礦的過程可以看出來,挖出來的位元幣最後是公開的,是需要給別人驗證的。那麼怎麼證明幣是你的,這就涉及到了數字前面。

首先講一下對稱加密:當我把資料加密好後,再把金鑰通過安全的方式發給你,這個的前提是金鑰得有安全的方式傳送。但本身金鑰就有可能被竊聽或者丟失。

而非對稱加密:(public key, private key)我發訊息給你,用你的公鑰進行加密,而你用自己的私鑰進行解密,你的公鑰可以公開,但是你的私鑰只有自己知道,這樣有什麼好處呢,就是每個人都可以給你發資訊,但只有你自己能檢視。

那麼位元幣不加密怎麼安全呢,就是如果我要交易,把我的位元幣給你,那麼我在交易上,用我的私鑰進行簽名,大家都可以用我的公鑰進行驗證,這樣大家都能知道確實是我進行的交易。

參考北大研究員肖臻: ↩︎

區塊鏈的密碼學基礎

1 雜湊函式的三個重要的性質 a.collision resistance 什麼是collision?當x y但h x h y 這時就稱為乙個collision。什麼是collision resistance?比方說有個x1,他的雜湊值是h x1 但我們很難找出乙個x2來,使他的h x2 h x1 ...

位元幣 密碼學原理

位元幣密碼學原理 包含hash 雜湊 與簽名兩個部分。位元幣hash 雜湊 hash特性 理論上hash碰撞是不可避免的,因為hash值f x 位數大小為256,那麼hash值的取值空間為2的256次冪,而輸入x的範圍是無窮大的。但是對於人為的製造這種hash碰撞的方式是沒有什麼好的辦法,也沒有數學...

位元幣 位元幣中的密碼學原理

位元幣又稱加密貨幣,但其實加密貨幣並沒有加密 區塊鏈中的所有資訊都是公開的,包括交易的內容 交易的金額以及交易賬戶的位址。之所以稱之為加密貨幣,主要是因為交易的雙方在不與真實世界發生關聯的情況下,雙方的身份是無法獲知的。位元幣中主要用到了密碼學中的 雜湊 和 簽名 密碼學中用的雜湊被稱作crypto...