當前位置:首頁 » 區塊鏈知識 » 區塊鏈中的公鑰私鑰怎麼來的

區塊鏈中的公鑰私鑰怎麼來的

發布時間: 2022-09-28 10:33:43

區塊鏈中的私鑰是指什麼

私鑰公鑰這個名詞可謂是所有考題中最簡單的了。
公開的密鑰叫公鑰,只有自己知道的叫私鑰。
公鑰(Public Key)與私鑰(Private Key)是通過一種演算法得到的一個密鑰對(即一個公鑰和一個私鑰),公鑰是密鑰對中公開的部分,私鑰則是非公開的部分。
一句話明了~

㈡ 公鑰與私鑰的區別與應用。

現實生活中,我要給依依轉1個比特幣,我需要在比特幣交易平台、比特幣錢包或者比特幣客戶端裡面,輸入我的比特幣錢包地址、依依的錢包地址、轉出比特幣的數量、手續費。然後,我們等十分鍾左右,礦工處理完交易信息之後,這1個比特幣就成功地轉給依依了。

這個過程看似很簡單也很便捷,跟我們現在的銀行卡轉賬沒什麼區別,但是,你知道這個過程是怎樣在比特幣系統裡面實現的嗎?它隱藏了哪些原理呢?又或者,它是如何保證交易能夠在一個安全的環境下進行呢?

我們今天就來講一講。

對於轉出方和接收方來講,也就是我和依依(我是轉出方,依依是接收方)我們都需要出具兩個東西:錢包地址、私鑰。

我們先說錢包地址。比特幣錢包地址其實就相當於銀行卡、支付寶賬號、微信錢包賬號,是比特幣支付轉賬的「憑證」,記錄著平台與平台、錢包與錢包、錢包與平台之間的轉賬信息。

我們在使用銀行卡、支付寶、微信轉賬時都需要密碼,才能夠支付成功。那麼,在比特幣轉賬中,同樣也有這么一個「密碼」,這個「密碼「被稱作「私鑰」。掌握了私鑰,就掌握了其對應比特幣地址上的生殺大權。

「私鑰」是屬於「非對稱加密演算法」裡面的概念,與之對應的還有另一個概念,名叫:「公鑰」。

公鑰和私鑰,從字面意思我們就可以理解:公鑰,是可以公開的;而私鑰,是私人的、你自己擁有的、需要絕對保密的。

公鑰是根據私鑰計算形成的,比特幣系統使用的是橢圓曲線加密演算法,來根據私鑰計算出公鑰。這就使得,公鑰和私鑰形成了唯一對應的關系:當你用了其中一把鑰匙加密信息時,只有配對的另一把鑰匙才能解密。所以,正是基於這種唯一對應的關系,它們可以用來驗證信息發送方的身份,還可以做到絕對的保密。

我們舉個例子講一下,在非對稱加密演算法中,公鑰和私鑰是怎麼運作的。

我們知道,公鑰是可以對外公開的,那麼,所有人都知道我們的公鑰。在轉賬過程中,我不僅要確保比特幣轉給依依,而不會轉給別人,還得讓依依知道,這些比特幣是我轉給她的,不是鹿鹿,也不是韭哥。

比特幣系統可以滿足我的上述訴求:比特幣系統會把我的交易信息縮短成固定長度的字元串,也就是一段摘要,然後把我的私鑰附在這個摘要上,形成一個數字簽名。因為數字簽名裡面隱含了我的私鑰信息,所以,數字簽名可以證明我的身份。

完成之後,完整的交易信息和數字簽名會一起廣播給礦工,礦工用我的公鑰進行驗證、看看我的公鑰和我的數字簽名能不能匹配上,如果驗證成功,都沒問題,那麼,就能夠說明這個交易確實是我發出的,而且信息沒有被更改。

接下來,礦工需要驗證,這筆交易花費的比特幣是否是「未被花費」的交易。如果驗證成功,則將其放入「未確認交易」,等待被打包;如果驗證失敗,則該交易會被標記為「無效交易」,不會被打包。

其實,公鑰和私鑰,簡單理解就是:既然是加密,那肯定是不希望別人知道我的消息,所以只能我才能解密,所以可得出:公鑰負責加密,私鑰負責解密;同理,既然是簽名,那肯定是不希望有人冒充我的身份,只有我才能發布這個數字簽名,所以可得出:私鑰負責簽名,公鑰負責驗證。

到這里,我們簡單概括一下上面的內容。上面我們主要講到這么幾個詞:私鑰、公鑰、錢包地址、數字簽名,它們之間的關系我們理一下:

(1)私鑰是系統隨機生成的,公鑰是由私鑰計算得出的,錢包地址是由公鑰計算得出的,也就是:私鑰——公鑰——錢包地址,這樣一個過程;

(2)數字簽名,是由交易信息+私鑰信息計算得出的,因為數字簽名隱含私鑰信息,所以可以證明自己的身份。

私鑰、公鑰都是密碼學范疇的,屬於「非對稱加密」演算法中的「橢圓加密演算法」,之所以採用這種演算法,是為了保障交易的安全,二者的作用在於:

(1)公鑰加密,私鑰解密:公鑰全網公開,我用依依的公鑰給信息加密,依依用自己的私鑰可以解密;

(2)私鑰簽名,公鑰驗證:我給依依發信息,我加上我自己的私鑰信息形成數字簽名,依依用我的公鑰來驗證,驗證成功就證明的確是我發送的信息。

只不過,在比特幣交易中,加密解密啦、驗證啦這些都交給礦工了。

至於我們現在經常用的錢包APP,只不過是私鑰、錢包地址和其他區塊鏈數據的管理工具而已。錢包又分冷錢包和熱錢包,冷錢包是離線的,永遠不聯網的,一般是以一些實體的形式出現,比如小本子什麼的;熱錢包是聯網的,我們用的錢包APP就屬於熱錢包。

㈢ 區塊鏈常見的名詞解釋

1.區塊鏈(BlockChain)

      區塊鏈是一串通過驗證的區塊,其中每個區塊都與上一個區塊相連,一直連到創世區塊。區塊鏈是比特幣等數字貨幣的底層技術,是一個去中心化的分布式共享賬本。區塊鏈與人工智慧、大數據並稱為金融科技的三大方向。

2.比特幣(Bitcoin)

      比特幣是區塊鏈技術的第一個落地應用,最初是一種點對點的電子現金(Bitcoin: A Peer-to-Peer Electronic Cash System)。如今,比特幣已經根據中本聰的思路設計發展成為開源系統,以及構建在其上的數字貨幣網路。

3.中本聰(Satoshi Nakamoto)

      中本聰是一個化名,他是比特幣的創始人兼早期開發者,2008年,中本聰在密碼朋克中發表了比特幣的白皮書,Bitcoin: A Peer-to-Peer Electronic Cash System,構建了比特幣系統的基本框架。2009年,他為比特幣系統搭建了一個開源項目,正式宣告了比特幣的誕生。但是當比特幣漸成氣候時,中本聰卻悄然離去,銷聲匿跡於互聯網上。

4.數字貨幣(Token)

      區塊鏈最初的應用形式就是數字貨幣,區塊鏈的出現本身也是為數字貨幣服務。目前來說區塊鏈應用最好的領域是金融領域,這是因為區塊鏈技術更適合於為金融場景服務。數字貨幣是電子形式的替代貨幣,它是屬於虛擬世界中的虛擬貨幣。目前全世界發行的數字貨幣有成千上萬種,它們可以通過交易所與現實世界中的貨幣進行交易,或者與其它數字貨幣進行交易。

5.挖礦(Mining)

比特幣被比喻為數字黃金,在網路中,通過競爭計算能力獲得區塊的認可權,進而獲得區塊的代幣獎勵以及交易費的獎勵,而這種方式就是在系統中獲取初始比特幣的方法,就好像當年金銀被從地下開采出來一樣,所以被稱為挖礦。.

6.礦工(Miner)

