區塊鏈與加密演算法
① 區塊鏈中的對稱加密是什麼非對稱加密又是什麼
對稱加密演算法是指在加密和解密時使用的是同一個秘鑰。與對稱加密演算法不同,非對稱加密演算法需要公鑰和私鑰。公鑰和私鑰是一對,如果用公鑰對數據進行加密,只有用對應的私鑰才能解密。
非對稱加密與對稱加密相比,其安全性更好。對稱加密的通信雙方使用相同的秘鑰,如果一方的秘鑰遭泄露,那麼整個通信就會被破解。
而非對稱加密使用一對秘鑰,一個用來加密,一個用來解密,而且公鑰是公開的,秘鑰是自己保存的,在通訊前不需要先同步秘鑰,避免了在同步私鑰過程中被黑客盜取信息的風險。
② 區塊鏈的故事 - 9 - RSA 演算法
RSA
迪菲與赫爾曼完美地解決了密鑰分發的難題,從此,交換密鑰就很簡單了,愛麗絲與鮑勃完全可以可以在村頭大喇叭里喊話,就能夠交換出一個密鑰。但加密的方式,依然是對稱加密的。
DH 協議交換密鑰雖然方便,但依然有一些不盡人意的麻煩處,愛麗絲還是要與鮑勃對著嚷嚷半天,二人才能生成密鑰。當愛麗絲想要交換密鑰的時候,若是鮑勃正在睡覺,那愛麗絲的情書,還是送不出去。
迪菲與赫爾曼在他們的論文中,為未來的加密方法指出了方向。 通過單向函數,設計出非對稱加密,才是終極解決方案。 所謂非對稱加密,就是一把鑰匙用來合上鎖,另一把鑰匙用來開鎖,兩把鑰匙不同。鎖死的鑰匙,不能開鎖。開鎖的鑰匙,不能合鎖。
麻省理工的三位科學家,他們是羅納德·李維斯特(Ron Rivest)、阿迪·薩莫爾(Adi Shamir)和倫納德·阿德曼(Leonard Adleman),他們讀了迪菲與赫爾曼的論文,深感興趣,便開始研究。迪菲與赫爾曼未能搞定的演算法,自他們三人之手,誕生了。
2002 年,這三位大師因為 RSA 的發明,獲得了圖靈獎。 但不要以為 RSA 就是他們的全部,這三位是真正的大師,每一位的學術生涯都是碩果累累。讓我們用仰視的目光探索大師們的高度。
李維斯特還發明了 RC2, RC4, RC 5, RC 6 演算法,以及著名的 MD2, MD3, MD4, MD5 演算法。他還寫了一本書,叫 《演算法導論》,程序員們都曾經在這本書上磨損了無數的腦細胞。
薩莫爾發明了 Feige-Fiat-Shamir 認證協議,還發現了微分密碼分析法。
阿德曼則更加傳奇,他開創了 DNA 計算學說,用 DNA 計算機解決了 「旅行推銷員」 問題。 他的學生 Cohen 發明了計算機病毒,所以他算是計算機病毒的爺爺了。他還是愛滋病免疫學大師級專家,在數學、計算機科學、分子生物學、愛滋病研究等每一個方面都作出的卓越貢獻。
1976 年,這三位都在麻省理工的計算機科學實驗室工作,他們構成的小組堪稱完美。李維斯特和薩莫爾兩位是計算機學家,他們倆不斷提出新的思路來,而阿德曼是極其高明的數學家,總能給李維斯特和薩莫爾挑出毛病來。
一年過後,1977 年,李維斯特在一次聚會後,躺在沙發上醒酒,他輾轉反側,無法入睡。在半睡半醒、將吐未吐之間,突然一道閃電在腦中劈下,他找到了方法。一整夜時間,他就寫出了論文來。次晨,他把論文交給阿德曼,阿德曼這次再也找不到錯誤來了。
在論文的名字上,這三位還著實君子謙讓了一番。 李維斯特將其命名為 Adleman-Rivest-Shamir,而偉大的阿德曼則要求將自己的名字去掉,因為這是李維斯特的發明。 最終爭議的結果是,阿德曼名字列在第三,於是這個演算法成了 RSA。
RSA 演算法基於一個十分簡單的數論事實:將兩個大素數相乘十分容易,但想要對其乘積進行因式分解卻極其困難,因此可以將乘積公開,用作加密密鑰。
例如,選擇兩個質數,一個是 17159,另一個是 10247,則兩數乘積為 175828273。 乘積 175828273 就是加密公鑰,而 (17159,10247)則是解密的私鑰。
公鑰 175828273 人人都可獲取,但若要破解密文,則需要將 175828273 分解出 17159 和 10247,這是非常困難的。
1977 年 RSA 公布的時候,數學家、科普作家馬丁加德納在 《科學美國人》 雜志上公布了一個公鑰:
114 381 625 757 888 867 669 235 779 976 146 612 010 218 296 721 242 362 562 842 935 706 935 245 733 897 830 597 123 563 958 705 058 989 075 147 599 290 026 879 543 541
馬丁懸賞讀者對這個公鑰進行破解。漫長的 17 年後,1994 年 4 月 26 日,一個 600 人組成的愛好者小組才宣稱找到了私鑰。私鑰是:
p:3 490 529 510 847 650 949 147 849 619 903 898 133 417 764 638 493 387 843 990 820 577
q:32 769 132 993 266 709 549 961 988 190 834 461 413 177 642 967 992 942 539 798 288 533
這個耗時 17 年的破解,針對的只是 129 位的公鑰,今天 RSA 已經使用 2048 位的公鑰,這幾乎要用上全世界計算機的算力,並耗費上幾十億年才能破解。
RSA 的安全性依賴於大數分解,但其破解難度是否等同於大數分解,則一直未能得到理論上的證明,因為未曾證明過破解 RSA 就一定需要作大數分解。
RSA 依然存在弱點,由於進行的都是大數計算,使得 RSA 最快的情況也比普通的對稱加密慢上多倍,無論是軟體還是硬體實現。速度一直是 RSA 的缺陷。一般來說只用於少量數據加密。
RSA 還有一個弱點,這個在下文中還會提及。
在密碼學上,美國的學者們忙的不亦樂乎,成果一個接一個。但老牌帝國英國在密碼學上,也並不是全無建樹,畢竟那是圖靈的故鄉,是圖靈帶領密碼學者們在布萊切里公園戰勝德國英格瑪加密機的國度。
英國人也發明了 RSA,只是被埋沒了。
60 年代,英國軍方也在為密碼分發問題感到苦惱。1969 年,密碼學家詹姆斯埃利斯正在為軍方工作,他接到了這個密鑰分發的課題。他想到了一個主意,用單向函數實現非對稱加密,但是他找不到這個函數。政府通訊總部的很多天才們,加入進來,一起尋找單向函數。但三年過去了,這些聰明的腦袋,並沒有什麼收獲,大家都有些沮喪,這樣一個單項函數,是否存在?
往往這個時候,就需要初生牛犢來救場了。科克斯就是一頭勇猛的牛犢,他是位年輕的數學家,非常純粹,立志獻身繆斯女神的那種。 雖然年輕,但他有一個巨大優勢,當時他對此單向函數難題一無所知,壓根兒不知道老師們三年來一無所獲。於是懵懵懂懂的闖進了地雷陣。
面對如此凶險的地雷陣,科克斯近乎一躍而過。只用了半個小時,就解決了這個問題,然後他下班回家了,並沒有把這個太當回事,領導交代的一個工作而已,無非端茶倒水掃地解數學題,早點幹完,回家路上還能買到新出爐的麵包。他完全不知道自己創造了歷史。科克斯是如此純粹的數學家,後來他聽聞同事們送上的贊譽,還對此感到有些不好意思。在他眼裡,數學應該如哈代所說,是無用的學問,而他用數學解決了具體的問題,這是令人羞愧的。
可惜的是,科克斯的發明太早了,當時的計算機算力太弱,並不能實現非對稱的加解密。所以,軍方沒有應用非對稱加密演算法。詹姆斯與科克斯把非對稱加密的理論發展到完善,但是他們不能說出去,軍方要求所有的工作內容都必須保密,他們甚至不能申請專利。
軍方雖然對工作成果的保密要求非常嚴格,但對工作成果本身卻不很在意。後來,英國通訊總部發現了美國人的 RSA 演算法,覺得好棒棒哦。他們壓根就忘記了詹姆斯與科克斯的 RSA。通訊總部贊嘆之餘,扒拉了一下自己的知識庫,才發現自己的員工科克斯早已發明了 RSA 類似的演算法。 官僚機構真是人類的好朋友,總能給人們製造各種笑料,雖然其本意是要製造威權的。
科克斯對此並不介懷,他甚至是這樣說的:「埋沒就埋沒吧,我又不想當網紅,要粉絲幹嘛?那些粉絲能吃?」 原話不是這樣的,但表達的意思基本如此。
迪菲在 1982 年專程去英國見詹姆斯,兩人惺惺相惜,真是英雄相見恨晚。可惜詹姆斯依然不能透漏他們對 RSA 的研究,他只告訴了迪菲:「你們做的比我們要好。」 全球各國的科學家們,可以比出誰更好,但全球各國的官僚們,卻很難比出誰更顢頇,他們不分高下。
區塊鏈的故事 - 1
區塊鏈的故事 - 2
區塊鏈的故事 - 3
區塊鏈的故事- 4
區塊鏈的故事 - 5
區塊鏈的故事 - 6
區塊鏈的故事 - 7
區塊鏈的故事 - 8
③ 區塊鏈是什麼意思
區塊鏈是分布式數據存儲、點對點傳輸、共識機制、加密演算法等計算機技術的新型應用模式。區塊鏈,是比特幣的一個重要概念。
它本質上是一個去中心化的資料庫,同時作為比特幣的底層技術,是一串使用密碼學方法相關聯產生的數據塊,每一個數據塊中包含了一批次比特幣網路交易的信息,用於驗證其信息的有效性(防偽)和生成下一個區塊。
區塊鏈在公共管理,能源,酒店經營,交通等領域都與民眾的生產生活息息相關,但這些領域的中心化特質也帶來了一些問題,可以用區塊鏈來改造。
去中心化的完全分布式DNS服務通過網路中各個相互之間的點對點數據傳輸服務可以實現域名的查詢和解析,可以用於某些重要的基礎設施的操作系統和固件沒有被篡改,可以進行監控軟體的狀態和初始,發現不良的篡改,並確保使用了物聯網技術的系統所傳輸的數據沒用經過篡改。
④ 區塊鏈之加密原理總結(一)
先放一張以太坊的架構圖:
在學習的過程中主要是採用單個模塊了學習了解的,包括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演算法提供的一套集成(混合)加密方案。其中包括了非對稱加密,對稱加密和簽名的功能。
ECC 是 Elliptic Curve Cryptography的簡稱。那麼什麼是橢圓加密曲線呢?Wolfram MathWorld 給出了很標準的定義: 一條橢圓曲線就是一組被 定義的且滿足 的點集。
這個先訂條件是為了保證曲線不包含奇點。
所以,隨著曲線參數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的整個的加密,認證,簽名模型如下:
⑤ 什麼是區塊鏈加密演算法
這個是比特幣的一個重要概念,比特幣的底層技術區塊鏈運用了很多優秀的加密演算法來保證系統可靠性。具體的理解和操作可以去下載鏈派社區app,聽一下裡面講師的課程,你就清楚了。
⑥ 區塊鏈的概念是什麼
從字面理解,區塊鏈包含了兩個概念:區塊、鏈。區塊鏈本身是由一個個區塊(Block)組成,而不同節點鏈接在一起構建的網路,就是區塊鏈。區塊鏈的主要作用是儲存信息,任何需要保存的信息,都可以寫入區塊鏈,也可以從裡面讀取。
每個區塊存儲:一些有效的記錄或交易;涉及該塊的信息;通過每個塊的散列到前一個塊和下一個塊的鏈接——可以被認為是塊的指紋的唯一代碼。
因此,每個塊在鏈內具有特定且不可移動的位置,因為每個塊包含來自前一塊的散列的信息。整個鏈存儲在構成區塊鏈的每個網路節點中,因此鏈的精確副本存儲在所有網路參與者中。
用途
從本質上講,區塊鏈可用於存儲任何類型的信息,這些信息必須保持完整,並且比通過中間人以安全,分散和更便宜的方式保持可用。此外,由於存儲的信息是加密的,因此可以保證其機密性,因為只有擁有加密密鑰的人才能訪問它。
在醫療保健中使用區塊鏈。例如,健康記錄可以合並並存儲在區塊鏈中。這意味著每個患者的病史都是安全的,同時,每個被授權的醫生都可以使用,無論患者接受治療的健康中心如何。甚至制葯行業也可以使用這種技術來驗證葯品並防止偽造。
區塊鏈對於管理數字資產和文檔也非常有用。到目前為止,數字化的問題在於一切都很容易復制,但Blockchain允許您記錄購買,契約,文檔或任何其他類型的在線資產,而不會被偽造。
⑦ 區塊鏈哈希演算法是什麼
哈希演算法也被稱為「散列」,是區塊鏈的四大核心技術之一。是能計算出一個數字消息所對應的、長度固定的字元串(又稱消息摘要)的演算法。由於一段數據只有一個哈希值,所以哈希演算法可以用於檢驗數據的完整性。在快速查找和加密演算法的應用方面,哈希演算法的使用非常普遍。
在互聯網時代,盡管人與人之間的距離更近了,但是信任問題卻更嚴重了。 現存的第三方中介組織的技術架構都是私密而且中心化的,這種模式永遠都無法從根本上解決互信以及價值轉移的問題。因此,區塊鏈技術將會利用去中心化的資料庫架構完成數據交互信任背書,實現全球互信的一大跨步。在這一過 程中,哈希演算法發揮了重要作用。
散列演算法是區塊鏈中保證交易信息不被篡改的單向密碼機制。區塊鏈通過散列演算法對一個交易區塊中的交易進行加密,並把信息壓縮成由一串數字和字母組成的散列字元串。區塊鏈的散列值能夠唯一而准確地標識一個區塊。在驗證區塊的真實性時,只需要簡單計算出這個區塊的散列值,如果沒有變化就 意味著這個區塊上的信息是沒有被篡改過的。
鏈喬教育在線旗下學碩創新區塊鏈技術工作站是中國教育部學校規劃建設發展中心開展的「智慧學習工場2020-學碩創新工作站 」唯一獲準的「區塊鏈技術專業」試點工作站。專業站立足為學生提供多樣化成長路徑,推進專業學位研究生產學研結合培養模式改革,構建應用型、復合型人才培養體系。
⑧ 區塊鏈技術如何保障信息主體隱私和權益
隱私保護手段可以分為三類:
一是對交易信息的隱私保護,對交易的發送者、交易接受者以及交易金額的隱私保護,有混幣、環簽名和機密交易等。
二是對智能合約的隱私保護,針對合約數據的保護方案,包含零知識證明、多方安全計算、同態加密等。
三是對鏈上數據的隱私保護,主要有賬本隔離、私有數據和數據加密授權訪問等解決方案。
拓展資料:
一、區塊鏈加密演算法隔離身份信息與交易數據
1、區塊鏈上的交易數據,包括交易地址、金額、交易時間等,都公開透明可查詢。但是,交易地址對應的所用戶身份,是匿名的。通過區塊鏈加密演算法,實現用戶身份和用戶交易數據的分離。在數據保存到區塊鏈上之前,可以將用戶的身份信息進行哈希計算,得到的哈希值作為該用戶的唯一標識,鏈上保存用戶的哈希值而非真實身份數據信息,用戶的交易數據和哈希值進行捆綁,而不是和用戶身份信息進行捆綁。
2、由此,用戶產生的數據是真實的,而使用這些數據做研究、分析時,由於區塊鏈的不可逆性,所有人不能通過哈希值還原注冊用戶的姓名、電話、郵箱等隱私數據,起到了保護隱私的作用。
二、區塊鏈「加密存儲+分布式存儲」
加密存儲,意味著訪問數據必須提供私鑰,相比於普通密碼,私鑰的安全性更高,幾乎無法被暴力破解。分布式存儲,去中心化的特性在一定程度上降低了數據全部被泄漏的風險,而中心化的資料庫存儲,一旦資料庫被黑客攻擊入侵,數據很容易被全部盜走。通過「加密存儲+分布式存儲」能夠更好地保護用戶的數據隱私。
三、區塊鏈共識機制預防個體風險
共識機制是區塊鏈節點就區塊信息達成全網一致共識的機制,可以保障最新區塊被准確添加至區塊鏈、節點存儲的區塊鏈信息一致不分叉,可以抵禦惡意攻擊。區塊鏈的價值之一在於對數據的共識治理,即所有用戶對於上鏈的數據擁有平等的管理許可權,因此首先從操作上杜絕了個體犯錯的風險。通過區塊鏈的全網共識解決數據去中心化,並且可以利用零知識證明解決驗證的問題,實現在公開的去中心化系統中使用用戶隱私數據的場景,在滿足互聯網平台需求的同時,也使部分數據仍然只掌握在用戶手中。
四、區塊鏈零知識證明
零知識證明指的是證明者能夠在不向驗證者提供任何有用的信息的情況下,使驗證者相信某個論斷是正確的,即證明者既能充分證明自己是某種權益的合法擁有者,又不把有關的信息泄漏出去,即給外界的「知識」為「零」。應用零知識證明技術,可以在密文情況下實現數據的關聯關系驗證,在保障數據隱私的同時實現數據共享。
⑨ 區塊鏈技術的六大核心演算法
區塊鏈技術的六大核心演算法
區塊鏈核心演算法一:拜占庭協定
拜占庭的故事大概是這么說的:拜占庭帝國擁有巨大的財富,周圍10個鄰邦垂誕已久,但拜占庭高牆聳立,固若金湯,沒有一個單獨的鄰邦能夠成功入侵。任何單個鄰邦入侵的都會失敗,同時也有可能自身被其他9個鄰邦入侵。拜占庭帝國防禦能力如此之強,至少要有十個鄰邦中的一半以上同時進攻,才有可能攻破。然而,如果其中的一個或者幾個鄰邦本身答應好一起進攻,但實際過程出現背叛,那麼入侵者可能都會被殲滅。於是每一方都小心行事,不敢輕易相信鄰國。這就是拜占庭將軍問題。
在這個分布式網路里:每個將軍都有一份實時與其他將軍同步的消息賬本。賬本里有每個將軍的簽名都是可以驗證身份的。如果有哪些消息不一致,可以知道消息不一致的是哪些將軍。盡管有消息不一致的,只要超過半數同意進攻,少數服從多數,共識達成。
由此,在一個分布式的系統中,盡管有壞人,壞人可以做任意事情(不受protocol限制),比如不響應、發送錯誤信息、對不同節點發送不同決定、不同錯誤節點聯合起來干壞事等等。但是,只要大多數人是好人,就完全有可能去中心化地實現共識
區塊鏈核心演算法二:非對稱加密技術
在上述拜占庭協定中,如果10個將軍中的幾個同時發起消息,勢必會造成系統的混亂,造成各說各的攻擊時間方案,行動難以一致。誰都可以發起進攻的信息,但由誰來發出呢?其實這只要加入一個成本就可以了,即:一段時間內只有一個節點可以傳播信息。當某個節點發出統一進攻的消息後,各個節點收到發起者的消息必須簽名蓋章,確認各自的身份。
在如今看來,非對稱加密技術完全可以解決這個簽名問題。非對稱加密演算法的加密和解密使用不同的兩個密鑰.這兩個密鑰就是我們經常聽到的」公鑰」和」私鑰」。公鑰和私鑰一般成對出現, 如果消息使用公鑰加密,那麼需要該公鑰對應的私鑰才能解密; 同樣,如果消息使用私鑰加密,那麼需要該私鑰對應的公鑰才能解密。
區塊鏈核心演算法三:容錯問題
我們假設在此網路中,消息可能會丟失、損壞、延遲、重復發送,並且接受的順序與發送的順序不一致。此外,節點的行為可以是任意的:可以隨時加入、退出網路,可以丟棄消息、偽造消息、停止工作等,還可能發生各種人為或非人為的故障。我們的演算法對由共識節點組成的共識系統,提供的容錯能力,這種容錯能力同時包含安全性和可用性,並適用於任何網路環境。
區塊鏈核心演算法四:Paxos 演算法(一致性演算法)
Paxos演算法解決的問題是一個分布式系統如何就某個值(決議)達成一致。一個典型的場景是,在一個分布式資料庫系統中,如果各節點的初始狀態一致,每個節點都執行相同的操作序列,那麼他們最後能得到一個一致的狀態。為保證每個節點執行相同的命令序列,需要在每一條指令上執行一個「一致性演算法」以保證每個節點看到的指令一致。一個通用的一致性演算法可以應用在許多場景中,是分布式計算中的重要問題。節點通信存在兩種模型:共享內存和消息傳遞。Paxos演算法就是一種基於消息傳遞模型的一致性演算法。
區塊鏈核心演算法五:共識機制
區塊鏈共識演算法主要是工作量證明和權益證明。拿比特幣來說,其實從技術角度來看可以把PoW看做重復使用的Hashcash,生成工作量證明在概率上來說是一個隨機的過程。開采新的機密貨幣,生成區塊時,必須得到所有參與者的同意,那礦工必須得到區塊中所有數據的PoW工作證明。與此同時礦工還要時時觀察調整這項工作的難度,因為對網路要求是平均每10分鍾生成一個區塊。
區塊鏈核心演算法六:分布式存儲
分布式存儲是一種數據存儲技術,通過網路使用每台機器上的磁碟空間,並將這些分散的存儲資源構成一個虛擬的存儲設備,數據分散的存儲在網路中的各個角落。所以,分布式存儲技術並不是每台電腦都存放完整的數據,而是把數據切割後存放在不同的電腦里。就像存放100個雞蛋,不是放在同一個籃子里,而是分開放在不同的地方,加起來的總和是100個。
⑩ 區塊鏈密碼演算法是怎樣的
區塊鏈作為新興技術受到越來越廣泛的關注,是一種傳統技術在互聯網時代下的新的應用,這其中包括分布式數據存儲技術、共識機制和密碼學等。隨著各種區塊鏈研究聯盟的創建,相關研究得到了越來越多的資金和人員支持。區塊鏈使用的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-學碩創新工作站 」唯一獲準的「區塊鏈技術專業」試點工作站。專業站立足為學生提供多樣化成長路徑,推進專業學位研究生產學研結合培養模式改革,構建應用型、復合型人才培養體系。