區塊鏈公鑰與私鑰圖
『壹』 比特幣的地址、公鑰、私鑰,你都了解了嗎
了解比特幣,就不可避免地要掌握什麼是比特幣的地址、公鑰、私鑰,下面我們一個一個來解釋。
地址,就好比是銀行賬(卡)號,在創建數字錢包後就會自動生成,簡單來說,就是創建錢包的時候,先產生一對私鑰和公鑰,然後公鑰通過一套演算法生成地址,這個地址實質上是一串字元,比如。
像銀行賬(卡)號可以用來收款一樣,比特幣地址也可以用來接收比特幣。
這個比特幣地址不單單給你轉幣的人知道,連整個比特幣網路的人都能查看,可以說,全球所有用戶的地址都可以被任何人知道。為什麼這樣說呢?因為比特幣本質就是一個大型的公開賬本,所有交易對所有人都是可見的。而交易記錄中包括了交易流水單號、發幣人的發幣地址、收幣人地址、發幣人的找零地址。
私鑰,可以看作是銀行密碼,是一串很長的由錢包生成的隨機數,比如, LBB9ZXMCJ。私鑰是唯一能夠證明你擁有的比特幣是屬於你的,也只有用私鑰才能轉賬、交易和使用數字錢包里的比特幣。
我們都知道了,銀行密碼絕對不能泄露給別人,私鑰也一樣,打死也不要告訴他人,否則你的比特幣很容易就被轉走。銀行的錢被盜了,因為有國家監管和第三方信用,還有可能被追回,但比特幣是去中心化的,沒有第三方,自己的幣只能自己負責看管,丟了,或被他人轉走了,就永遠拿不回來了。所以千萬千萬不要把私鑰告訴他人,不要把私鑰保存在手機或者電腦上,不要通過網路傳輸你的私鑰,那怎麼辦?記住了,要用筆寫在紙上,寫兩到三份分別放在不同的地方,保管好。
公鑰,顧名思義,是可以公開的,也是像地址和私鑰一樣,是一串長長的字元。公鑰由私鑰通過橢圓曲線加密演算法生成,通過私鑰可以算出唯一一個公鑰,但公鑰不能逆向推導出私鑰。
那到底比特幣地址、公鑰、私鑰在交易中起什麼作用的呢?
首先,錢包通過加密演算法把私鑰加密成字元串(也叫作簽名),然後把這個字元串,和公鑰一起寫到交易信息里,再發給礦工。礦工收到信息後,就會將簽名、公鑰寫入一個驗證函數,如果得出的結果為「true」,那麼這個交易會被確認為真實有效,就能被驗證通過。而結果為「false」,則說明這筆交易存在問題,不能被驗證通過。
通過以上淺顯的文字,希望能幫到你對比特幣的地址、公鑰和私鑰有一個初步的了解吧!感謝你的閱讀!
『貳』 【深度知識】區塊鏈之加密原理圖示(加密,簽名)
先放一張以太坊的架構圖:
在學習的過程中主要是採用單個模塊了學習了解的,包括P2P,密碼學,網路,協議等。直接開始總結:
秘鑰分配問題也就是秘鑰的傳輸問題,如果對稱秘鑰,那麼只能在線下進行秘鑰的交換。如果在線上傳輸秘鑰,那就有可能被攔截。所以採用非對稱加密,兩把鑰匙,一把私鑰自留,一把公鑰公開。公鑰可以在網上傳輸。不用線下交易。保證數據的安全性。
如上圖,A節點發送數據到B節點,此時採用公鑰加密。A節點從自己的公鑰中獲取到B節點的公鑰對明文數據加密,得到密文發送給B節點。而B節點採用自己的私鑰解密。
2、無法解決消息篡改。
如上圖,A節點採用B的公鑰進行加密,然後將密文傳輸給B節點。B節點拿A節點的公鑰將密文解密。
1、由於A的公鑰是公開的,一旦網上黑客攔截消息,密文形同虛設。說白了,這種加密方式,只要攔截消息,就都能解開。
2、同樣存在無法確定消息來源的問題,和消息篡改的問題。
如上圖,A節點在發送數據前,先用B的公鑰加密,得到密文1,再用A的私鑰對密文1加密得到密文2。而B節點得到密文後,先用A的公鑰解密,得到密文1,之後用B的私鑰解密得到明文。
1、當網路上攔截到數據密文2時, 由於A的公鑰是公開的,故可以用A的公鑰對密文2解密,就得到了密文1。所以這樣看起來是雙重加密,其實最後一層的私鑰簽名是無效的。一般來講,我們都希望簽名是簽在最原始的數據上。如果簽名放在後面,由於公鑰是公開的,簽名就缺乏安全性。
2、存在性能問題,非對稱加密本身效率就很低下,還進行了兩次加密過程。
如上圖,A節點先用A的私鑰加密,之後用B的公鑰加密。B節點收到消息後,先採用B的私鑰解密,然後再利用A的公鑰解密。
1、當密文數據2被黑客攔截後,由於密文2隻能採用B的私鑰解密,而B的私鑰只有B節點有,其他人無法機密。故安全性最高。
2、當B節點解密得到密文1後, 只能採用A的公鑰來解密。而只有經過A的私鑰加密的數據才能用A的公鑰解密成功,A的私鑰只有A節點有,所以可以確定數據是由A節點傳輸過來的。
經兩次非對稱加密,性能問題比較嚴重。
基於以上篡改數據的問題,我們引入了消息認證。經過消息認證後的加密流程如下:
當A節點發送消息前,先對明文數據做一次散列計算。得到一個摘要, 之後將照耀與原始數據同時發送給B節點。當B節點接收到消息後,對消息解密。解析出其中的散列摘要和原始數據,然後再對原始數據進行一次同樣的散列計算得到摘要1, 比較摘要與摘要1。如果相同則未被篡改,如果不同則表示已經被篡改。
在傳輸過程中,密文2隻要被篡改,最後導致的hash與hash1就會產生不同。
無法解決簽名問題,也就是雙方相互攻擊。A對於自己發送的消息始終不承認。比如A對B發送了一條錯誤消息,導致B有損失。但A抵賴不是自己發送的。
在(三)的過程中,沒有辦法解決交互雙方相互攻擊。什麼意思呢? 有可能是因為A發送的消息,對A節點不利,後來A就抵賴這消息不是它發送的。
為了解決這個問題,故引入了簽名。這里我們將(二)-4中的加密方式,與消息簽名合並設計在一起。
在上圖中,我們利用A節點的私鑰對其發送的摘要信息進行簽名,然後將簽名+原文,再利用B的公鑰進行加密。而B得到密文後,先用B的私鑰解密,然後 對摘要再用A的公鑰解密,只有比較兩次摘要的內容是否相同。這既避免了防篡改問題,有規避了雙方攻擊問題。因為A對信息進行了簽名,故是無法抵賴的。
為了解決非對稱加密數據時的性能問題,故往往採用混合加密。這里就需要引入對稱加密,如下圖:
在對數據加密時,我們採用了雙方共享的對稱秘鑰來加密。而對稱秘鑰盡量不要在網路上傳輸,以免丟失。這里的共享對稱秘鑰是根據自己的私鑰和對方的公鑰計算出的,然後適用對稱秘鑰對數據加密。而對方接收到數據時,也計算出對稱秘鑰然後對密文解密。
以上這種對稱秘鑰是不安全的,因為A的私鑰和B的公鑰一般短期內固定,所以共享對稱秘鑰也是固定不變的。為了增強安全性,最好的方式是每次交互都生成一個臨時的共享對稱秘鑰。那麼如何才能在每次交互過程中生成一個隨機的對稱秘鑰,且不需要傳輸呢?
那麼如何生成隨機的共享秘鑰進行加密呢?
對於發送方A節點,在每次發送時,都生成一個臨時非對稱秘鑰對,然後根據B節點的公鑰 和 臨時的非對稱私鑰 可以計算出一個對稱秘鑰(KA演算法-Key Agreement)。然後利用該對稱秘鑰對數據進行加密,針對共享秘鑰這里的流程如下:
對於B節點,當接收到傳輸過來的數據時,解析出其中A節點的隨機公鑰,之後利用A節點的隨機公鑰 與 B節點自身的私鑰 計算出對稱秘鑰(KA演算法)。之後利用對稱秘鑰機密數據。
對於以上加密方式,其實仍然存在很多問題,比如如何避免重放攻擊(在消息中加入 Nonce ),再比如彩虹表(參考 KDF機制解決 )之類的問題。由於時間及能力有限,故暫時忽略。
那麼究竟應該採用何種加密呢?
主要還是基於要傳輸的數據的安全等級來考量。不重要的數據其實做好認證和簽名就可以,但是很重要的數據就需要採用安全等級比較高的加密方案了。
密碼套件 是一個網路協議的概念。其中主要包括身份認證、加密、消息認證(MAC)、秘鑰交換的演算法組成。
在整個網路的傳輸過程中,根據密碼套件主要分如下幾大類演算法:
秘鑰交換演算法:比如ECDHE、RSA。主要用於客戶端和服務端握手時如何進行身份驗證。
消息認證演算法:比如SHA1、SHA2、SHA3。主要用於消息摘要。
批量加密演算法:比如AES, 主要用於加密信息流。
偽隨機數演算法:例如TLS 1.2的偽隨機函數使用MAC演算法的散列函數來創建一個 主密鑰 ——連接雙方共享的一個48位元組的私鑰。主密鑰在創建會話密鑰(例如創建MAC)時作為一個熵來源。
在網路中,一次消息的傳輸一般需要在如下4個階段分別進行加密,才能保證消息安全、可靠的傳輸。
握手/網路協商階段:
在雙方進行握手階段,需要進行鏈接的協商。主要的加密演算法包括RSA、DH、ECDH等
身份認證階段:
身份認證階段,需要確定發送的消息的來源來源。主要採用的加密方式包括RSA、DSA、ECDSA(ECC加密,DSA簽名)等。
消息加密階段:
消息加密指對發送的信息流進行加密。主要採用的加密方式包括DES、RC4、AES等。
消息身份認證階段/防篡改階段:
主要是保證消息在傳輸過程中確保沒有被篡改過。主要的加密方式包括MD5、SHA1、SHA2、SHA3等。
ECC :Elliptic Curves Cryptography,橢圓曲線密碼編碼學。是一種根據橢圓上點倍積生成 公鑰、私鑰的演算法。用於生成公私秘鑰。
ECDSA :用於數字簽名,是一種數字簽名演算法。一種有效的數字簽名使接收者有理由相信消息是由已知的發送者創建的,從而發送者不能否認已經發送了消息(身份驗證和不可否認),並且消息在運輸過程中沒有改變。ECDSA簽名演算法是ECC與DSA的結合,整個簽名過程與DSA類似,所不一樣的是簽名中採取的演算法為ECC,最後簽名出來的值也是分為r,s。 主要用於身份認證階段 。
ECDH :也是基於ECC演算法的霍夫曼樹秘鑰,通過ECDH,雙方可以在不共享任何秘密的前提下協商出一個共享秘密,並且是這種共享秘鑰是為當前的通信暫時性的隨機生成的,通信一旦中斷秘鑰就消失。 主要用於握手磋商階段。
ECIES: 是一種集成加密方案,也可稱為一種混合加密方案,它提供了對所選擇的明文和選擇的密碼文本攻擊的語義安全性。ECIES可以使用不同類型的函數:秘鑰協商函數(KA),秘鑰推導函數(KDF),對稱加密方案(ENC),哈希函數(HASH), H-MAC函數(MAC)。
ECC 是橢圓加密演算法,主要講述了按照公私鑰怎麼在橢圓上產生,並且不可逆。 ECDSA 則主要是採用ECC演算法怎麼來做簽名, ECDH 則是採用ECC演算法怎麼生成對稱秘鑰。以上三者都是對ECC加密演算法的應用。而現實場景中,我們往往會採用混合加密(對稱加密,非對稱加密結合使用,簽名技術等一起使用)。 ECIES 就是底層利用ECC演算法提供的一套集成(混合)加密方案。其中包括了非對稱加密,對稱加密和簽名的功能。
<meta charset="utf-8">
這個先訂條件是為了保證曲線不包含奇點。
所以,隨著曲線參數a和b的不斷變化,曲線也呈現出了不同的形狀。比如:
所有的非對稱加密的基本原理基本都是基於一個公式 K = k G。其中K代表公鑰,k代表私鑰,G代表某一個選取的基點。非對稱加密的演算法 就是要保證 該公式 不可進行逆運算( 也就是說G/K是無法計算的 )。 *
ECC是如何計算出公私鑰呢?這里我按照我自己的理解來描述。
我理解,ECC的核心思想就是:選擇曲線上的一個基點G,之後隨機在ECC曲線上取一個點k(作為私鑰),然後根據k G計算出我們的公鑰K。並且保證公鑰K也要在曲線上。*
那麼k G怎麼計算呢?如何計算k G才能保證最後的結果不可逆呢?這就是ECC演算法要解決的。
首先,我們先隨便選擇一條ECC曲線,a = -3, b = 7 得到如下曲線:
在這個曲線上,我隨機選取兩個點,這兩個點的乘法怎麼算呢?我們可以簡化下問題,乘法是都可以用加法表示的,比如2 2 = 2+2,3 5 = 5+5+5。 那麼我們只要能在曲線上計算出加法,理論上就能算乘法。所以,只要能在這個曲線上進行加法計算,理論上就可以來計算乘法,理論上也就可以計算k*G這種表達式的值。
曲線上兩點的加法又怎麼算呢?這里ECC為了保證不可逆性,在曲線上自定義了加法體系。
現實中,1+1=2,2+2=4,但在ECC演算法里,我們理解的這種加法體系是不可能。故需要自定義一套適用於該曲線的加法體系。
ECC定義,在圖形中隨機找一條直線,與ECC曲線相交於三個點(也有可能是兩個點),這三點分別是P、Q、R。
那麼P+Q+R = 0。其中0 不是坐標軸上的0點,而是ECC中的無窮遠點。也就是說定義了無窮遠點為0點。
同樣,我們就能得出 P+Q = -R。 由於R 與-R是關於X軸對稱的,所以我們就能在曲線上找到其坐標。
P+R+Q = 0, 故P+R = -Q , 如上圖。
以上就描述了ECC曲線的世界裡是如何進行加法運算的。
從上圖可看出,直線與曲線只有兩個交點,也就是說 直線是曲線的切線。此時P,R 重合了。
也就是P = R, 根據上述ECC的加法體系,P+R+Q = 0, 就可以得出 P+R+Q = 2P+Q = 2R+Q=0
於是乎得到 2 P = -Q (是不是與我們非對稱演算法的公式 K = k G 越來越近了)。
於是我們得出一個結論,可以算乘法,不過只有在切點的時候才能算乘法,而且只能算2的乘法。
假若 2 可以變成任意個數進行想乘,那麼就能代表在ECC曲線里可以進行乘法運算,那麼ECC演算法就能滿足非對稱加密演算法的要求了。
那麼我們是不是可以隨機任何一個數的乘法都可以算呢? 答案是肯定的。 也就是點倍積 計算方式。
選一個隨機數 k, 那麼k * P等於多少呢?
我們知道在計算機的世界裡,所有的都是二進制的,ECC既然能算2的乘法,那麼我們可以將隨機數k描 述成二進制然後計算。假若k = 151 = 10010111
由於2 P = -Q 所以 這樣就計算出了k P。 這就是點倍積演算法 。所以在ECC的曲線體系下是可以來計算乘法,那麼以為這非對稱加密的方式是可行的。
至於為什麼這樣計算 是不可逆的。這需要大量的推演,我也不了解。但是我覺得可以這樣理解:
我們的手錶上,一般都有時間刻度。現在如果把1990年01月01日0點0分0秒作為起始點,如果告訴你至起始點為止時間流逝了 整1年,那麼我們是可以計算出現在的時間的,也就是能在手錶上將時分秒指針應該指向00:00:00。但是反過來,我說現在手錶上的時分秒指針指向了00:00:00,你能告訴我至起始點算過了有幾年了么?
ECDSA簽名演算法和其他DSA、RSA基本相似,都是採用私鑰簽名,公鑰驗證。只不過演算法體系採用的是ECC的演算法。交互的雙方要採用同一套參數體系。簽名原理如下:
在曲線上選取一個無窮遠點為基點 G = (x,y)。隨機在曲線上取一點k 作為私鑰, K = k*G 計算出公鑰。
簽名過程:
生成隨機數R, 計算出RG.
根據隨機數R,消息M的HASH值H,以及私鑰k, 計算出簽名S = (H+kx)/R.
將消息M,RG,S發送給接收方。
簽名驗證過程:
接收到消息M, RG,S
根據消息計算出HASH值H
根據發送方的公鑰K,計算 HG/S + xK/S, 將計算的結果與 RG比較。如果相等則驗證成功。
公式推論:
HG/S + xK/S = HG/S + x(kG)/S = (H+xk)/GS = RG
在介紹原理前,說明一下ECC是滿足結合律和交換律的,也就是說A+B+C = A+C+B = (A+C)+B。
這里舉一個WIKI上的例子說明如何生成共享秘鑰,也可以參考 Alice And Bob 的例子。
Alice 與Bob 要進行通信,雙方前提都是基於 同一參數體系的ECC生成的 公鑰和私鑰。所以有ECC有共同的基點G。
生成秘鑰階段:
Alice 採用公鑰演算法 KA = ka * G ,生成了公鑰KA和私鑰ka, 並公開公鑰KA。
Bob 採用公鑰演算法 KB = kb * G ,生成了公鑰KB和私鑰 kb, 並公開公鑰KB。
計算ECDH階段:
Alice 利用計算公式 Q = ka * KB 計算出一個秘鑰Q。
Bob 利用計算公式 Q' = kb * KA 計算出一個秘鑰Q'。
共享秘鑰驗證:
Q = ka KB = ka * kb * G = ka * G * kb = KA * kb = kb * KA = Q'
故 雙方分別計算出的共享秘鑰不需要進行公開就可採用Q進行加密。我們將Q稱為共享秘鑰。
在以太坊中,採用的ECIEC的加密套件中的其他內容:
1、其中HASH演算法採用的是最安全的SHA3演算法 Keccak 。
2、簽名演算法採用的是 ECDSA
3、認證方式採用的是 H-MAC
4、ECC的參數體系採用了secp256k1, 其他參數體系 參考這里
H-MAC 全程叫做 Hash-based Message Authentication Code. 其模型如下:
在 以太坊 的 UDP通信時(RPC通信加密方式不同),則採用了以上的實現方式,並擴展化了。
首先,以太坊的UDP通信的結構如下:
其中,sig是 經過 私鑰加密的簽名信息。mac是可以理解為整個消息的摘要, ptype是消息的事件類型,data則是經過RLP編碼後的傳輸數據。
其UDP的整個的加密,認證,簽名模型如下:
『叄』 聊聊錢包、私匙、公匙和地址
自從比特幣誕生伊始,與此相關的私鑰、公鑰、地址等名詞概念就不斷出現在大眾眼前,那麼這四個概念之間是什麼樣的關系呢?今天就給大家簡單聊一些相關的專業名詞和背後的邏輯。
1 這些名詞的關系是什麼樣的?
如果用一句話說明這幾個名詞的關系,那就是: 錢包生成私鑰 → 私鑰生成公鑰 → 公鑰生成公鑰哈希 → 公鑰哈希生成地址 → 地址用來接受比特幣 ,簡單吧,能聽懂吧。
2 這幾個名詞究竟是什麼東西?
還是一句話概括, 除了錢包是軟體以外,剩下的四個都是長度不一的字元串 ,比如私鑰是52位的字元串,地址是34位的字元串。
3 這四個字元串分別從哪裡來的?
私鑰 由錢包軟體隨機生成,隨後用密碼演算法生成公鑰和地址,如果用等式表示的話,可寫成如下形式:
公鑰=演算法1(私鑰)
公鑰哈希=演算法2(公鑰)
地址=演算法3(公鑰哈希)
所以, 地址 =演算法3(演算法2(演算法1(私鑰)))
其中,演算法1,演算法2,演算法3都是公開的演算法。
4 這幾個字元串哪個必須保密,哪個可以公開?
私鑰絕對不能公開 ,因為有了它本質上就取得了對應比特幣的所有權。
地址可以公開 ,因為它是用來接受比特幣的, 公鑰和公鑰哈希也可以公開 ,不過一般情況下你看不到。
5 為什麼地址和公鑰可以公開?
因為 即使被別人知道了地址和公鑰,對方也推算不出你的私鑰,也就掌握不了你的比特幣 。
為什麼推算不出?
舉個例子。電影《模仿游戲》中,英軍即使在得到了engima密碼機(演算法)後仍然無法破解德軍的密碼,原因就是德軍每次發信息都會用一個新的口令(私鑰)作為起始點。在不知道口令的前提下,進行反向暴力破解大概需要幾千萬年,不過最後因為刻板的德國人每次都用同一個口令作為起點,而這個口令還是自然語言,導緻密碼被破解。
所以,每次交易的時候才會要求生成一個新的私鑰,然後得到一個新的地址,這樣你的交易安全性就有了很大的保障。
6 做自己開心的事
從上面的描述我們可以推出,私鑰的本質是一個復雜數學問題的解,當有人向公開地址發送比特幣時,其實是在向全網所有比特幣客戶端發出了一道數學題,而這道題目的正確解,就是你的私鑰。因為那道題是用你的私鑰生成的呀,所以只有你能在第一時間回答出答案,於是比特幣就歸你了,因此 私鑰千萬不能告訴別人。
如何找到私鑰並妥善保管?
在bitcoin-qt軟體中,進入windows debug或者調試窗口,在命令行下輸入 getaddressbyaccount 命令可以查看所有已經生成的錢包地址。選取其中一個地址,然後用 mpprivkey 「地址」命令就能看到私鑰了(54位字元串)。
下圖是用getaddressbyaccount 「」命令查看地址列表,用mpprivkey查看私鑰的截圖,注意第一張圖中由於錢包是加密的,所以直接打mpprivkey命令是看不到私鑰的。
輸入錢包密碼後才能用mpprivkey命令看到私鑰。
剛已經說了私鑰非常的重要,它是真正決定比特幣歸誰的證明。私鑰在bitcoin-qt客戶端里,實際上是存在於一個叫wallet.dat的文件里的,而且剛安裝的bitcoin-qt客戶端是不設密碼的。萬一電腦落入不法分子手中或被黑客攻擊,導致私鑰丟失,就狠尷尬了,所以一定要設置密碼,且密碼一定要遵守隨機復雜大小寫字元數字都有的規則。建議用專門的密碼生成軟體生成,關於密碼軟體,找機會專門說一下。
特別注意,千萬千萬千萬記住了,一定不要把密碼給忘了!因為你 忘了密碼就打不開錢包 wallet.dat 文件了,也就找不到私鑰了 ,然後,就沒有然後了。
我就發生過剛開始倒騰錢包把密碼搞錯了,然後打不開錢包的尷尬,最後只好怒刪wallet.dat文件,讓系統再自己生成一個,這時候的感覺大約相當於把一筆錢埋在了宇宙某顆星球上,然後把坐標圖搞丟了,因為比特世界只認私鑰不認身份證,你掉了就是掉了,再也找不回來了。
不過正因為比特幣的所有權是依靠私鑰確認的,也就有個最狠的保存辦法,老貓也提過,那就是,找到私鑰後記在紙上,然後把紙鎖在保險櫃里,或者乾脆記在腦子里,不過54位的字元串誰特么能記住?然後把電腦上的客戶端連同錢包文件一起刪除。
好了,關於錢包客戶端,大概就說這些吧,相關知識我也是剛開始了解,隨著了解信息的增加,可能會有更新的認識,到時候會再寫出來。
千萬注意,千萬注意,千萬注意不要搞丟了私鑰。
『肆』 一文讀懂,XFS中你必須掌握的密碼與區塊鏈理論術語
人們對於事物的深刻認知,不是像「如何將大象放進冰箱?」那般,只回答「打開冰箱,把大象放進去,關上冰箱」那麼簡單。 任何事物都需要一個抽絲剝繭,化整為零的認知過程。 特別是一個新興的概念和事物,更需要更加細致的了解。
XFS系統是一個分布式文件系統,但它並不是一個單一的框架結構,他 是密碼學、區塊鏈、互聯網等多種技術手段結合的一個有機整體 ,因此,想要更詳細的了解它,我們必須知道一些專業術語的概念。
1.加密網路
加密網路簡單來說就是一個公共區塊鏈。在區塊鏈技術誕生之前,互聯網網路中的數據傳輸其實是沒有任何加密手段的,黑客一旦截取的其中的數據,那麼除非那段數據本身就是密文,否則那些數據就直白地暴露在黑客眼前。
加密網路便是通過區塊鏈技術,由區塊鏈各個節點維護,任何人都可以無需許可加入,更重要的是,整個網路中運轉的數據是加密的。XFS系統便是一個典型的加密網路。
2.哈希演算法
哈希演算法是區塊鏈中用以確保數據完整性和安全性的一個特殊程序。哈希演算法採用的是名為「哈希函數」數學關系,結果輸出被稱為「加密摘要」。加密摘要的特點是任意長度的數據輸入後,返回的都是一個唯一且固定長度的值。
哈希函數具備:
基於這些特性,它在保證加密安全時也被用於防篡改,因為即使對散列函數的數據輸入進行微小更改也會導致完全不同的輸出。這也成為了現代密碼學和區塊鏈的主力。
3.分布式賬本
區塊鏈就是一個分布式賬本,但這個賬本不僅僅可以記錄交易信息,還可以記錄任何數據交互。每個分類帳交易都是一個加密摘要,因此無法在不被檢測到的情況下更改條目。這樣使得區塊鏈使參與者能夠以一種去中心化的方式相互審計。
4.私鑰和公鑰
私鑰和公鑰是區塊鏈通過哈希演算法形成加密後生成的一組用於解密的「鑰匙」。通過對私鑰加密,形成公鑰,此時,原始信息只能通過私鑰進行查看,由用戶自己保存,公鑰就如同一個房屋地址,用於進行數據交互,是可以公開的。反之,如果對公鑰加密,形成私鑰,那麼就會形成不可篡改的數字簽名,因為這個公鑰上的簽名只有私鑰擁有者才能進行創建。
1.節點
節點是一個區塊鏈網路的最基礎建設,也是區塊鏈網路和現實連接的物理設備。單個節點擁有許多的功能,例如緩存數據、驗證信息或將消息轉發到其他節點等。
2.點對點(P2P)網路
區塊鏈所構建的便是去中心化後節點與節點之間的數據交互。傳統的互聯網數據傳輸是一種客戶端—伺服器—客戶端的中心輻射模式。點對點網路則更符合「網」這個詞,在這個網路中,每個節點都在單一通信協議下運行,以在它們之間傳輸數據,避免了因為伺服器單點故障而引發的網路崩潰。
3.共識驗證
區塊鏈的共識驗證解決了大量分散的節點意見不統一的問題,以「少數服從多數」的哲學依據,在區塊鏈網路中,更多的節點認可便意味著「共識」,通常而言,區塊鏈網路中超過51%的節點認可的便會被採用和認可。
4.復制證明和時空證明
這兩個證明在XFS系統中都可以總稱為存儲證明。XFS系統的核心功能之一是數據存儲,因此,為了證明存儲的有效性,便通過復制證明驗證數據是否存在節點存儲空間中,並通過時空證明驗證時間上的持續性。存儲提供方如果在儲存有效期內能持續提交存儲證明,那麼他便會獲得由XFS系統提供的獎勵。
5.冗餘策略和糾刪碼
這是XFS用來平衡數據存儲量的兩個方式。冗餘策略將數據通過多副本的方式備份,確保數據在損壞或丟失後能找回。
糾刪碼則是確保數據在復制、傳輸時不會產生過多備份,節省存儲空間、提高傳輸效率。
6.文件分片協議
XFS將文件切分為N個細小的碎片存儲在節點當中,這些碎片只要有任意 M個碎片即可恢復出數據,這樣只要不同時有 N-M+1 個節點失效就能保證數據完整不丟失。
7.智能合約
XFS中的智能合約是一段程序代碼,由於是基於區塊鏈生成的,因此同樣繼承了區塊鏈不可篡改、可追溯等特點,它能保證雙方執行結果的確定性,這也使得XFS網路中的數據交互變得更加可信。
8.Dapp
即去中心化APP,同普通的APP一樣具備更加方便快捷的網路接入埠,唯一不同的便是它拋棄了傳統APP中心化的特點,這使得Dapp中的數據是歸屬於用戶自身,不用擔心隱私泄露、大數據殺熟等問題。
XFS系統是一個開放性平台,用戶可以自由的在其中使用、設計、創作各種Dapp。
結語
關於XFS中的理論術語基於篇幅原因是很難詳細展開細講的,這其中涉及到了更多的互聯網和區塊鏈專業知識。但通過上面這些簡單的解釋,相信大家對XFS系統也有了一個比較立體的認知,那麼,我們便期待打破傳統中心化存儲弊端,開船全新存儲時代的XFS新一代分布式文件系統吧。
『伍』 區塊鏈中的私鑰和公鑰
公開密鑰(public key,簡稱公鑰)、私有密鑰(private key,簡稱私鑰)是密碼學里非對稱加密演算法的內容。顧名思義,公鑰是可以公開的,而私鑰則要進行安全保管。
私鑰是由隨機種子生成的,公鑰是將私鑰通過演算法推導出來。 由於公鑰太長,為了簡便實用,就出現了「地址」,地址是公鑰推導出來的。這些推導過程是單向不可逆的。也就是地址不能推出公鑰,公鑰不能推出私鑰。
從中我們可以看出,公鑰與私鑰是成對存在的。它們的用處用16個字來概括: 公鑰加密,私鑰解密;私鑰簽名,公鑰驗簽。
公鑰加密,私鑰解密。也就是用公鑰加密原數據,只有對應的私鑰才能解開原數據。這樣能使得原數據在網路中傳播不被竊取,保護隱私。
私鑰簽名,公鑰驗簽。用私鑰對原數據進行簽名,只有對應的公鑰才能驗證簽名串與原數據是匹配的。
可以用鎖頭,鑰匙來比喻公鑰,私鑰。鎖頭用來鎖定某物品,鑰匙來解鎖該物品。鑰匙所有者是物品的所有者。事實上就是這樣,公私鑰對奠定了區塊鏈的賬戶體系及資產(Token等)的所有權,區塊鏈的資產是鎖定在公鑰上的,私鑰是用來解鎖該資產然後使用。比如說我要轉讓資產給你,就是我用我的私鑰簽名了一筆我轉讓資產給你的交易(含資產,數量等等)提交到區塊鏈網路里,節點會驗證該簽名,正確則從我的公鑰上解鎖資產鎖定到你的公鑰上。
我們看到了私鑰的作用了吧,跟中心化記賬系統(支付寶、微信支付等)的密碼一樣重要,擁有私鑰就擁有了資產所有權,所以我們千萬要保管好私鑰,不能泄露。
『陸』 【貓說】打開比特幣錢包的兩把鑰匙:私鑰、公鑰
如果不了解區塊鏈,不知道公鑰、私鑰這些最基本的概念,擁有錢包對幣圈新人來講,就好像拿手指頭去捅鱷魚的腦袋,風險極高。此文謹獻給幣圈新朋友,幫助大家梳理比特幣錢包的基本常識。
區塊鏈觀察網在 《區塊鏈是什麼》 一文中提到過,在區塊鏈世界裡,每個人都擁有兩把獨一無二的虛擬鑰匙:公鑰和私鑰。
「公鑰」,可以簡單理解為銀行卡,這是可以發給交易對方看的,銀行卡號則相當於比特幣轉賬中要用到的「地址」。
講得專業一點,公鑰就是一個65位元組的字元串,多長呢?130個字母和數字堆在一起。公鑰太長的話,第一交易起來忒麻煩,第二幹嘛非得暴露公鑰的真實內容呢,這就好像把自己的銀行卡拿出來到處給人看。因此,我們現在看到的地址,就是經過摘要演算法生成的、更短一點的公鑰。
對方知道你的地址才能給你打錢;而且,任何人有了你的地址,都能在Blockchain.info官網查詢這個錢包地址交易了多少次(No. Transactions),收過多少個比特幣(Total Received),以及錢包里還剩下多少個比特幣(Final Balance),如下圖:
「私鑰」,就像打死不能告訴別人的銀行卡密碼。它是一串256位的隨機數。因為讓非IT用戶去記住這個滿屏0 和 1的二進制私鑰是特別不人道的事兒,所以對這一大串私鑰進行了處理,最後私鑰就以5 / K / L 開頭的字元串呈現在我們面前。
公鑰、私鑰、地址之間的關系是:
1)私鑰 → 公鑰 → 地址
私鑰生成唯一對應的公鑰,公鑰再生成唯一對應的地址;
2)私鑰加密,公鑰解密
也就是說,A使用私鑰對交易信息進行加密(數字簽名),B則使用A的公鑰對這個數字簽名進行解密。
其中,私鑰是極度私密的東西。如果你把私鑰發給別人,現在就開始寫一部長篇小說吧,名字都幫你想好了,就叫《永別了,比特幣》。
如果是李笑來老師(網傳擁有數十萬個BTC)這類幣圈大佬,強烈建議使用冷錢包(離線錢包),分開儲存;電視里的富豪在銀行有自己的保險箱,有條件的話也可以參考。
當時,上述方法是安全系數最高的做法。但作為韭菜接班人,暫且假設我們最初只用閑置資金、持有少量的比特幣,比如,小於5個。那麼,動輒上千成本、操作復雜的冷錢包就有點殺雞用牛刀了;因此,區塊鏈觀察網把選擇范圍限定在交易所和輕錢包2項:
在交易平台上買了(極少量)比特幣,可以先不提出來,繼續存在交易所。這種方式最適合幣圈新手。在沒有深入了解每種加密貨幣背後的故事之前,鮮嫩的我們總是充滿了好奇,而放在交易所的比特幣,可以直接進行幣幣交易,交易簡單快捷,不用經數字錢包導來導去;另一方面,平台上幣種齊全,可以滿足我們的嘗鮮心理,方便隨時小試牛刀。
而且像火幣、幣安(已被牆)這些大型交易所,不僅安全等級比某些專為收割韭菜而生的小平台高很多,而且操作簡單,很快就能上手,只需保管好自己的賬號、密碼就行了(再安全一級的話,開啟谷歌二次驗證),其他的就交給平台。
值得注意的是,存在交易所上的資產並不完全屬於自己,更確切地說是借給平台的,我們在資產那一欄看到的數字,相當於平台向我們借錢而打的白條。此外,交易平台本身不是去中心化的,如果安全措施不到位,用戶的賬號密碼有可能被黑客拿到。
輕錢包是相對於「全節點」錢包來說的。
全節點錢包,比如 Bitcoin-Core(核心錢包),運行時需要同步所有區塊鏈數據,佔用相當大內存空間(目前至少50GB以上),完全去中心化;
輕錢包雖然也依賴比特幣網路上其他全節點,但其僅僅同步跟自己有關的交易數據,基本實現去中心化的同時,也提升了用戶體驗。
根據不同的設備類型,我們把輕錢包分為:
1)PC錢包:適用於電腦桌面操作系統(如Windows/MacOS/Linus);
2)手機錢包:適用於安卓、iOS智能手機,比如比太錢包(以太也有PC端);
3)網頁錢包:通過瀏覽器訪問,比如上文提過的blockchain網頁版。
輕錢包操作比較簡單,一般是免費獲取。申請錢包的時候,系統會生成一個私鑰。准備敲黑板!
1)不要截圖、拍照存在手機里;
2)不要把私鑰信息發給任何人;
3)最好手寫(幾份)抄下,藏在你覺得最安全的地方。
總之一句話,誰掌握了錢包的私鑰,誰就擁有錢包的絕對控制權。私鑰只要掌握在你的手裡,比特幣就絕不會丟。
最後多說幾句,作為普通投資者,我們需要做的並不多:
1)走點心,不要把手機弄丟了,畢竟丟了對手機里的比特幣錢包有風險;
2)不要手癢刪掉設備上的錢包應用,除非你決定再也不用這個錢包了,否則後期很麻煩;
3)設置復雜的密碼(原因見第1點),並用心去記牢,這是私鑰弄丟以後留的一手。
對於記不住密碼,又懶得科學備份私鑰的朋友,咱還是把錢存在銀行里吧。
『柒』 像誠信幣這樣基於區塊鏈的數字貨幣中,私鑰,公鑰,地址到底是怎麼回事
很多小白剛入場時,就被私鑰,公鑰,地址,等等關系弄暈頭。有的甚至把自己私鑰搞丟了,地址上特別有錢,可偏偏就是取不出來,今天小白就把私鑰,公鑰,還有地址之間的關系跟大家捋一捋。
私鑰、公鑰和地址這三者的關系是:
私鑰轉換成(生成)公鑰,再轉換成地址,如果某個地址上有比特幣或誠信幣,就可以使用轉換成這個地址的私鑰花費上面的誠信幣。公鑰和地址的生成都依賴於私鑰,所以私鑰才最重要。
手機錢包也是同樣,但因為手機的文件管理方式不像計算機那麼方便。所以一般手機錢包會提供一個名為或類似「導出私鑰」的功能,通過這個功能,就可以將私鑰用各種形式導出來。
比如比特幣手機錢包可以導出為二維碼,可以列印或者掃描到紙上。更換手機時,裝好比特幣錢包掃描一下這個二維碼,就可以實現遷移比特幣。比特幣手機錢包和誠信幣手機錢包可以導出為一份明文字元串,列印到紙上——這就是紙錢包。
紙錢包讓用戶可以到任何有比特幣或誠信幣錢包的終端來花費你的比特幣或誠信幣。
由於錢包丟失或損壞會導致失去私鑰,從而徹底失去該數字貨幣的轉賬權。要防止出現這樣的悲劇,就要記得經常備份錢包里的數據。除了地址外,備份時也保存了所有的私鑰。
總結
私鑰要保護好,防止丟失,防止忘記,在手機清信息時方式被清除,最好手抄一份,但不要泄露。
要防止自己錢包丟失或損壞,導致丟失私鑰,喪失數字貨幣的轉賬權,否則你頓再多幣取不出來,還不是沒用。
『捌』 【區塊鏈】比特幣私鑰、公鑰、簽名
在 了解區塊鏈的基礎名詞概念 提到地址由字元和數字組成,但沒有說明怎樣產生的。銀行卡號由銀行核心系統生成,那比特幣地址是通過什麼生成的呢?看下圖:
對於剛接觸比特幣的小白來說,看到這張圖就蒙圈了,究竟什麼是私鑰、公鑰,為什麼生成個地址要這么麻煩嗎?
現在請大家記住這句話: 私鑰通過橢圓曲線相乘生成公鑰,使用公鑰不能導推出私鑰;公鑰通過哈希函數生成比特幣地址,地址也無法導推出公鑰 。
通過這么復雜演算法才算出地址,那私鑰和公鑰只是為了生成地址嗎?不是的,他們還有其他用途,我們先了解下私鑰和公鑰。
現在已經講解地址、挖礦、工作量證明、算力、區塊、區塊鏈等等的概念,不知大家還有印象嗎?如果忘記請溫習這些概念,因為後續很多地方都會用到這些概念。明天講解下區塊鏈有哪些特點。
參考書籍:《精通比特幣》
區塊鏈知識專題:
比特幣記賬方式(區塊鏈知識2)
了解塊鏈的基礎名詞概念(區塊鏈知識1)
『玖』 區塊鏈私鑰、公鑰和地址是什麼關系
區塊鏈私鑰,公鑰和地址三者之間的關系是私鑰生成公鑰,公鑰轉化成為地址。所以私鑰是最重要的。這三者之間是不可逆的,地址不能生成公鑰,公鑰也不能轉化成為私鑰。
再次是區塊鏈地址,它通常是由26至35個字元的字母和數字字元串組成,區塊鏈地址主要來源於公鑰,區塊鏈地址相當於我們平時使用的銀行卡卡號,是可以公開給任何人的,沒有安全限制,主要作用就是用於接收和發送區塊鏈上的數字資產。
區塊鏈技術現在處於初期發展階段,但因其具有去中心化、安全性、不可篡改等特性,今後的生活工作中可能會產生殺手級別的落地應用而備受各國重視。本文僅供參考,歡迎留言討論。