通過提供算力進行挖礦的節點,就被稱為礦工,當然有時候也是指節點的所有人。

7.公鑰私鑰(Public Keys/Private Keys)

      公鑰和私鑰,是非對稱加密演算法的方式,這也是對以前的對稱加密演算法的提高。對稱加密演算法用一套密碼來加解密,知道了加密密碼,也就可以破解密文;而非對稱加密演算法,則是存在兩套密碼,用公鑰來加密,但是用私鑰來解密,這樣就保證了密碼的安全性。在比特幣系統中,私鑰本質上是由32個位元組組成的數組,公鑰和地址的生成都依賴私鑰,有了私鑰就能生成公鑰和地址,就能夠對應使用地址上的比特幣。

8.哈希值(Hash)

哈希演算法將任意長度的二進制值映射為固定長度的較小二進制值, 這個小的二進制值就是哈希值。哈希值是一段數據唯一且極其緊湊的數值表示形式。哪怕只更改一段明文中的一個字母,隨後產生的哈希值都將差別極大。要找到對應同一哈希值的兩個不同的輸入,從計算的角度來說基本上是不可能的。

9.共識機制(Consensus)

      區塊鏈作為一種按時間順序存儲數據的數據結構,可支持不同的共識機制。共識機制是區塊鏈技術的重要組件。區塊鏈共識機制的目標是使所有的誠實節點保存一致的區塊鏈視圖,同時滿足兩個性質:

  (1)一致性。所有誠實節點保存的區塊鏈的前綴部分完全相同。

  (2)有效性。由某誠實節點發布的信息終將被其他所有誠實節點記錄在自己的區塊鏈中

10.錢包(Wallet)

      比特幣的錢包不存余額,在比特幣的世界中也沒有「余額」這個概念,這里的錢包是指保存比特幣地址和私鑰的客戶端或者軟體,可以用它來接收、發送和存儲你的比特幣。

㈣ 什麼是公鑰和私鑰

公鑰和私鑰是通過一種演算法得到的一個密鑰對(即一個公鑰和一個私鑰),將其中的一個向外界公開,稱為公鑰;另一個自己保留,稱為私鑰。通過這種演算法得到的密鑰對能保證在世界范圍內是唯一的。使用這個密鑰對的時候,如果用其中一個密鑰加密一段數據,必須用另一個密鑰解密。比如用公鑰加密數據就必須用私鑰解密,如果用私鑰加密也必須用公鑰解密,否則解密將不會成功。

㈤ 區塊鏈一般概念摘要

雖然是個前端開發,但是阻擋不了我八卦各種熱門的心。下面簡單匯總下一些學習到的概念性東西。

1、區塊鏈技術隨比特幣誕生,因此先了解比特幣概念

2、比特幣是什麼

(1)、基於分布式網路的數字貨幣

3、比特系統運行原理

(1)、所有節點都會保存完整賬本

(2)、賬本保持一致性

4、區塊鏈記賬原理

hash函數在區塊鏈技術中有廣泛的運用

(1)、哈希函數hash:任何信息hash後會得到一個簡短的摘要信息

(2)、hash特點:簡化信息、標識信息、隱匿信息、驗證信息

(3)、區塊鏈記賬會把時間節點的賬單信息hash,構成一個區塊

(4)、比特幣系統約10分鍾記賬一次,即每個區塊生成的時間間隔大約10分鍾

(5)、記錄下一個賬單時,會把上一個區塊的hash值和當前賬單的信息一起作為原始信息進行hash

(6)、每個區塊都包含了之前區塊的信息,這些區塊組合成了區塊鏈

5、比特幣的所有權-非對稱加密應用

比特幣系統使用了橢圓曲線簽名演算法,演算法的私鑰由32個位元組隨機數組成,通過私鑰可以計算出公鑰,公鑰經過一序列哈希演算法和編碼演算法得到比特幣地址,地址也可以理解為公鑰的摘要。

(1)、轉賬是把比特幣從一個地址轉移到另一個地址

(2)、地址私鑰是非對稱的關系,私鑰經過一系列的運算(其中包含兩次hash),就可以得到地址,但是從地址無法得到私鑰

