❶ 區塊鏈的加密技術
數字加密技能是區塊鏈技能使用和開展的關鍵。一旦加密辦法被破解,區塊鏈的數據安全性將受到挑戰,區塊鏈的可篡改性將不復存在。加密演算法分為對稱加密演算法和非對稱加密演算法。區塊鏈首要使用非對稱加密演算法。非對稱加密演算法中的公鑰暗碼體制依據其所依據的問題一般分為三類:大整數分化問題、離散對數問題和橢圓曲線問題。第一,引進區塊鏈加密技能加密演算法一般分為對稱加密和非對稱加密。非對稱加密是指集成到區塊鏈中以滿意安全要求和所有權驗證要求的加密技能。非對稱加密通常在加密和解密進程中使用兩個非對稱暗碼,稱為公鑰和私鑰。非對稱密鑰對有兩個特點:一是其間一個密鑰(公鑰或私鑰)加密信息後,只能解密另一個對應的密鑰。第二,公鑰可以向別人揭露,而私鑰是保密的,別人無法通過公鑰計算出相應的私鑰。非對稱加密一般分為三種首要類型:大整數分化問題、離散對數問題和橢圓曲線問題。大整數分化的問題類是指用兩個大素數的乘積作為加密數。由於素數的出現是沒有規律的,所以只能通過不斷的試算來尋找解決辦法。離散對數問題類是指基於離散對數的困難性和強單向哈希函數的一種非對稱分布式加密演算法。橢圓曲線是指使用平面橢圓曲線來計算一組非對稱的特殊值,比特幣就採用了這種加密演算法。非對稱加密技能在區塊鏈的使用場景首要包含信息加密、數字簽名和登錄認證。(1)在信息加密場景中,發送方(記為A)用接收方(記為B)的公鑰對信息進行加密後發送給
B,B用自己的私鑰對信息進行解密。比特幣交易的加密就屬於這種場景。(2)在數字簽名場景中,發送方A用自己的私鑰對信息進行加密並發送給B,B用A的公鑰對信息進行解密,然後確保信息是由A發送的。(3)登錄認證場景下,客戶端用私鑰加密登錄信息並發送給伺服器,伺服器再用客戶端的公鑰解密認證登錄信息。請注意上述三種加密計劃之間的差異:信息加密是公鑰加密和私鑰解密,確保信息的安全性;數字簽名是私鑰加密,公鑰解密,確保了數字簽名的歸屬。認證私鑰加密,公鑰解密。以比特幣體系為例,其非對稱加密機制如圖1所示:比特幣體系一般通過調用操作體系底層的隨機數生成器生成一個256位的隨機數作為私鑰。比特幣的私鑰總量大,遍歷所有私鑰空間獲取比特幣的私鑰極其困難,所以暗碼學是安全的。為便於辨認,256位二進制比特幣私鑰將通過SHA256哈希演算法和Base58進行轉化,構成50個字元長的私鑰,便於用戶辨認和書寫。比特幣的公鑰是私鑰通過Secp256k1橢圓曲線演算法生成的65位元組隨機數。公鑰可用於生成比特幣交易中使用的地址。生成進程是公鑰先通過SHA256和RIPEMD160哈希處理,生成20位元組的摘要成果(即Hash160的成果),再通過SHA256哈希演算法和Base58轉化,構成33個字元的比特幣地址。公鑰生成進程是不可逆的,即私鑰不能從公鑰推導出來。比特幣的公鑰和私鑰通常存儲在比特幣錢包文件中,其間私鑰最為重要。丟掉私鑰意味著丟掉相應地址的所有比特幣財物。在現有的比特幣和區塊鏈體系中,現已依據實踐使用需求衍生出多私鑰加密技能,以滿意多重簽名等愈加靈敏雜亂的場景。
❷ 區塊鏈技術的六大核心演算法
區塊鏈技術的六大核心演算法
區塊鏈核心演算法一:拜占庭協定
拜占庭的故事大概是這么說的:拜占庭帝國擁有巨大的財富,周圍10個鄰邦垂誕已久,但拜占庭高牆聳立,固若金湯,沒有一個單獨的鄰邦能夠成功入侵。任何單個鄰邦入侵的都會失敗,同時也有可能自身被其他9個鄰邦入侵。拜占庭帝國防禦能力如此之強,至少要有十個鄰邦中的一半以上同時進攻,才有可能攻破。然而,如果其中的一個或者幾個鄰邦本身答應好一起進攻,但實際過程出現背叛,那麼入侵者可能都會被殲滅。於是每一方都小心行事,不敢輕易相信鄰國。這就是拜占庭將軍問題。
在這個分布式網路里:每個將軍都有一份實時與其他將軍同步的消息賬本。賬本里有每個將軍的簽名都是可以驗證身份的。如果有哪些消息不一致,可以知道消息不一致的是哪些將軍。盡管有消息不一致的,只要超過半數同意進攻,少數服從多數,共識達成。
由此,在一個分布式的系統中,盡管有壞人,壞人可以做任意事情(不受protocol限制),比如不響應、發送錯誤信息、對不同節點發送不同決定、不同錯誤節點聯合起來干壞事等等。但是,只要大多數人是好人,就完全有可能去中心化地實現共識
區塊鏈核心演算法二:非對稱加密技術
在上述拜占庭協定中,如果10個將軍中的幾個同時發起消息,勢必會造成系統的混亂,造成各說各的攻擊時間方案,行動難以一致。誰都可以發起進攻的信息,但由誰來發出呢?其實這只要加入一個成本就可以了,即:一段時間內只有一個節點可以傳播信息。當某個節點發出統一進攻的消息後,各個節點收到發起者的消息必須簽名蓋章,確認各自的身份。
在如今看來,非對稱加密技術完全可以解決這個簽名問題。非對稱加密演算法的加密和解密使用不同的兩個密鑰.這兩個密鑰就是我們經常聽到的」公鑰」和」私鑰」。公鑰和私鑰一般成對出現, 如果消息使用公鑰加密,那麼需要該公鑰對應的私鑰才能解密; 同樣,如果消息使用私鑰加密,那麼需要該私鑰對應的公鑰才能解密。
區塊鏈核心演算法三:容錯問題
我們假設在此網路中,消息可能會丟失、損壞、延遲、重復發送,並且接受的順序與發送的順序不一致。此外,節點的行為可以是任意的:可以隨時加入、退出網路,可以丟棄消息、偽造消息、停止工作等,還可能發生各種人為或非人為的故障。我們的演算法對由共識節點組成的共識系統,提供的容錯能力,這種容錯能力同時包含安全性和可用性,並適用於任何網路環境。
區塊鏈核心演算法四:Paxos 演算法(一致性演算法)
Paxos演算法解決的問題是一個分布式系統如何就某個值(決議)達成一致。一個典型的場景是,在一個分布式資料庫系統中,如果各節點的初始狀態一致,每個節點都執行相同的操作序列,那麼他們最後能得到一個一致的狀態。為保證每個節點執行相同的命令序列,需要在每一條指令上執行一個「一致性演算法」以保證每個節點看到的指令一致。一個通用的一致性演算法可以應用在許多場景中,是分布式計算中的重要問題。節點通信存在兩種模型:共享內存和消息傳遞。Paxos演算法就是一種基於消息傳遞模型的一致性演算法。
區塊鏈核心演算法五:共識機制
區塊鏈共識演算法主要是工作量證明和權益證明。拿比特幣來說,其實從技術角度來看可以把PoW看做重復使用的Hashcash,生成工作量證明在概率上來說是一個隨機的過程。開采新的機密貨幣,生成區塊時,必須得到所有參與者的同意,那礦工必須得到區塊中所有數據的PoW工作證明。與此同時礦工還要時時觀察調整這項工作的難度,因為對網路要求是平均每10分鍾生成一個區塊。
區塊鏈核心演算法六:分布式存儲
分布式存儲是一種數據存儲技術,通過網路使用每台機器上的磁碟空間,並將這些分散的存儲資源構成一個虛擬的存儲設備,數據分散的存儲在網路中的各個角落。所以,分布式存儲技術並不是每台電腦都存放完整的數據,而是把數據切割後存放在不同的電腦里。就像存放100個雞蛋,不是放在同一個籃子里,而是分開放在不同的地方,加起來的總和是100個。
❸ 區塊鏈的密碼技術有
密碼學技術是區塊鏈技術的核心。區塊鏈的密碼技術有數字簽名演算法和哈希演算法。
數字簽名演算法
數字簽名演算法是數字簽名標準的一個子集,表示了只用作數字簽名的一個特定的公鑰演算法。密鑰運行在由SHA-1產生的消息哈希:為了驗證一個簽名,要重新計算消息的哈希,使用公鑰解密簽名然後比較結果。縮寫為DSA。
數字簽名是電子簽名的特殊形式。到目前為止,至少已經有 20 多個國家通過法律 認可電子簽名,其中包括歐盟和美國,我國的電子簽名法於 2004 年 8 月 28 日第十屆全 國人民代表大會常務委員會第十一次會議通過。數字簽名在 ISO 7498-2 標准中定義為: 「附加在數據單元上的一些數據,或是對數據單元所作的密碼變換,這種數據和變換允許數據單元的接收者用以確認數據單元來源和數據單元的完整性,並保護數據,防止被人(例如接收者)進行偽造」。數字簽名機制提供了一種鑒別方法,以解決偽造、抵賴、冒充和篡改等問題,利用數據加密技術、數據變換技術,使收發數據雙方能夠滿足兩個條件:接收方能夠鑒別發送方所宣稱的身份;發送方以後不能否認其發送過該數據這一 事實。
數字簽名是密碼學理論中的一個重要分支。它的提出是為了對電子文檔進行簽名,以 替代傳統紙質文檔上的手寫簽名,因此它必須具備 5 個特性。
(1)簽名是可信的。
(2)簽名是不可偽造的。
(3)簽名是不可重用的。
(4)簽名的文件是不可改變的。
(5)簽名是不可抵賴的。
哈希(hash)演算法
Hash,就是把任意長度的輸入(又叫做預映射, pre-image),通過散列演算法,變換成固定長度的輸出,該輸出就是散列值。這種轉換是一種壓縮映射,其中散列值的空間通常遠小於輸入的空間,不同的輸入可能會散列成相同的輸出,但是不可逆向推導出輸入值。簡單的說就是一種將任意長度的消息壓縮到某一固定長度的消息摘要的函數。
哈希(Hash)演算法,它是一種單向密碼體制,即它是一個從明文到密文的不可逆的映射,只有加密過程,沒有解密過程。同時,哈希函數可以將任意長度的輸入經過變化以後得到固定長度的輸出。哈希函數的這種單向特徵和輸出數據長度固定的特徵使得它可以生成消息或者數據。
以比特幣區塊鏈為代表,其中工作量證明和密鑰編碼過程中多次使用了二次哈希,如SHA(SHA256(k))或者RIPEMD160(SHA256(K)),這種方式帶來的好處是增加了工作量或者在不清楚協議的情況下增加破解難度。
以比特幣區塊鏈為代表,主要使用的兩個哈希函數分別是:
1.SHA-256,主要用於完成PoW(工作量證明)計算;
2.RIPEMD160,主要用於生成比特幣地址。如下圖1所示,為比特幣從公鑰生成地址的流程。
❹ 區塊鏈中的私鑰和公鑰
公開密鑰(public key,簡稱公鑰)、私有密鑰(private key,簡稱私鑰)是密碼學里非對稱加密演算法的內容。顧名思義,公鑰是可以公開的,而私鑰則要進行安全保管。
私鑰是由隨機種子生成的,公鑰是將私鑰通過演算法推導出來。 由於公鑰太長,為了簡便實用,就出現了「地址」,地址是公鑰推導出來的。這些推導過程是單向不可逆的。也就是地址不能推出公鑰,公鑰不能推出私鑰。
從中我們可以看出,公鑰與私鑰是成對存在的。它們的用處用16個字來概括: 公鑰加密,私鑰解密;私鑰簽名,公鑰驗簽。
公鑰加密,私鑰解密。也就是用公鑰加密原數據,只有對應的私鑰才能解開原數據。這樣能使得原數據在網路中傳播不被竊取,保護隱私。
私鑰簽名,公鑰驗簽。用私鑰對原數據進行簽名,只有對應的公鑰才能驗證簽名串與原數據是匹配的。
可以用鎖頭,鑰匙來比喻公鑰,私鑰。鎖頭用來鎖定某物品,鑰匙來解鎖該物品。鑰匙所有者是物品的所有者。事實上就是這樣,公私鑰對奠定了區塊鏈的賬戶體系及資產(Token等)的所有權,區塊鏈的資產是鎖定在公鑰上的,私鑰是用來解鎖該資產然後使用。比如說我要轉讓資產給你,就是我用我的私鑰簽名了一筆我轉讓資產給你的交易(含資產,數量等等)提交到區塊鏈網路里,節點會驗證該簽名,正確則從我的公鑰上解鎖資產鎖定到你的公鑰上。
我們看到了私鑰的作用了吧,跟中心化記賬系統(支付寶、微信支付等)的密碼一樣重要,擁有私鑰就擁有了資產所有權,所以我們千萬要保管好私鑰,不能泄露。
❺ 區塊鏈的故事 - 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
❻ 2018-07-13小白學區塊鏈——私鑰·公鑰
在生活中移動支付和無現金支付已經相對普及了,它方便了我們的日常生活,也降低了我們隨身攜帶現金的風險。無論是移動端支付還是銀行卡類支付,我們都要綁定或輸入銀行卡號和支付密碼才能支付,那麼在比特幣的交易中是如何達成支付的呢?
1.私鑰
在比特幣網路中的私鑰可以對應我們現實世界銀行卡號加支付密碼,也就是: 私鑰=銀行卡號+取款密碼。 私鑰是比特幣網路中根據密碼學上的一種偽隨機演算法生成一種不可預算的一串字元,由於生成的私鑰是256位數的二進制密碼。因為私鑰太長,識別率不高。所以系統又對於原始的隨機數進行一定的轉換,轉換為識別率高的字元串形式的私鑰,比如:也可以把私鑰轉換其他形式,比如以單詞的形式(12或者24個單詞)的助記詞。還有一種是經過加密的私鑰Keystore,是以文件形式存在的,導出時需要設置密碼,導入也一樣的需要輸入密碼,即使別人知道了你的Keystore,沒有你設的密碼也是得不到你的私鑰的。
2.公鑰
公鑰也就是我們通常所說的轉賬地址。公鑰是由私鑰生成的,通過橢圓曲線演算法生成,一個私鑰經過橢圓曲線變換之後能夠得到公鑰,公鑰也是一組轉換後的字元串,比如:。公鑰是用來驗證私鑰的簽名,私鑰和公鑰是成對出現的,一個私鑰簽名的數據,只有對應的公鑰才能對其進行驗證,而地址也是從公鑰生成的,這樣就可以驗證花費的交易是不是屬於這個地址。簡單理解也就是: 公鑰=銀行卡賬號。
總結
1.是私鑰生成公鑰也是成對出現的,公鑰可以生成對應的唯一地址,驗證發送交易的地址是否和該公鑰生成的地址一致
2.公鑰驗證私鑰的簽名,用來驗證該交易是否使用了正確的私鑰簽名,這樣就能確認了該地址發送的交易是否使用了對應的私鑰。
❼ 第4課 區塊鏈中的密碼學 學習總結
這是加入公Ulord深度學習第四課,楊博士給大家主講區塊鏈中的密碼學問題,本期課程令讓我弄懂了一個一直困擾著我的關於公鑰和私鑰的問題,他們之間到底是什麼關系?再這次學習中我得到了答案,現在我把我學習到的內容跟大家分享一下。
區塊鏈里的公鑰和私鑰,是非對稱加密里的兩個基本概念。
公鑰與私鑰,是通過一種演算法得到的一個密鑰對,公鑰是密鑰對中公開的部分,私鑰是非公開的部分。公鑰通常用於加密會話,就是消息或者說信息,同時,也可以來用於驗證用私鑰簽名的數字簽名。
私鑰可以用來進行簽名,用對應的公鑰來進行驗證。通過這種公開密鑰體製得到的密鑰對能夠保證在全世界范圍內是唯一的。使用這個密鑰對的時候,如果用其中一個密鑰加密數據,則必須用它對應的另一個密鑰來進行解密。
比如說用公鑰加密的數據就必須用私鑰才能解密,如果用私鑰進行加密,就必須要對應的公鑰才能解密,否則無法成功解密。另外,在比特幣的區塊鏈中,則是通過私鑰來計算出公鑰,通過公鑰來計算出地址,而這個過程是不可逆的。
❽ 區塊鏈中的私鑰公鑰指什麼
私鑰公鑰這個名詞可謂是所有考題中最簡單的了。
公開的密鑰叫公鑰,只有自己知道的叫私鑰。
公鑰(Public Key)與私鑰(Private Key)是通過一種演算法得到的一個密鑰對(即一個公鑰和一個私鑰),公鑰是密鑰對中公開的部分,私鑰則是非公開的部分。
一句話明了~
❾ 區塊鏈私鑰、公鑰和地址是什麼關系
區塊鏈私鑰,公鑰和地址三者之間的關系是私鑰生成公鑰,公鑰轉化成為地址。所以私鑰是最重要的。這三者之間是不可逆的,地址不能生成公鑰,公鑰也不能轉化成為私鑰。
再次是區塊鏈地址,它通常是由26至35個字元的字母和數字字元串組成,區塊鏈地址主要來源於公鑰,區塊鏈地址相當於我們平時使用的銀行卡卡號,是可以公開給任何人的,沒有安全限制,主要作用就是用於接收和發送區塊鏈上的數字資產。
區塊鏈技術現在處於初期發展階段,但因其具有去中心化、安全性、不可篡改等特性,今後的生活工作中可能會產生殺手級別的落地應用而備受各國重視。本文僅供參考,歡迎留言討論。
❿ 區塊鏈之加密原理總結(一)
先放一張以太坊的架構圖:
在學習的過程中主要是採用單個模塊了學習了解的,包括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的整個的加密,認證,簽名模型如下: