非對稱加密演算法在比特幣中應用
① 比特幣的核心技術包括哪些
比特幣的核心技術包括1、非對稱加密技術 2、點對點傳輸技術 3、哈希現金演算法機制。
1.非對稱加密技術和對稱加密技術最大的不同就是有了公鑰和私鑰之分。非對稱加密演算法需要兩個密鑰:公開密鑰(publickey)和私有密鑰(privatekey)。公開密鑰與私有密鑰是一對,如果用公開密鑰對數據進行加密,只有用對應的私有密鑰才能解密;如果用私有密鑰對數據進行加密,那麼只有用對應的公開密鑰才能解密。公鑰是公開的,私鑰是保密的。 由於不涉及私鑰的傳輸,整個傳輸過程就變得安全多了。後來又出現了具備商業實用性的非對稱RSA加密演算法以及後來的橢圓曲線加密演算法(ECC),這些都奠定了加密演算法理論的基礎,但是美國國家安全局NSA最初認為這些技術對國家安全構成威脅,所以對這些技術進行了嚴密的監控,知道20世紀90年代末NSA才放棄了對這些技術的監控,這些非對稱技術才最終走入了了公眾的視野。這項技術對應到比特幣場景中就是比特幣的地址和私鑰。
2.點對點傳輸技術顧名思義,就是無需中心伺服器、個體之間可以相互傳輸信息的技術,P2P網路的重要目標就是讓所有客戶端都能提供資源,包括寬頻、存儲空間和計算能力。 對應到比特幣網路中就是利用點對點的技術實現真正的去中心化。
3.哈希現金演算法機制就是讓那些製造垃圾郵件的人付出相應的代價!發送者需要付出一定的工作量,比如說哈希運算,幾秒鍾時間對於普通用戶不算什麼,但對於垃圾郵件的發送者每封郵件都要花幾秒鍾的時間,這樣的成本是沒有辦法負擔的。同時每次運算都會蓋上一個獨一無二的時間戳,這樣就能保證郵件發送方不能重復使用一個運算結果。 對於比特幣而言也是同樣的道理,如何保證一筆數字貨幣沒有被多次消費(Double Spending),就類似於驗證一封郵件沒有被多次發送,所以就要保證每一筆交易順利完成,必須要付出一定的工作量(proof of Work),並且在完成交易時蓋上一個時間戳表示交易完成的時間。
② 非對稱加密演算法 (RSA、DSA、ECC、DH)
非對稱加密需要兩個密鑰:公鑰(publickey) 和私鑰 (privatekey)。公鑰和私鑰是一對,如果用公鑰對數據加密,那麼只能用對應的私鑰解密。如果用私鑰對數據加密,只能用對應的公鑰進行解密。因為加密和解密用的是不同的密鑰,所以稱為非對稱加密。
非對稱加密演算法的保密性好,它消除了最終用戶交換密鑰的需要。但是加解密速度要遠遠慢於對稱加密,在某些極端情況下,甚至能比對稱加密慢上1000倍。
演算法強度復雜、安全性依賴於演算法與密鑰但是由於其演算法復雜,而使得加密解密速度沒有對稱加密解密的速度快。對稱密碼體制中只有一種密鑰,並且是非公開的,如果要解密就得讓對方知道密鑰。所以保證其安全性就是保證密鑰的安全,而非對稱密鑰體制有兩種密鑰,其中一個是公開的,這樣就可以不需要像對稱密碼那樣傳輸對方的密鑰了。這樣安全性就大了很多。
RSA、Elgamal、背包演算法、Rabin、D-H、ECC (橢圓曲線加密演算法)。使用最廣泛的是 RSA 演算法,Elgamal 是另一種常用的非對稱加密演算法。
收信者是唯一能夠解開加密信息的人,因此收信者手裡的必須是私鑰。發信者手裡的是公鑰,其它人知道公鑰沒有關系,因為其它人發來的信息對收信者沒有意義。
客戶端需要將認證標識傳送給伺服器,此認證標識 (可能是一個隨機數) 其它客戶端可以知道,因此需要用私鑰加密,客戶端保存的是私鑰。伺服器端保存的是公鑰,其它伺服器知道公鑰沒有關系,因為客戶端不需要登錄其它伺服器。
數字簽名是為了表明信息沒有受到偽造,確實是信息擁有者發出來的,附在信息原文的後面。就像手寫的簽名一樣,具有不可抵賴性和簡潔性。
簡潔性:對信息原文做哈希運算,得到消息摘要,信息越短加密的耗時越少。
不可抵賴性:信息擁有者要保證簽名的唯一性,必須是唯一能夠加密消息摘要的人,因此必須用私鑰加密 (就像字跡他人無法學會一樣),得到簽名。如果用公鑰,那每個人都可以偽造簽名了。
問題起源:對1和3,發信者怎麼知道從網上獲取的公鑰就是真的?沒有遭受中間人攻擊?
這樣就需要第三方機構來保證公鑰的合法性,這個第三方機構就是 CA (Certificate Authority),證書中心。
CA 用自己的私鑰對信息原文所有者發布的公鑰和相關信息進行加密,得出的內容就是數字證書。
信息原文的所有者以後發布信息時,除了帶上自己的簽名,還帶上數字證書,就可以保證信息不被篡改了。信息的接收者先用 CA給的公鑰解出信息所有者的公鑰,這樣可以保證信息所有者的公鑰是真正的公鑰,然後就能通過該公鑰證明數字簽名是否真實了。
RSA 是目前最有影響力的公鑰加密演算法,該演算法基於一個十分簡單的數論事實:將兩個大素數相乘十分容易,但想要對其乘積進行因式分解卻極其困難,因此可以將乘積公開作為加密密鑰,即公鑰,而兩個大素數組合成私鑰。公鑰是可發布的供任何人使用,私鑰則為自己所有,供解密之用。
A 要把信息發給 B 為例,確定角色:A 為加密者,B 為解密者。首先由 B 隨機確定一個 KEY,稱之為私鑰,將這個 KEY 始終保存在機器 B 中而不發出來;然後,由這個 KEY 計算出另一個 KEY,稱之為公鑰。這個公鑰的特性是幾乎不可能通過它自身計算出生成它的私鑰。接下來通過網路把這個公鑰傳給 A,A 收到公鑰後,利用公鑰對信息加密,並把密文通過網路發送到 B,最後 B 利用已知的私鑰,就能對密文進行解碼了。以上就是 RSA 演算法的工作流程。
由於進行的都是大數計算,使得 RSA 最快的情況也比 DES 慢上好幾倍,無論是軟體還是硬體實現。速度一直是 RSA 的缺陷。一般來說只用於少量數據加密。RSA 的速度是對應同樣安全級別的對稱密碼演算法的1/1000左右。
比起 DES 和其它對稱演算法來說,RSA 要慢得多。實際上一般使用一種對稱演算法來加密信息,然後用 RSA 來加密比較短的公鑰,然後將用 RSA 加密的公鑰和用對稱演算法加密的消息發送給接收方。
這樣一來對隨機數的要求就更高了,尤其對產生對稱密碼的要求非常高,否則的話可以越過 RSA 來直接攻擊對稱密碼。
和其它加密過程一樣,對 RSA 來說分配公鑰的過程是非常重要的。分配公鑰的過程必須能夠抵擋中間人攻擊。假設 A 交給 B 一個公鑰,並使 B 相信這是A 的公鑰,並且 C 可以截下 A 和 B 之間的信息傳遞,那麼 C 可以將自己的公鑰傳給 B,B 以為這是 A 的公鑰。C 可以將所有 B 傳遞給 A 的消息截下來,將這個消息用自己的密鑰解密,讀這個消息,然後將這個消息再用 A 的公鑰加密後傳給 A。理論上 A 和 B 都不會發現 C 在偷聽它們的消息,今天人們一般用數字認證來防止這樣的攻擊。
(1) 針對 RSA 最流行的攻擊一般是基於大數因數分解。1999年,RSA-155 (512 bits) 被成功分解,花了五個月時間(約8000 MIPS 年)和224 CPU hours 在一台有3.2G 中央內存的 Cray C916計算機上完成。
RSA-158 表示如下:
2009年12月12日,編號為 RSA-768 (768 bits, 232 digits) 數也被成功分解。這一事件威脅了現通行的1024-bit 密鑰的安全性,普遍認為用戶應盡快升級到2048-bit 或以上。
RSA-768表示如下:
(2) 秀爾演算法
量子計算里的秀爾演算法能使窮舉的效率大大的提高。由於 RSA 演算法是基於大數分解 (無法抵抗窮舉攻擊),因此在未來量子計算能對 RSA 演算法構成較大的威脅。一個擁有 N 量子位的量子計算機,每次可進行2^N 次運算,理論上講,密鑰為1024位長的 RSA 演算法,用一台512量子比特位的量子計算機在1秒內即可破解。
DSA (Digital Signature Algorithm) 是 Schnorr 和 ElGamal 簽名演算法的變種,被美國 NIST 作為 DSS (DigitalSignature Standard)。 DSA 是基於整數有限域離散對數難題的。
簡單的說,這是一種更高級的驗證方式,用作數字簽名。不單單只有公鑰、私鑰,還有數字簽名。私鑰加密生成數字簽名,公鑰驗證數據及簽名,如果數據和簽名不匹配則認為驗證失敗。數字簽名的作用就是校驗數據在傳輸過程中不被修改,數字簽名,是單向加密的升級。
橢圓加密演算法(ECC)是一種公鑰加密演算法,最初由 Koblitz 和 Miller 兩人於1985年提出,其數學基礎是利用橢圓曲線上的有理點構成 Abel 加法群上橢圓離散對數的計算困難性。公鑰密碼體制根據其所依據的難題一般分為三類:大整數分解問題類、離散對數問題類、橢圓曲線類。有時也把橢圓曲線類歸為離散對數類。
ECC 的主要優勢是在某些情況下它比其他的方法使用更小的密鑰 (比如 RSA),提供相當的或更高等級的安全。ECC 的另一個優勢是可以定義群之間的雙線性映射,基於 Weil 對或是 Tate 對;雙線性映射已經在密碼學中發現了大量的應用,例如基於身份的加密。不過一個缺點是加密和解密操作的實現比其他機制花費的時間長。
ECC 被廣泛認為是在給定密鑰長度的情況下,最強大的非對稱演算法,因此在對帶寬要求十分緊的連接中會十分有用。
比特幣錢包公鑰的生成使用了橢圓曲線演算法,通過橢圓曲線乘法可以從私鑰計算得到公鑰, 這是不可逆轉的過程。
https://github.com/esxgx/easy-ecc
Java 中 Chipher、Signature、KeyPairGenerator、KeyAgreement、SecretKey 均不支持 ECC 演算法。
https://www.jianshu.com/p/58c1750c6f22
DH,全稱為"Diffie-Hellman",它是一種確保共享 KEY 安全穿越不安全網路的方法,也就是常說的密鑰一致協議。由公開密鑰密碼體制的奠基人 Diffie 和 Hellman 所提出的一種思想。簡單的說就是允許兩名用戶在公開媒體上交換信息以生成"一致"的、可以共享的密鑰。也就是由甲方產出一對密鑰 (公鑰、私鑰),乙方依照甲方公鑰產生乙方密鑰對 (公鑰、私鑰)。
以此為基線,作為數據傳輸保密基礎,同時雙方使用同一種對稱加密演算法構建本地密鑰 (SecretKey) 對數據加密。這樣,在互通了本地密鑰 (SecretKey) 演算法後,甲乙雙方公開自己的公鑰,使用對方的公鑰和剛才產生的私鑰加密數據,同時可以使用對方的公鑰和自己的私鑰對數據解密。不單單是甲乙雙方兩方,可以擴展為多方共享數據通訊,這樣就完成了網路交互數據的安全通訊。
具體例子可以移步到這篇文章: 非對稱密碼之DH密鑰交換演算法
參考:
https://blog.csdn.net/u014294681/article/details/86705999
https://www.cnblogs.com/wangzxblog/p/13667634.html
https://www.cnblogs.com/taoxw/p/15837729.html
https://www.cnblogs.com/fangfan/p/4086662.html
https://www.cnblogs.com/utank/p/7877761.html
https://blog.csdn.net/m0_59133441/article/details/122686815
https://www.cnblogs.com/muliu/p/10875633.html
https://www.cnblogs.com/wf-zhang/p/14923279.html
https://www.jianshu.com/p/7a927db713e4
https://blog.csdn.net/ljx1400052550/article/details/79587133
https://blog.csdn.net/yuanjian0814/article/details/109815473
③ 小巴成長記-比特幣的技術來源
我們經常說比特幣具有去中心化、不可篡改、不可偽造等特點。這是為什麼呢?當然下面的文字其實並沒有看起來那麼嚇人,姑且從三個方面來講講,你也要耐著性子聽聽吧。
1、非對稱加密是比特幣去中心化的來源
中心化是需要一個類似銀行的中心機構來驗證交易的。去中心化本質上是讓所有的節點都能驗證交易的真偽,中本聰用了非對稱加密的技術來解決中心化的問題。
非對稱加密技術是什麼?是指加密和解密的時候使用不同的密鑰的加密演算法。比如:A要向B發送信息,A和B都要產生一對用於加密的公鑰和私鑰顧名思義,私鑰就是不能公開的,公鑰就是要公開的。A發送信息給B時,A就用B的公鑰對信息加密,B收到後,B用B的私鑰解密A的消息,而其他所有收到這個信息的人都無法解密,因為只有B才擁有這個私鑰。
簡單的說,公鑰和私鑰在非對稱加密機制里是成對存在的,公鑰和私鑰可以去相互驗證對方,我們可以把地址理解為公鑰,把簽名輸密碼的過程理解為私鑰的簽名。每個礦工在拿到一筆轉賬交易時,都可以時都可以驗證公鑰和私鑰到底是不是匹配的,如果是匹配的,這筆交易就合法。這樣,我們每個人只需要保管好自己的私鑰,自己的公鑰和對方的公鑰就可以安全地進行轉賬,不需要中心的機構來驗證對方發來的比特幣是不是真的。
2、工作量證明機制是比特幣不可篡改的技術來源
工作量證明 機制,是一種對在差不多時間內發生的事物的先後順序達成共識的一種演算法。監測工作的整個過程通常是效率非常低的,而通過對工作的結果進行認證來證明完成了一定工作的工作量,是一種非常高效的方式。比如我們日常中的各種證 駕駛證 學位證 結婚證就是這樣一種有結果獲悉完成工作量的證明。
工作量證明 的特點,對於執行方來說難度是適中的,對於驗證方來說是非常容易被驗證的。礦工們通過哈希計算,最先算出結果,獲得記賬權,其他節點經過非常簡單的驗證之後,就可以同樣其記賬,並同步賬本。打上時間戳後,緊接著進行下一輪計算。
如果這時候有人想把某個信息進行修改,他需要做什麼呢?他需要從這個區塊開始把之後所有的區塊都重新計算一遍,把賬本再同步給其他人。而在他進行計算的同時,其他礦工們已經在原來的的鏈上繼續往前進行計算了。因為在比特幣的網路里,大家認為最長的鏈才是正確的鏈。所以,這個惡意篡改的人,需要在很短的時間內趕上現有區塊的高度度,讓自己的這條鏈成為最長的鏈,並讓其他礦工誤以為自己的這條鏈是正確的,這基本上是一件不可能的事,除非這個惡意篡改的人擁有超強的算力,至少超過全網的50%。那麼我們來算算,現在全網的算力是8億哈希每秒,也就是每秒進行8乘10的18次方計算,現在市場上流行的主流礦機每台的算力是10T左右,如果你想擁有全網51%的算力,你最少需要40萬台最新礦機,如果按1萬元每台礦機計算,僅設備就需投入40億元人民幣,加上礦機的供不應求,老礦機算力下降,全網算力的不斷上漲等因素,如果不是為了60億以上的利潤回報並有強大的技術做支撐,一般人很難有這個動機和能力。
3、「UTXO」結構是比特幣不可偽造的技術來源
先問個問題,如果我發給你1個比特幣,你怎麼知道這個比特幣是真的而不是我偽造出來的,或者我已經同時轉給了其他人了呢,這就要說到UTXO結構了。
UTXO(Unspend Transaction Output)是個什麼鬼?意思是未花費的交易輸出。來個栗子,假設我要給你100元,其中有兩張張50元紙鈔,一張是隔壁老王給我的,另外一張是小賣部小麗找零給我的,拿到這兩張張鈔票我需要拿在手上並還未花出去時才能交易給你,這就是未花費的交易輸出。而通過這兩張鈔票往前追溯可以知道是誰交給了老王和小麗,並最終追溯到是由哪家銀行發行,什麼時候央行批准發行的源頭,比特幣里也有這樣一個原理。在比特幣世界裡的每一筆轉賬,都能夠追溯到上一筆交易。每一筆付款,都可以追溯到上一筆的收款。一直往上追溯到它誕生時礦工挖出來的那個區塊。
這個機制就保證了在比特幣網路里,比特幣是不可以偽造和重復交易的。在比特幣世界裡,重復支付被叫做「雙花」,就是花費了兩次的意思。
④ 比特幣源碼研讀一:橢圓曲線在比特幣密碼中的加密原理
參加比特幣源碼研讀班後首次寫作,看到前輩black寫的有關密鑰,地址寫的很好了,就選了他沒有寫的橢圓曲線,斗膽寫這一篇。
在密碼學上有兩種加密方式,分別是對稱密鑰加密和非對稱密鑰加密。
對稱加密:加密和解密使用的同樣的密鑰。
非對稱加密:加密和解密是使用的不同的密鑰。
二戰中圖靈破解德軍的恩尼格碼應該就是用的對稱加密,因為他的加密和解密是同一個密鑰。比特幣的加密是非對稱加密,而且用的是破解難度較大的橢圓曲線加密,簡稱ECC。
非對稱加密的通用原理就是用一個難以解決的數學難題做到加密效果,比如RSA加密演算法。RSA加密演算法是用求解一個極大整數的因數的難題做到加密效果的。就是說兩個極大數相乘,得到乘積很容易,但是反過來算數一個極大整數是由哪兩個數乘積算出來的就非常困難。
下面簡要介紹一下橢圓曲線加密演算法ECC。
首先橢圓曲線的通式是這個樣子的:
一般簡化為這個樣子:
()發公式必須吐槽一下,太麻煩了。)
其中
這樣做就排除了帶有奇點的橢圓曲線,可以理解為所有的點都有一條切線。
圖像有幾種,下面列舉幾個:[1]
橢圓曲線其實跟橢圓關系不大,也不像圓錐曲線那樣,是有圓錐的物理模型為基礎的。在計算橢圓曲線的周長時,需要用到橢圓積分,而橢圓曲線的簡化通式:
,周長公式在變換後有一項是這樣的:,平方之後兩者基本一樣。
我們大體了解了橢圓曲線,就會有一個疑問,這個東西怎麼加密的呢?也就是說橢圓曲線是基於怎樣的數學難題呢?在此之前還得了解一些最少必要知識:橢圓曲線加法,離散型橢圓曲線。
橢圓曲線加法
數學家門從普通的代數運算中,抽象出了加群(也叫阿貝爾群或交換群),使得在加群中,實數的演算法和橢圓曲線的演算法得到統一。
數學中的「群」是一個由我們定義了一種二元運算的集合,二元運算我們稱之為「加法」,並用符號「+」來表示。為了讓一個集合G成為群,必須定義加法運算並使之具有以下四個特性:
1. 封閉性:如果a和b是集合G中的元素,那麼(a + b)也是集合G中的元素。
2. 結合律:(a + b) + c = a + (b + c);
3. 存在單位元0,使得a + 0 = 0 + a =a;
4. 每個元素都有逆元,即:對於任意a,存在b,使得a + b = 0.
如果我們增加第5個條件:
5. 交換律: a + b = b + a
那麼,稱這個群為阿貝爾群。[1]
運演算法則:任意取橢圓曲線上兩點P、Q (若P、Q兩點重合,則做P點的切線)做直線交於橢圓曲線的另一點R』,過R』做y軸的平行線交於R。我們規定P+Q=R。(如圖)[2]
特別的,當P和Q重合時,P+Q=P+P=2P,對於共線的三點,P,Q,R』有P+Q+R』=0∞.
這里的0∞不是實數意義的0,而是指的無窮遠點(這里的無窮遠點就不細說了,你可以理解為這個點非常遙遠,遙遠到兩條平行線都在這一點相交了。具體介紹可以看參考文獻[2])。
注意這里的R與R』之間的區別,P+Q=R,R並沒有與P,Q共線,是R』與P,Q共線,不要搞錯了。
法則詳解:
這里的+不是實數中普通的加法,而是從普通加法中抽象出來的加法,他具備普通加法的一些性質,但具體的運演算法則顯然與普通加法不同。
根據這個法則,可以知道橢圓曲線無窮遠點O∞與橢圓曲線上一點P的連線交於P』,過P』作y軸的平行線交於P,所以有無窮遠點 O∞+ P = P 。這樣,無窮遠點 O∞的作用與普通加法中零的作用相當(0+2=2),我們把無窮遠點 O∞ 稱為零元。同時我們把P』稱為P的負元(簡稱,負P;記作,-P)。(參見下圖)
離散型橢圓曲線
上面給出的很好看的橢圓曲線是在實數域上的連續曲線,這個是不能用來加密的,原因我沒有細究,但一定是連續曲線上的運算太簡單。真正用於加密的橢圓曲線是離散型的。要想有一個離散型的橢圓曲線,先得有一個有限域。
域:在抽象代數中,域(Field)之一種可進行加、減、乘、除運算的代數結構。它是從普通實數的運算中抽像出來的。這一點與阿貝爾群很類似。只不過多了乘法,和與乘法相關的分配率。
域有如下性質[3]:
1.在加法和乘法上封閉,即域里的兩個數相加或相乘的結果也在這個域中。
2.加法和乘法符合結合律,交換率,分配率。
3.存在加法單位,也可以叫做零元。即存在元素0,對於有限域內所有的元素a,有a+0=a。
4.存在乘法單位,也可以叫做單位元。即存在元素1,對於有限域內所有的元素a,有1*a=a。
5.存在加法逆元,即對於有限域中所有的元素a,都存在a+(-a)=0.
6.存在乘法逆元,即對於有限域中所有的元素a,都存在a*=0.
在掌握了這些知識後,我們將橢圓曲線離散化。我們給出一個有限域Fp,這個域只有有限個元素。Fp中只有p(p為素數)個元素0,1,2 …… p-2,p-1;
Fp 的加法(a+b)法則是 a+b≡c (mod p);它的意思是同餘,即(a+b)÷p的余數與c÷p的余數相同。
Fp 的乘法(a×b)法則是 a×b≡c (mod p);
Fp 的除法(a÷b)法則是 a/b≡c (mod p);即 a×b∧-1≡c (mod p);(也是一個0到p-1之間的整數,但滿足b×b∧-1≡1 (mod p);
Fp 的單位元是1,零元是 0(這里的0就不是無窮遠點了,而是真正的實數0)。
下面我們就試著把
這條曲線定義在Fp上:
選擇兩個滿足下列條件的小於p(p為素數)的非負整數a、b,且a,b滿足
則滿足下列方程的所有點(x,y),再加上無窮遠點O∞ ,構成一條橢圓曲線。
其中 x,y屬於0到p-1間的整數,並將這條橢圓曲線記為Ep(a,b)。
圖是我手畫的,大家湊合看哈。不得不說,p取7時,別看只有10個點,但計算量還是很大的。
Fp上的橢圓曲線同樣有加法,法則如下:
1. 無窮遠點 O∞是零元,有O∞+ O∞= O∞,O∞+P=P
2. P(x,y)的負元是 (x,-y),有P+(-P)= O∞
3. P(x1,y1),Q(x2,y2)的和R(x3,y3) 有如下關系:
x3≡-x1-x2(mod p)
y3≡k(x1-x3)-y1(mod p)
其中若P=Q 則 k=(3+a)/2y1 若P≠Q,則k=(y2-y1)/(x2-x1)
通過這些法則,就可以進行離散型橢圓曲線的計算。
例:根據我畫的圖,(1,1)中的點P(2,4),求2P。
解:把點帶入公式k=(3*x∧2+a)/2y1
有(3*2∧2+1)/2*4=6(mod 7).
(注意,有些小夥伴可能算出13/8,這是不對的,這里是模數算數,就像鍾表一樣,過了12點又回到1點,所以在模為7的世界裡,13=6,8=1).
x=6*6-2-2=4(mod 7)
y=6*(2-4)-4=2 (mod 7)
所以2P的坐標為(2,4)
那橢圓曲線上有什麼難題呢?在模數足夠大的情況下,上面這個計算過程的逆運算就足夠難。
給出如下等式:
K=kG (其中 K,G為Ep(a,b)上的點,k為小於n(n是點G的階)的整數)不難發現,給定k和G,根據加法法則,計算K很容易;但給定K和G,求k就相對困難了。
這就是橢圓曲線加密演算法採用的難題。我們把點G稱為基點(base point),k稱為私鑰,K稱為公鑰。
現在我們描述一個利用橢圓曲線進行加密通信的過程[2]:
1、用戶A選定一條橢圓曲線Ep(a,b),並取橢圓曲線上一點,作為基點G。
2、用戶A選擇一個私鑰k,並生成公鑰K=kG。
3、用戶A將Ep(a,b)和點K,G傳給用戶B。
4、用戶B接到信息後 ,將待傳輸的明文編碼到Ep(a,b)上一點M(編碼方法很多,這里不作討論),並產生一個隨機整數r(r<n)。
5、用戶B計算點C1=M+rK;C2=rG。
6、用戶B將C1、C2傳給用戶A。
7、用戶A接到信息後,計算C1-kC2,結果就是點M。因為
C1-kC2=M+rK-k(rG)=M+rK-r(kG)=M
再對點M進行解碼就可以得到明文。
整個過程如下圖所示:
密碼學中,描述一條Fp上的橢圓曲線,常用到六個參量:
T=(p,a,b,G,n,h),p 、a 、b 用來確定一條橢圓曲線,G為基點,n為點G的階,h 是橢圓曲線上所有點的個數m與n相除的整數部分
這幾個參量取值的選擇,直接影響了加密的安全性。參量值一般要求滿足以下幾個條件:
1、p 當然越大越安全,但越大,計算速度會變慢,200位左右可以滿足一般安全要求;
2、p≠n×h;
3、pt≠1 (mod n),1≤t<20;
4、4a3+27b2≠0 (mod p);
5、n 為素數;
6、h≤4。
200位位的一個數字,那得多大?而且還是素數,所以這種方式是非常安全的。而且再一次交易中,區塊被記錄下來只有10分鍾的時間,也就是說要想解決這個難題必須在10分鍾以內。即便有技術能夠在10分鍾以內破解了現在這個難度的加密演算法,比特幣社區還可以予以反制,提高破解難度。所以比特幣交易很安全,除非自己丟掉密鑰,否則不存在被破解可能。
第一次寫一個完全陌生的數學領域的知識,也許我有錯誤的地方,也許有沒講明白的地方,留言討論吧。總之寫完後對比特比系統的安全性表示很放心。
參考文獻
[1] 橢圓曲線密碼學簡介
[2] 什麼是橢圓曲線加密(ECC)
[3] 域(數學)維基網路
區塊鏈研習社源碼研讀班 高若翔
⑤ 區塊鏈系統開發-區塊鏈交易系統開發-的核心技術有哪些
區塊鏈技術是當今新興的一項技術,但這么說也不太妥當,因為十年前比特幣的出現這項技術也隨之誕生,但說其是當下很火熱的技術是沒問題的。區塊鏈技術經過10年來的不斷更新,終於在近兩年都有了相關的應用落地,且進入了區塊鏈3.0時代,未來的3-5年,相信會有更多的領域需要區塊鏈系統來支撐。下面區塊鏈系統開發路普達(loopodo)小編就帶大家來看一下,區塊鏈系統開發的幾大核心技術。
一、哈希演算法
哈希演算法是區塊鏈系統開發中用的最多的一種演算法,哈希函數(Hash Function),也稱為散列函數或雜湊函數,哈希函數可將任意長度的資料經由Hash演算法轉換為一組固定長度的代碼,原理是基於一種密碼學上的單向哈希函數,這種函數很容易被驗證,但是卻很難破解。通常業界使用y =h (x)的方式進行表示,該哈希函數實現對x進行運算計算出一個哈希值y。
二、非對稱加密演算法
非對稱加密演算法是一種密鑰的保密方法,非對稱加密演算法需要兩個密鑰:公開密鑰(publickey)和私有密鑰(privatekey)。公開密鑰與私有密鑰是一對,如果用公開密鑰對數據進行加密,只有用對應的私有密鑰才能解密。因為加密和解密使用的是兩個不同的密鑰,所以這種演算法叫作非對稱加密演算法
三、共識機制
所謂「共識機制」,是通過特殊節點的投票,在很短的時間內完成對交易的驗證和確認;對一筆交易,如果利益不相乾的若干個節點能夠達成共識,我們就可以認為全網對此也能夠達成共識。
現今區塊鏈的共識機制可分為四大類:工作量證明機制(PoW)、權益證明機制(PoS)、股份授權證明機制(DPoS)和Pool驗證池。
四、智能合約
智能合約就是傳統合約的數字化網路化版本。它們是區塊鏈上運行的計算機程序,可以滿足在源代碼中寫入的條件時自行執行。智能合約一旦編寫好就可以被用戶信賴,合約條款就不會被改變,因此合約是不可更改的,並且任何人也不能修改。
開發發人員會為智能合約編寫代碼,這樣就是用於交易和兩方乃至多方之間的任何交換行為。代碼里會包含一些觸發合約自動執行的條件。一旦完成編寫,智能合約就會自動被上傳到網路上。數據上傳到所有設備上以後,用戶就可以與執行程序代碼的結果達成協議。
五、分布式存儲
分布式存儲是通過網路使用企業中的每台機器上的磁碟空間,並將這些分散的存儲資源構成一個虛擬的存儲設備,數據分散的存儲在企業的各個角落。海量的數據按照結構化程度來分,可以大致分為結構化數據,非結構化數據,半結構化數據。
路普達網路科技專注區塊鏈系統開發,以太坊開發,區塊鏈交易系統開發、虛擬幣平台開發,幣幣交易系統開發、數字貨幣錢包系統開發
⑥ 非對稱加密的應用
應用1:加密通信
|明文|->公鑰加密->|密文|->私鑰解密->|明文|
這種加密路徑用於和他人進行加密通信,作用等同於對稱加密。
我們回到Alice和Bob的例子來看下。
如果Bob想利用非對稱加密演算法私密的接收他人向他發送的信息,步驟是這樣的。
1.首先Bob需要使用具體約定的演算法(例如RSA)生成密鑰和公鑰,密鑰自己保留,公鑰對外公布。
2.Alice拿到Bob的公鑰後,便可以對想要發送的消息「Alice已向Bob轉賬1BTC,請查收。」進行加密。
3.然後Alice將密文(例如是「FH39ggJ+shi3djifg35」)發送給Bob。
4.Bob收到消息後,用自己的私鑰進行解密,還原出消息原文「Alice已向Bob轉賬1BTC,請查收。」
由於使用Bob公鑰加密的消息只能用Bob的私鑰解密(Bob的公鑰也是不行的),而私鑰只有Bob擁有,因此即使消息被第三方劫持,他也無法還原出消息明文。
應用2:數字簽名
如果反過來,先用私鑰加密呢?這便誕生了非對稱加密的另一個重要應用:數字簽名
我們回到Alice和Bob的例子來看下。
在比特幣系統中,類似「Alice已向Bob轉賬1BTC,請查收。」這樣的消息最終會被礦工記錄在賬本上,是與轉賬雙方利益相關的。這樣一條消息的受益方是Bob,我們腹黑一點想,如果Bob一直向網路中廣播Alice給他轉賬的消息呢?
Bob:「Alice已向Bob轉賬1BTC」
Bob:「Alice已向Bob轉賬2BTC」
Bob:「Alice已向Bob轉賬3BTC」
…
因此,我們需要一種機制來證明Alice是「自願」的,也就是消息是Alice親自發出的。步驟是這樣的:
1.Alice需要使用具體約定的演算法(例如RSA)生成密鑰和公鑰,密鑰自己保留,公鑰對外公布。
2.當Alice想要發送消息 Alice已向Bob轉賬1BTC,請查收。| 我的公鑰是:「gh3giPGFN2jgh3sF」。 時,Alice使用自己的私鑰對消息進行加密,假設加密後的密文是 SHG356g3T4+dh4fh,現在這個密文可以看作Alice的數字簽名。
3.Alice將消息明文和數字簽名放到一起並發送到網路中
發送的消息類似這樣的形式 Alice已向Bob轉賬1BTC,請查收。| 我的公鑰是:「gh3giPGFN2jgh3sF」。| 簽名:「SHG356g3T4+dh4fh」
4.網路中的所有人接收到消息後,都可以進行如下操作完成驗證:
收到消息 Alice已向Bob轉賬1BTC,請查收。| 我的公鑰是:「gh3giPGFN2jgh3sF」。| 簽名:「SHG356g3T4+dh4fh」
使用Alice在消息中提供的公鑰 gh3giPGFN2jgh3sF對私鑰簽署的數字簽名SHG356g3T4+dh4fh進行解密
將解密結果與消息明文 Alice已向Bob轉賬1BTC,請查收。| 我的公鑰是:「gh3giPGFN2jgh3sF」進行對比
如果一致,說明消息是Alice親自發送的,因為只有Alice本人擁有Alice的密鑰
如果不一致,則說明消息不是Alice發送的,或者雖然消息是Alice發送的但已遭到他人篡改
5.於是,通過4中描述的方法,Bob確認了Alice給他了一筆價值1BTC的轉賬。
網路中其他人(礦工)均成功驗證了這條消息的真實性,並為Bob作證他的賬戶新增了1個BTC,Alice的賬戶減少了1個BTC。
⑦ 什麼是比特幣加密技術
比特幣和區塊鏈的誕生需要依賴於很多核心技術的突破:一是拜占庭容錯技術;二是非對稱加密技術;三是點對點支付技術。下面會依次介紹。
拜占庭容錯技術
比特幣和區塊鏈誕生的首要難點在於如何創建分布式共識機制,也就是菜斯利·蘭伯特等人1982年提出的拜占庭將軍問題。所謂拜占庭將軍問題是指,把戰爭中互不信任的各城邦軍隊如何達成共識並決定是否出兵的決策過程。延伸至計算機領域,試圖創建具有容錯性的分布式系統,即使部分節點失效仍可確保系統正常運行,也可讓多個基於零信任基礎的節點達成共識,並確保信息傳遞的一致性。
中本聰所提到的「拜占庭將軍問題」解決方法起始於亞當﹒拜克在1997年發明的哈希現金演算法機制,起初該設計是用於限制垃圾郵件發送與拒絕服務攻擊。2004年,密碼朋克運動早期和重要成員哈爾·芬尼將亞當﹒拜克的哈希現金演算法改進為可復用的工作量證明機制。他們的研究又是基於達利亞·馬凱與邁克爾·瑞特的學術成果:拜占庭容錯機制。正是哈爾·芬尼的可復用的工作量證明機制後來成為比特幣的核心要素之一。哈爾·芬尼是中本聰的最早支持者,同時也是第一筆比特幣轉賬的接受者,在比特幣發展的早期與中本聰有大量互動與交流。
非對稱加密技術
比特幣的非對稱加密技術來源於以下幾項密碼學的技術創新:1976年,Sun公司前首席安全官Whitfield Diffie與斯坦福大學教授Martin Hell,在開創性論文《密碼學的新方向》首次提出公開鑰匙密碼學的概念,發明了非對稱加密演算法。1978年省理工學院的倫納德·阿德曼、羅納德·李維斯特、阿迪·薩莫爾三名研究人員,共同發明了公開鑰匙系統「RSA」可用於數據加密和簽名,率先開發第一個具備商業實用性的非對稱RSA加密演算法。1985年,Neal Koblitz和Victor Miller倆人,首次提出將橢圓曲線演算法(ECC),應用於密碼學,並建立公鑰加密的演算法,公鑰密碼演算法的原理是利用信息的不對稱性,公鑰對應的是私鑰,私鑰是解開所有信息的鑰匙,公鑰可以由私鑰反推算出。ECC能夠提供比RSA更高級別的安全。比特幣使用的就是橢圓曲線演算法公鑰用於接收比特幣,而私鑰則是比特幣支付時的交易簽名。這些加密演算法奠定了當前非對稱加密理論的基礎,被廣泛應用於網路通信領域。但是,當時這些加密技術發明均在NSA嚴密監視的視野之內。NSA最初認為它們對國家安全構成威脅,並將其視為軍用技術。直到20世紀90年代末,NSA才放棄對這些非對稱加密技術的控制,RSA演算法、ECC演算法等非對稱加密技術最終得以走進公眾領域。
不過,中本聰並不信任NSA公布的加密技術,在比特幣系統中沒有使用RSA公鑰系統,原因除了ECC能夠提供比RSA更高級別的安全性能外,還擔心美國安全部門在RSA留有技術後門。2013年9月,斯諾登就曾爆料NSA採用秘密方法控制加密國際標准,比特幣採用的RSA可能留有後門,NSA能以不為人知的方法弱化這條曲線。所幸的是,中本聰神一般走位避開了RSA的陷阱,使用的加密技術不是NSA的標准,而是另一條鮮為人知的橢圓曲線,這條曲線並不在美國RSA的掌握之下。全世界只有極少數程序躲過了這一漏洞,比特幣便是其中之一。
⑧ 區塊鏈的加密技術
數字加密技能是區塊鏈技能使用和開展的關鍵。一旦加密辦法被破解,區塊鏈的數據安全性將受到挑戰,區塊鏈的可篡改性將不復存在。加密演算法分為對稱加密演算法和非對稱加密演算法。區塊鏈首要使用非對稱加密演算法。非對稱加密演算法中的公鑰暗碼體制依據其所依據的問題一般分為三類:大整數分化問題、離散對數問題和橢圓曲線問題。第一,引進區塊鏈加密技能加密演算法一般分為對稱加密和非對稱加密。非對稱加密是指集成到區塊鏈中以滿意安全要求和所有權驗證要求的加密技能。非對稱加密通常在加密和解密進程中使用兩個非對稱暗碼,稱為公鑰和私鑰。非對稱密鑰對有兩個特點:一是其間一個密鑰(公鑰或私鑰)加密信息後,只能解密另一個對應的密鑰。第二,公鑰可以向別人揭露,而私鑰是保密的,別人無法通過公鑰計算出相應的私鑰。非對稱加密一般分為三種首要類型:大整數分化問題、離散對數問題和橢圓曲線問題。大整數分化的問題類是指用兩個大素數的乘積作為加密數。由於素數的出現是沒有規律的,所以只能通過不斷的試算來尋找解決辦法。離散對數問題類是指基於離散對數的困難性和強單向哈希函數的一種非對稱分布式加密演算法。橢圓曲線是指使用平面橢圓曲線來計算一組非對稱的特殊值,比特幣就採用了這種加密演算法。非對稱加密技能在區塊鏈的使用場景首要包含信息加密、數字簽名和登錄認證。(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個字元的比特幣地址。公鑰生成進程是不可逆的,即私鑰不能從公鑰推導出來。比特幣的公鑰和私鑰通常存儲在比特幣錢包文件中,其間私鑰最為重要。丟掉私鑰意味著丟掉相應地址的所有比特幣財物。在現有的比特幣和區塊鏈體系中,現已依據實踐使用需求衍生出多私鑰加密技能,以滿意多重簽名等愈加靈敏雜亂的場景。
⑨ 比特幣的核心技術包括 比特幣三大核心技術
眾所周知,比特幣是虛擬貨幣的一種,最早在 2008 年的時候由中本聰提出這一概念,在 2009 年的時候正式誕生。但是比特幣的很多核心技術並不是中本聰發明的,而是他將這些技術都結合在一起才創造了比特幣。那麼,比特幣的核心技術包括哪些呢?對此問題感興趣的小夥伴可以繼續往下閱讀。
比特幣的核心技術
1、非對稱加密技術:非對稱加密技術與對稱加密技術最大的不同是有公鑰和私鑰之分,簡單來說就是公鑰和私鑰是一對,如果用公鑰對數據進行加密,那隻有用對應的私鑰才能解密,從而保證數據傳輸的安全,對應到比特幣中就是比特幣的地址和私鑰;
2、點對點傳輸技術:點對點傳輸技術簡單來說就是去中心化,讓用戶不需要中心伺服器就能進行信息的傳輸,在比特幣中的體現就是比特幣無需央行等中心機構發行,它能夠由計算機自己產生;
3、哈希現金演算法機制:這一技術被應用到了比特幣的發行機制當中,就是用戶用自己電腦的算力進行挖礦,然後比特幣網路就會產出比特幣給第一個挖出區塊的礦工。
好了,以上就是比特幣的核心技術包括哪些的解答,希望能夠幫助到遇到此類問題的小夥伴。
⑩ 比特幣如何防止篡改
比特幣網路主要會通過以下兩種技術保證用戶簽發的交易和歷史上發生的交易不會被攻擊者篡改:
非對稱加密可以保證攻擊者無法偽造賬戶所有者的簽名;
共識演算法可以保證網路中的歷史交易不會被攻擊者替換;
- 非對稱加密演算法3是目前廣泛應用的加密技術,TLS 證書和電子簽名等場景都使用了非對稱的加密演算法保證安全。非對稱加密演算法同時包含一個公鑰(Public Key)和一個私鑰(Secret Key),使用私鑰加密的數據只能用公鑰解密,而使用公鑰解密的數據也只能用私鑰解密。
- 1使用如下所示的代碼可以計算在無限長的時間中,攻擊者持有 51% 算力時,改寫歷史 0 ~ 9 個區塊的概率9:
- #include
- #include
- double attackerSuccessProbability(double q, int z) {
- double p = 1.0 - q;
- double lambda = z * (q / p);
- double sum = 1.0;
- int i, k;
- for (k = 0; k <= z; k++) {
- double poisson = exp(-lambda);
- for (i = 1; i <= k; i++)
- poisson *= lambda / i;
- sum -= poisson * (1 - pow(q / p, z - k));
- }
- return sum;
- }
- int main() {
- for (int i = 0; i < 10; i++) {
- printf("z=%d, p=%f\n", i, attackerSuccessProbability(0.51, i));
- }
- return 0;
- }
- 通過上述的計算我們會發現,在無限長的時間中,佔有全網算力的節點能夠發起 51% 攻擊修改歷史的概率是 100%;但是在有限長的時間中,因為比特幣中的算力是相對動態的,比特幣網路的節點也在避免出現單節點佔有 51% 以上算力的情況,所以想要篡改比特幣的歷史還是比較困難的,不過在一些小眾的、算力沒有保證的一些區塊鏈網路中,51% 攻擊還是極其常見的10。
- 防範 51% 攻擊方法也很簡單,在多數的區塊鏈網路中,剛剛加入區塊鏈網路中的交易都是未確認的,只要這些區塊後面追加了數量足夠的區塊,區塊中的交易才會被確認。比特幣中的交易確認數就是 6 個,而比特幣平均 10 分鍾生成一個塊,所以一次交易的確認時間大概為 60 分鍾,這也是為了保證安全性不得不做出的犧牲。不過,這種增加確認數的做法也不能保證 100% 的安全,我們也只能在不影響用戶體驗的情況下,盡可能增加攻擊者的成本。
- 研究比特幣這樣的區塊鏈技術還是非常有趣的,作為一個分布式的資料庫,它也會遇到分布式系統經常會遇到的問題,例如節點不可靠等問題;同時作為一個金融系統和賬本,它也會面對更加復雜的交易確認和驗證場景。比特幣網路的設計非常有趣,它是技術和金融兩個交叉領域結合後的產物,非常值得我們花時間研究背後的原理。
- 比特幣並不能 100% 防止交易和數據的篡改,文中提到的兩種技術都只能從一定概率上保證安全,而降低攻擊者成功的可能性也是安全領域需要面對的永恆問題。我們可以換一個更嚴謹的方式闡述今天的問題 — 比特幣使用了哪些技術來增加攻擊者的成本、降低交易被篡改的概率:
比特幣使用了非對稱加密演算法,保證攻擊者在有限時間內無法偽造賬戶所有者的簽名;
比特幣使用了工作量證明的共識演算法並引入了記賬的激勵,保證網路中的歷史交易不會被攻擊者快速替換;
- 通過上述的兩種方式,比特幣才能保證歷史的交易不會被篡改和所有賬戶中資金的安全。
非對稱加密
圖 4 - 51% 攻擊
總結