(3)、轉賬成功後廣播其他節點,其他節點驗證成功後再轉發到相鄰的節點,廣播的信息包含了原始的信息和簽名信息

(4)、驗證,其他節點驗證簽名信息是不是付款方用私鑰對交易原始信息簽名產生的,如果是才記錄(再驗證有足夠余額)

6、比特幣如何挖礦

(1)、完成記賬的節點可以獲得系統給予的一定數量比特幣獎勵(這個獎勵過程也就是比特幣的發行過程,因此大家把記賬稱為挖礦)

(2)、一段時間內只有一人可以記賬成功,因此需要收集沒有被收集的原始交易信息,檢查有沒有餘額、正確簽名

(3)、為了提高記賬難度,十分鍾左右只有一人可以記賬,hash結果需要若干0開頭,並且進行hash時引入隨機數變數

(4)、隨著更多礦工的加入,游戲難度越來越大,計算難度加大,電力損耗等加大,國內電力成本低,中國算力占整個網路的一半以上

(5)、網路中只有最快解密的區塊,才會添加到賬本中,其他的節點復制,保證賬本的唯一性。如果有節點作弊,導致整個網路不通過,則會被丟棄再也不會記錄到總賬本中。因此所有節點都會遵守比特幣系統的共同協議。

【關於區塊鏈會延伸到那些領域的思考】:

由以上的概念可以總結出,區塊鏈技術存在這安全性、唯一性、去中心化。

原則上是可以避免部分信息泄露,讓確認方既可以確認你的身份,又無需暴露自己的真是用戶信息等。

目前區塊鏈技術集中被運用再比特幣,我覺得後續更大的意義應該在需要數據私密性、安全性的領域。

【關於區塊鏈目前發展的瓶頸和局限性思考】:

由於每個節點都參與了整個賬本記錄活動,難免造成資源的浪費和損耗。以及加大了每個節點的計算難度,後續的發展和普及需要每個節點的硬體提升。

㈥ 公鑰和私鑰是如何產生的

但是既然這個規律(公鑰)已經被公布出來了,為什麼還需要另一個規律(私鑰)來解密,我們把給出的公鑰進行反向一下不就可以解密了嗎?為什麼公鑰解不凱密文?

首先公鑰、私鑰都可以加密的(只是加密的用途不同),而解密要兩個混合才行

你所說的「公鑰進行反向」不是很對,你學過化學 那雞蛋加熱後再冷卻能成原來的樣子嗎? 並不是所有的都是可逆的

加密解密的過程是用到 兩個很大的素數的乘積來因式分解(據我了解),具體方法我也不懂 那是三個很著名的數學家一起弄出來的 ,還因為這個得了諾貝爾獎 呵呵

㈦ 區塊鏈密碼演算法是怎樣的

區塊鏈作為新興技術受到越來越廣泛的關注,是一種傳統技術在互聯網時代下的新的應用,這其中包括分布式數據存儲技術、共識機制和密碼學等。隨著各種區塊鏈研究聯盟的創建,相關研究得到了越來越多的資金和人員支持。區塊鏈使用的Hash演算法、零知識證明、環簽名等密碼演算法:

Hash演算法

哈希演算法作為區塊鏈基礎技術,Hash函數的本質是將任意長度(有限)的一組數據映射到一組已定義長度的數據流中。若此函數同時滿足:

(1)對任意輸入的一組數據Hash值的計算都特別簡單;

(2)想要找到2個不同的擁有相同Hash值的數據是計算困難的。

滿足上述兩條性質的Hash函數也被稱為加密Hash函數,不引起矛盾的情況下,Hash函數通常指的是加密Hash函數。對於Hash函數,找到使得被稱為一次碰撞。當前流行的Hash函數有MD5,SHA1,SHA2,SHA3。

比特幣使用的是SHA256,大多區塊鏈系統使用的都是SHA256演算法。所以這里先介紹一下SHA256。

1、 SHA256演算法步驟

STEP1:附加填充比特。對報文進行填充使報文長度與448模512同餘(長度=448mod512),填充的比特數范圍是1到512,填充比特串的最高位為1,其餘位為0。

STEP2:附加長度值。將用64-bit表示的初始報文(填充前)的位長度附加在步驟1的結果後(低位位元組優先)。

STEP3:初始化緩存。使用一個256-bit的緩存來存放該散列函數的中間及最終結果。

STEP4:處理512-bit(16個字)報文分組序列。該演算法使用了六種基本邏輯函數,由64 步迭代運算組成。每步都以256-bit緩存值為輸入,然後更新緩存內容。每步使用一個32-bit 常數值Kt和一個32-bit Wt。其中Wt是分組之後的報文,t=1,2,...,16 。

STEP5:所有的512-bit分組處理完畢後,對於SHA256演算法最後一個分組產生的輸出便是256-bit的報文。

2、環簽名

2001年,Rivest, shamir和Tauman三位密碼學家首次提出了環簽名。是一種簡化的群簽名,只有環成員沒有管理者,不需要環成員間的合作。環簽名方案中簽名者首先選定一個臨時的簽名者集合,集合中包括簽名者。然後簽名者利用自己的私鑰和簽名集合中其他人的公鑰就可以獨立的產生簽名,而無需他人的幫助。簽名者集合中的成員可能並不知道自己被包含在其中。

環簽名方案由以下幾部分構成:

(1)密鑰生成。為環中每個成員產生一個密鑰對(公鑰PKi,私鑰SKi)。

(2)簽名。簽名者用自己的私鑰和任意n個環成員(包括自己)的公鑰為消息m生成簽名a。

(3)簽名驗證。驗證者根據環簽名和消息m,驗證簽名是否為環中成員所簽,如果有效就接收,否則丟棄。

環簽名滿足的性質:

(1)無條件匿名性:攻擊者無法確定簽名是由環中哪個成員生成,即使在獲得環成員私鑰的情況下,概率也不超過1/n。

(2)正確性:簽名必需能被所有其他人驗證。

(3)不可偽造性:環中其他成員不能偽造真實簽名者簽名,外部攻擊者即使在獲得某個有效環簽名的基礎上,也不能為消息m偽造一個簽名。

3、環簽名和群簽名的比較

(1)匿名性。都是一種個體代表群體簽名的體制,驗證者能驗證簽名為群體中某個成員所簽,但並不能知道為哪個成員,以達到簽名者匿名的作用。

(2)可追蹤性。群簽名中,群管理員的存在保證了簽名的可追蹤性。群管理員可以撤銷簽名,揭露真正的簽名者。環簽名本身無法揭示簽名者,除非簽名者本身想暴露或者在簽名中添加額外的信息。提出了一個可驗證的環簽名方案,方案中真實簽名者希望驗證者知道自己的身份,此時真實簽名者可以通過透露自己掌握的秘密信息來證實自己的身份。

(3)管理系統。群簽名由群管理員管理,環簽名不需要管理,簽名者只有選擇一個可能的簽名者集合,獲得其公鑰,然後公布這個集合即可,所有成員平等。

鏈喬教育在線旗下學碩創新區塊鏈技術工作站是中國教育部學校規劃建設發展中心開展的「智慧學習工場2020-學碩創新工作站 」唯一獲準的「區塊鏈技術專業」試點工作站。專業站立足為學生提供多樣化成長路徑,推進專業學位研究生產學研結合培養模式改革,構建應用型、復合型人才培養體系。

㈧ 【深度知識】區塊鏈之加密原理圖示(加密,簽名)

先放一張以太坊的架構圖:

在學習的過程中主要是採用單個模塊了學習了解的,包括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的整個的加密,認證,簽名模型如下:

㈨ 區塊鏈中現代密碼學

1983年 - David Chaum描述的盲簽
1997年 - Adam Back發明的HashCash(工作證明制度的一個例子)
2001年 - Ron Rivest,Adi Shamir和Yael Tauman向加密社區提出了環簽名
2004年 - Patrick P. Tsang和Victor K.提出使用環簽名系統進行投票和電子現金;
2008年 - 由Satoshi Nakamoto出版的Bitcoin白皮書
2011年 - 比特幣系統中的匿名分析,Fergal Reid和Martin Harrigan
2012 - 目的地址比特幣匿名(CryptoNote中的一次性地址)。

安全多方計算起源於1982年姚期智的百萬富翁問題。後來Oded Goldreich有比較細致系統的論述。

姚氏百萬富翁問題是由華裔計算機科學家、圖靈獎獲得者姚啟智教授首先提出的。該問題表述為:兩個百萬富翁Alice和Bob想知道他們兩個誰更富有,但他們都不想讓對方知道自己財富的任何信息。該問題有一些實際應用:假設Alice希望向Bob購買一些商品,但她願意支付的最高金額為x元;Bob希望的最低賣出價為y元。Alice和Bob都非常希望知道x與y哪個大。如果x>y,他們都可以開始討價還價;如果z<y,他們就不用浪費口舌。但他們都不想告訴對方自己的出價,以免自己在討價還價中處於不利地位。

該方案用於對兩個數進行比較,以確定哪一個較大。Alice知道一個整數i;Bob知道一個整數j, Alice與B0b希望知道究竟i>=j還是j>i,但都不想讓對方知道自己的數。為簡單起見,假設j與i的范圍為[1,100】。Bob有一個公開密鑰Eb和私有密鑰Db。

安全多方計算(Secure Multi-Party Computation)的研究主要是針對無可信第三方的情況下, 如何安全地計算一個約定函數的問題. 安全多方計算在電子選舉、電子投票、電子拍賣、秘密共享、門限簽名等場景中有著重要的作用。

同態加密(Homomorphic Encryption)是很久以前密碼學界就提出來的一個Open Problem。早在1978年,Ron Rivest, Leonard Adleman, 以及Michael L. Dertouzos就以銀行為應用背景提出了這個概念[RAD78]。對,你沒有看錯,Ron Rivest和Leonard Adleman分別就是著名的RSA演算法中的R和A。

什麼是同態加密?提出第一個構造出全同態加密(Fully Homomorphic Encryption)[Gen09]的Craig Gentry給出的直觀定義最好:A way to delegate processing of your data, without giving away access to it.

這是什麼意思呢?一般的加密方案關注的都是數據存儲安全。即,我要給其他人發個加密的東西,或者要在計算機或者其他伺服器上存一個東西,我要對數據進行加密後在發送或者存儲。沒有密鑰的用戶,不可能從加密結果中得到有關原始數據的任何信息。只有擁有密鑰的用戶才能夠正確解密,得到原始的內容。我們注意到,這個過程中用戶是不能對加密結果做任何操作的,只能進行存儲、傳輸。對加密結果做任何操作,都將會導致錯誤的解密,甚至解密失敗。

同態加密方案最有趣的地方在於,其關注的是數據處理安全。同態加密提供了一種對加密數據進行處理的功能。也就是說,其他人可以對加密數據進行處理,但是處理過程不會泄露任何原始內容。同時,擁有密鑰的用戶對處理過的數據進行解密後,得到的正好是處理後的結果。

有點抽象?我們舉個實際生活中的例子。有個叫Alice的用戶買到了一大塊金子,她想讓工人把這塊金子打造成一個項鏈。但是工人在打造的過程中有可能會偷金子啊,畢竟就是一克金子也值很多錢的說… 因此能不能有一種方法,讓工人可以對金塊進行加工(delegate processing of your data),但是不能得到任何金子(without giving away access to it)?當然有辦法啦,Alice可以這么做:Alice將金子鎖在一個密閉的盒子裡面,這個盒子安裝了一個手套。工人可以帶著這個手套,對盒子內部的金子進行處理。但是盒子是鎖著的,所以工人不僅拿不到金塊,連處理過程中掉下的任何金子都拿不到。加工完成後。Alice拿回這個盒子,把鎖打開,就得到了金子。

這裡面的對應關系是:盒子:加密演算法盒子上的鎖:用戶密鑰將金塊放在盒子裡面並且用鎖鎖上:將數據用同態加密方案進行加密加工:應用同態特性,在無法取得數據的條件下直接對加密結果進行處理開鎖:對結果進行解密,直接得到處理後的結果同態加密哪裡能用?這幾年不是提了個雲計算的概念嘛。同態加密幾乎就是為雲計算而量身打造的!我們考慮下面的情景:一個用戶想要處理一個數據,但是他的計算機計算能力較弱。這個用戶可以使用雲計算的概念,讓雲來幫助他進行處理而得到結果。但是如果直接將數據交給雲,無法保證安全性啊!於是,他可以使用同態加密,然後讓雲來對加密數據進行直接處理,並將處理結果返回給他。這樣一來:用戶向雲服務商付款,得到了處理的結果;雲服務商掙到了費用,並在不知道用戶數據的前提下正確處理了數據;

聚合簽名由Boneh等人提出,主要是通過聚合多個簽名為一個簽名,來提高簽名與驗證的效率。要對多個用戶的數據進行簽名,聚合簽名能夠極大地降低簽名計算復雜度。CL就是聚合簽名。

零知識證明過程有兩個參與方,一方叫證明者,一方叫驗證者。證明者掌握著某個秘密,他想讓驗證者相信他掌握著秘密,但是又不想泄漏這個秘密給驗證者。

雙方按照一個協議,通過一系列交互,最終驗證者會得出一個明確的結論,證明者是或不掌握這個秘密。

對於比特幣的例子,一筆轉帳交易合法與否,其實只要證明三件事:

發送的錢屬於發送交易的人
發送者發送的金額等於接收者收到金額
發送者的錢確實被銷毀了
整個證明過程中,礦工其實並不關心具體花掉了多少錢,發送者具體是誰,接受者具體是誰。礦工只關心系統的錢是不是守恆的。

zcash 就是用這個思路實現了隱私交易。

零知識證明的三條性質對應:

(1)完備性。如果證明方和驗證方都是誠實的,並遵循證明過程的每一步,進行正確的計算,那麼這個證明一定是成功的,驗證方一定能夠接受證明方。
(2)合理性。沒有人能夠假冒證明方,使這個證明成功。
(3)零知識性。證明過程執行完之後,驗證方只獲得了「證明方擁有這個知識」這條信息,而沒有獲得關於這個知識本身的任何一點信息。

只有環成員,沒有管理者,不需要環成員之間的合作,簽名者利用自己的私鑰和集合中其他成員的公鑰就能獨立的進行簽名,不需要其他人的幫助,集合中的其他成員可能不知道自己被包含在了其中。
環簽名可以被用作成一種泄露秘密的方式,例如,可以使用環形簽名來提供來自「白宮高級官員」的匿名簽名,而不會透露哪個官員簽署了該消息。 環簽名適用於此應用程序,因為環簽名的匿名性不能被撤銷,並且因為用於環簽名的組可以被即興創建。

1)密鑰生成。為環中每個成員產生一個密鑰對(公鑰PKi,私鑰SKi)
2)簽名。簽名者用自己的私鑰和任意n個環成員的公鑰為消息m生成簽名a
3)簽名驗證。簽名者根據環簽名和消息m,驗證簽名是否是環中成員所簽。如果有效就接收,如果無效就丟棄。

群簽名的一般流程

盲數字簽名(Blind Signature)簡稱盲簽名——是一種數字簽名的方式,在消息內容被簽名之前,對於簽名者來說消息內容是不可見的。1982年大衛·喬姆首先提出了盲簽名的概念。盲簽名因為具有盲性這一特點,可以有效保護所簽署消息的具體內容,所以在電子商務和電子選舉等領域有著廣泛的應用。

類比例子:對文件簽名就是通過在信封里放一張復寫紙,簽名者在信封上簽名時,他的簽名便透過復寫紙簽到文件上。

所謂盲簽名,就是先將隱蔽的文件放進信封里,而除去盲因子的過程就是打開這個信封,當文件在一個信封中時,任何人不能讀它。對文件簽名就是通過在信封里放一張復寫紙,簽名者在信封上簽名時,他的簽名便透過復寫紙簽到文件上。

一般來說,一個好的盲簽名應該具有以下的性質:

不可偽造性。除了簽名者本人外,任何人都不能以他的名義生成有效的盲簽名。這是一條最基本的性質。
不可抵賴性。簽名者一旦簽署了某個消息,他無法否認自己對消息的簽名。
盲性。簽名者雖然對某個消息進行了簽名,但他不可能得到消息的具體內容。
不可跟蹤性。一旦消息的簽名公開後,簽名者不能確定自己何時簽署的這條消息。
滿足上面幾條性質的盲簽名,被認為是安全的。這四條性質既是我們設計盲簽名所應遵循的標准,又是我們判斷盲簽名性能優劣的根據。

另外,方案的可操作性和實現的效率也是我們設計盲簽名時必須考慮的重要

因素。一個盲簽名的可操作性和實現速度取決於以下幾個方面:

1,密鑰的長度;
2,盲簽名的長度;
3,盲簽名的演算法和驗證演算法。
盲簽名具體步驟
1,接收者首先將待簽數據進行盲變換,把變換後的盲數據發給簽名者。
2,經簽名者簽名後再發給接收者。
3,接收者對簽名再作去盲變換,得出的便是簽名者對原數據的盲簽名。
4,這樣便滿足了條件①。要滿足條件②,必須使簽名者事後看到盲簽名時不能與盲數據聯系起來,這通常是依靠某種協議來實現的。

㈩ 區塊鏈的基礎知識有哪些

1、FISCO BCOS使用賬戶來標識和區分每一個獨立的用戶。在採用公私鑰體系的區塊鏈系統里,每一個賬戶對應著一對公鑰和私鑰。其中,由公鑰經哈希等安全的單向性演算法計算後,得到的地址字元串被用作該賬戶的賬戶名,即賬戶地址。僅有用戶知曉的私鑰則對應著傳統認證模型中的密碼。這類有私鑰的賬戶也常被稱為外部賬戶或賬戶。

2、FISCO BCOS中部署到鏈上的智能合約在底層存儲中也對應一個賬戶,我們稱這類賬戶為合約賬戶與外部賬戶的區別在於,合約賬戶的地址是部署時確定,根據部署者的賬戶地址及其賬戶中的信息計算得出,並且合約賬戶沒有私鑰。

3、SDK需要持有外部賬戶私鑰,使用外部賬戶私鑰對交易簽名。區塊鏈系統中,每一次對合約寫介面的調用都是一筆交易,而每筆交易需要用賬戶的私鑰簽名。

4、許可權控制需要外部賬戶的地址。FISCO BCOS許可權控制模型,根據交易發送者的外部賬戶地址,判斷是否有寫入數據的許可權。

5、合約賬戶地址唯一的標識區塊鏈上的合約。每個合約部署後,底層節點會為其生成合約地址,調用合約介面時,需要提供合約地址。

熱點內容
以太幣螞蟻F3礦機 發布:2024-05-03 11:30:30 瀏覽:975
區塊鏈利用好這項技術 發布:2024-05-03 11:21:09 瀏覽:820
類似區塊狗的挖礦軟體 發布:2024-05-03 11:19:26 瀏覽:481
挖礦如何解決用電問題 發布:2024-05-03 11:13:51 瀏覽:10
冒險與挖礦合戰積分 發布:2024-05-03 09:11:21 瀏覽:986
比特幣行情比特梵 發布:2024-05-03 08:57:10 瀏覽:73
貓盤挖礦幣不給 發布:2024-05-03 08:24:17 瀏覽:363
大量eth流入交易所會導致 發布:2024-05-03 08:14:14 瀏覽:727
萬企聯盟區塊鏈 發布:2024-05-03 08:01:55 瀏覽:260
幣圈搜索屏蔽 發布:2024-05-03 07:48:59 瀏覽:468