導航:首頁 > 文檔加密 > 橢圓曲線加密的安全性

橢圓曲線加密的安全性

發布時間:2022-10-16 23:02:47

1. 橢圓曲線演算法的比較

橢圓曲線演算法與RSA演算法的比較
橢圓曲線公鑰系統是代替RSA的強有力的競爭者。橢圓曲線加密方法與RSA方法相比,有以下的優點:
(1)安全性能更高 如160位ECC與1024位RSA、DSA有相同的安全強度。
(2)計算量小,處理速度快 在私鑰的處理速度上(解密和簽名),ECC遠 比RSA、DSA快得多。
(3)存儲空間佔用小 ECC的密鑰尺寸和系統參數與RSA、DSA相比要小得多, 所以佔用的存儲空間小得多。
(4)帶寬要求低使得ECC具有廣泛的應用前景。
ECC的這些特點使它必將取代RSA,成為通用的公鑰加密演算法。比如SET協議的制定者已把它作為下一代SET協議中預設的公鑰密碼演算法。

2. 十大常見密碼加密方式

一、密鑰散列

採用MD5或者SHA1等散列演算法,對明文進行加密。嚴格來說,MD5不算一種加密演算法,而是一種摘要演算法。無論多長的輸入,MD5都會輸出一個128位(16位元組)的散列值。而SHA1也是流行的消息摘要演算法,它可以生成一個被稱為消息摘要的160位(20位元組)散列值。MD5相對SHA1來說,安全性較低,但是速度快;SHA1和MD5相比安全性高,但是速度慢。

二、對稱加密

採用單鑰密碼系統的加密方法,同一個密鑰可以同時用作信息的加密和解密,這種加密方法稱為對稱加密。對稱加密演算法中常用的演算法有:DES、3DES、TDEA、Blowfish、RC2、RC4、RC5、IDEA、SKIPJACK等。

三、非對稱加密

非對稱加密演算法是一種密鑰的保密方法,它需要兩個密鑰來進行加密和解密,這兩個密鑰是公開密鑰和私有密鑰。公鑰與私鑰是一對,如果用公鑰對數據進行加密,只有用對應的私鑰才能解密。非對稱加密演算法有:RSA、Elgamal、背包演算法、Rabin、D-H、ECC(橢圓曲線加密演算法)。

四、數字簽名

數字簽名(又稱公鑰數字簽名)是只有信息的發送者才能產生的別人無法偽造的一段數字串,這段數字串同時也是對信息的發送者發送信息真實性的一個有效證明。它是一種類似寫在紙上的普通的物理簽名,但是在使用了公鑰加密領域的技術來實現的,用於鑒別數字信息的方法。

五、直接明文保存

早期很多這樣的做法,比如用戶設置的密碼是「123」,直接就將「123」保存到資料庫中,這種是最簡單的保存方式,也是最不安全的方式。但實際上不少互聯網公司,都可能採取的是這種方式。

六、使用MD5、SHA1等單向HASH演算法保護密碼

使用這些演算法後,無法通過計算還原出原始密碼,而且實現比較簡單,因此很多互聯網公司都採用這種方式保存用戶密碼,曾經這種方式也是比較安全的方式,但隨著彩虹表技術的興起,可以建立彩虹表進行查表破解,目前這種方式已經很不安全了。

七、特殊的單向HASH演算法

由於單向HASH演算法在保護密碼方面不再安全,於是有些公司在單向HASH演算法基礎上進行了加鹽、多次HASH等擴展,這些方式可以在一定程度上增加破解難度,對於加了「固定鹽」的HASH演算法,需要保護「鹽」不能泄露,這就會遇到「保護對稱密鑰」一樣的問題,一旦「鹽」泄露,根據「鹽」重新建立彩虹表可以進行破解,對於多次HASH,也只是增加了破解的時間,並沒有本質上的提升。

八、PBKDF2

該演算法原理大致相當於在HASH演算法基礎上增加隨機鹽,並進行多次HASH運算,隨機鹽使得彩虹表的建表難度大幅增加,而多次HASH也使得建表和破解的難度都大幅增加。

九、BCrypt

BCrypt 在1999年就產生了,並且在對抗 GPU/ASIC 方面要優於 PBKDF2,但是我還是不建議你在新系統中使用它,因為它在離線破解的威脅模型分析中表現並不突出。

十、SCrypt

SCrypt 在如今是一個更好的選擇:比 BCrypt設計得更好(尤其是關於內存方面)並且已經在該領域工作了 10 年。另一方面,它也被用於許多加密貨幣,並且我們有一些硬體(包括 FPGA 和 ASIC)能實現它。 盡管它們專門用於采礦,也可以將其重新用於破解。

3. 目前金融業主流加密演算法是RSA還是橢圓曲線

當然是RSA。橢圓曲線是比較安全,但是計算量也要大一些。而且,金融是一個比較保守的行業。很可能覺得橢圓曲線還是太「新」了,其安全性需要時間來證明。

4. 高中生如何理解比特幣加密演算法

加密演算法是數字貨幣的基石,比特幣的公鑰體系採用橢圓曲線演算法來保證交易的安全性。這是因為要攻破橢圓曲線加密就要面對離散對數難題,目前為止還沒有找到在多項式時間內解決的辦法,在演算法所用的空間足夠大的情況下,被認為是安全的。本文不涉及高深的數學理論,希望高中生都能看懂。

密碼學具有久遠的歷史,幾乎人人都可以構造出加解密的方法,比如說簡單地循環移位。古老或簡單的方法需要保密加密演算法和秘鑰。但是從歷史上長期的攻防斗爭來看,基於加密方式的保密並不可靠,同時,長期以來,秘鑰的傳遞也是一個很大的問題,往往面臨秘鑰泄漏或遭遇中間人攻擊的風險。

上世紀70年代,密碼學迎來了突破。Ralph C. Merkle在1974年首先提出非對稱加密的思想,兩年以後,Whitfield Diffie和Whitfield Diffie兩位學者以單向函數和單向暗門函數為基礎提出了具體的思路。隨後,大量的研究和演算法涌現,其中最為著名的就是RSA演算法和一系列的橢圓曲線演算法。

無論哪一種演算法,都是站在前人的肩膀之上,主要以素數為研究對象的數論的發展,群論和有限域理論為基礎。內容加密的秘鑰不再需要傳遞,而是通過運算產生,這樣,即使在不安全的網路中進行通信也是安全的。密文的破解依賴於秘鑰的破解,但秘鑰的破解面臨難題,對於RSA演算法,這個難題是大數因式分解,對於橢圓曲線演算法,這個難題是類離散對數求解。兩者在目前都沒有多項式時間內的解決辦法,也就是說,當位數增多時,難度差不多時指數級上升的。

那麼加解密如何在公私鑰體系中進行的呢?一句話,通過在一個有限域內的運算進行,這是因為加解密都必須是精確的。一個有限域就是一個具有有限個元素的集合。加密就是在把其中一個元素映射到另一個元素,而解密就是再做一次映射。而有限域的構成與素數的性質有關。

前段時間,黎曼猜想(與素數定理關系密切)被熱炒的時候,有一位區塊鏈項目的技術總監說橢圓曲線演算法與素數無關,不受黎曼猜想證明的影響,就完全是瞎說了。可見區塊鏈項目內魚龍混雜,確實需要好好洗洗。

比特幣及多數區塊鏈項目採用的公鑰體系都是橢圓曲線演算法,而非RSA。而介紹橢圓曲線演算法之前,了解一下離散對數問題對其安全性的理解很有幫助。

先來看一下 費馬小定理

原根 定義:
設(a, p)=1 (a與p互素),滿足

的最下正整數 l,叫作a模p的階,模p階為(最大值)p-1的整數a叫作模p的原根。

兩個定理:

基於此,我們可以看到,{1, 2, 3, … p-1} 就是一個有限域,而且定義運算 gi (mod p), 落在這個有限域內,同時,當i取0~p-2的不同數時,運算結果不同。這和我們在高中學到的求冪基本上是一樣的,只不過加了一層求模運算而已。

另一點需要說明的是,g的指數可以不限於0~p-2, 其實可以是所有自然數,但是由於

所以,所有的函數值都是在有限域內,而且是連續循環的。

離散對數定義:
設g為模p的原根,(a,p) = 1,

我們稱 i 為a(對於模p的原根g)的指數,表示成:

這里ind 就是 index的前3個字母。
這個定義是不是和log的定義很像?其實這也就是我們高中學到的對數定義的擴展,只不過現在應用到一個有限域上。

但是,這與實數域上的對數計算不同,實數域是一個連續空間,其上的對數計算有公式和規律可循,但往往很難做到精確。我們的加密體系裡需要精確,但是在一個有限域上的運算極為困難,當你知道冪值a和對數底g,求其離散對數值i非常困難。

當選擇的素數P足夠大時,求i在時間上和運算量上變得不可能。因此我們可以說i是不能被計算出來的,也就是說是安全的,不能被破解的。

比特幣的橢圓曲線演算法具體而言採用的是 secp256k1演算法。網上關於橢圓曲線演算法的介紹很多,這里不做詳細闡述,大家只要知道其實它是一個三次曲線(不是一個橢圓函數),定義如下:

那麼這里有參數a, b;取值不同,橢圓曲線也就不同,當然x, y 這里定義在實數域上,在密碼體系裡是行不通的,真正採用的時候,x, y要定義在一個有限域上,都是自然數,而且小於一個素數P。那麼當這個橢圓曲線定義好後,它反應在坐標系中就是一些離散的點,一點也不像曲線。但是,在設定的有限域上,其各種運算是完備的。也就是說,能夠通過加密運算找到對應的點,通過解密運算得到加密前的點。

同時,與前面講到的離散對數問題一樣,我們希望在這個橢圓曲線的離散點陣中找到一個有限的子群,其具有我們前面提到的遍歷和循環性質。而我們的所有計算將使用這個子群。這樣就建立好了我們需要的一個有限域。那麼這里就需要子群的階(一個素數n)和在子群中的基點G(一個坐標,它通過加法運算可以遍歷n階子群)。

根據上面的描述,我們知道橢圓曲線的定義包含一個五元祖(P, a, b, G, n, h);具體的定義和概念如下:

P: 一個大素數,用來定義橢圓曲線的有限域(群)
a, b: 橢圓曲線的參數,定義橢圓曲線函數
G: 循環子群中的基點,運算的基礎
n: 循環子群的階(另一個大素數,< P )
h:子群的相關因子,也即群的階除以子群的階的整數部分。

好了,是時候來看一下比特幣的橢圓曲線演算法是一個怎樣的橢圓曲線了。簡單地說,就是上述參數取以下值的橢圓曲線:

橢圓曲線定義了加法,其定義是兩個點相連,交與圖像的第三點的關於x軸的對稱點為兩個點的和。網上這部分內容已經有很多,這里不就其細節進行闡述。

但細心的同學可能有個疑問,離散對數問題的難題表現在求冪容易,但求其指數非常難,然而,橢圓曲線演算法中,沒有求冪,只有求乘積。這怎麼體現的是離散對數問題呢?

其實,這是一個定義問題,最初橢圓曲線演算法定義的時候把這種運算定義為求和,但是,你只要把這種運算定義為求積,整個體系也是沒有問題的。而且如果定義為求積,你會發現所有的操作形式上和離散對數問題一致,在有限域的選擇的原則上也是一致的。所以,本質上這還是一個離散對數問題。但又不完全是簡單的離散對數問題,實際上比一般的離散對數問題要難,因為這里不是簡單地求數的離散對數,而是在一個自定義的計算上求類似於離散對數的值。這也是為什麼橢圓曲線演算法採用比RSA所需要的(一般2048位)少得多的私鑰位數(256位)就非常安全了。

5. 比特幣源碼研讀一:橢圓曲線在比特幣密碼中的加密原理

參加比特幣源碼研讀班後首次寫作,看到前輩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] 域(數學)維基網路

區塊鏈研習社源碼研讀班 高若翔

6. 橢圓曲線加密演算法

橢圓曲線加密演算法,即:Elliptic Curve Cryptography,簡稱ECC,是基於橢圓曲線數學理論實現的一種非對稱加密演算法。相比RSA,ECC優勢是可以使用更短的密鑰,來實現與RSA相當或更高的安全。據研究,160位ECC加密安全性相當於1024位RSA加密,210位ECC加密安全性相當於2048位RSA加密。

橢圓曲線在密碼學中的使用,是1985年由Neal Koblitz和Victor Miller分別獨立提出的。

一般情況下,橢圓曲線可用下列方程式來表示,其中a,b,c,d為系數。

例如,當a=1,b=0,c=-2,d=4時,所得到的橢圓曲線為:

該橢圓曲線E的圖像如圖X-1所示,可以看出根本就不是橢圓形。

過曲線上的兩點A、B畫一條直線,找到直線與橢圓曲線的交點,交點關於x軸對稱位置的點,定義為A+B,即為加法。如下圖所示:A + B = C

上述方法無法解釋A + A,即兩點重合的情況。因此在這種情況下,將橢圓曲線在A點的切線,與橢圓曲線的交點,交點關於x軸對稱位置的點,定義為A + A,即2A,即為二倍運算。

將A關於x軸對稱位置的點定義為-A,即橢圓曲線的正負取反運算。如下圖所示:

如果將A與-A相加,過A與-A的直線平行於y軸,可以認為直線與橢圓曲線相交於無窮遠點。

綜上,定義了A+B、2A運算,因此給定橢圓曲線的某一點G,可以求出2G、3G(即G + 2G)、4G......。即:當給定G點時,已知x,求xG點並不困難。反之,已知xG點,求x則非常困難。此即為橢圓曲線加密演算法背後的數學原理。

橢圓曲線要形成一條光滑的曲線,要求x,y取值均為實數,即實數域上的橢圓曲線。但橢圓曲線加密演算法,並非使用實數域,而是使用有限域。按數論定義,有限域GF(p)指給定某個質數p,由0、1、2......p-1共p個元素組成的整數集合中定義的加減乘除運算。

假設橢圓曲線為y² = x³ + x + 1,其在有限域GF(23)上時,寫作:y² ≡ x³ + x + 1 (mod 23)

此時,橢圓曲線不再是一條光滑曲線,而是一些不連續的點,如下圖所示。以點(1,7)為例,7² ≡ 1³ + 1 + 1 ≡ 3 (mod 23)。如此還有如下點:

(0,1) (0,22)(1,7) (1,16)(3,10) (3,13)(4,0)(5,4) (5,19)(6,4) (6,19)(7,11) (7,12)(9,7) (9,16)(11,3) (11,20)等等。

另外,如果P(x,y)為橢圓曲線上的點,則-P即(x,-y)也為橢圓曲線上的點。如點P(0,1),-P=(0,-1)=(0,22)也為橢圓曲線上的點。

相關公式如下:有限域GF(p)上的橢圓曲線y² = x³ + ax + b,若P(Xp, Yp), Q(Xq, Yq),且P≠-Q,則R(Xr,Yr) = P+Q 由如下規則確定:

Xr = (λ² - Xp - Xq) mod pYr = (λ(Xp - Xr) - Yp) mod p其中λ = (Yq - Yp)/(Xq - Xp) mod p(若P≠Q), λ = (3Xp² + a)/2Yp mod p(若P=Q)

因此,有限域GF(23)上的橢圓曲線y² ≡ x³ + x + 1 (mod 23),假設以(0,1)為G點,計算2G、3G、4G...xG等等,方法如下:

計算2G:λ = (3x0² + 1)/2x1 mod 23 = (1/2) mod 23 = 12Xr = (12² - 0 - 0) mod 23 = 6Yr = (12(0 - 6) - 1) mod 23 = 19即2G為點(6,19)

計算3G:3G = G + 2G,即(0,1) + (6,19)λ = (19 - 1)/(6 - 0) mod 23 = 3Xr = (3² - 0 - 6) mod 23 = 3Yr = (3(0 - 3) - 1) mod 23 = 13即3G為點(3, 13)

建立基於橢圓曲線的加密機制,需要找到類似RSA質因子分解或其他求離散對數這樣的難題。而橢圓曲線上的已知G和xG求x,是非常困難的,此即為橢圓曲線上的的離散對數問題。此處x即為私鑰,xG即為公鑰。

橢圓曲線加密演算法原理如下:

設私鑰、公鑰分別為k、K,即K = kG,其中G為G點。

公鑰加密:選擇隨機數r,將消息M生成密文C,該密文是一個點對,即:C = {rG, M+rK},其中K為公鑰

私鑰解密:M + rK - k(rG) = M + r(kG) - k(rG) = M其中k、K分別為私鑰、公鑰。

橢圓曲線簽名演算法,即ECDSA。設私鑰、公鑰分別為k、K,即K = kG,其中G為G點。

私鑰簽名:1、選擇隨機數r,計算點rG(x, y)。2、根據隨機數r、消息M的哈希h、私鑰k,計算s = (h + kx)/r。3、將消息M、和簽名{rG, s}發給接收方。

公鑰驗證簽名:1、接收方收到消息M、以及簽名{rG=(x,y), s}。2、根據消息求哈希h。3、使用發送方公鑰K計算:hG/s + xK/s,並與rG比較,如相等即驗簽成功。

原理如下:hG/s + xK/s = hG/s + x(kG)/s = (h+xk)G/s= r(h+xk)G / (h+kx) = rG

假設要簽名的消息是一個字元串:「Hello World!」。DSA簽名的第一個步驟是對待簽名的消息生成一個消息摘要。不同的簽名演算法使用不同的消息摘要演算法。而ECDSA256使用SHA256生成256比特的摘要。
摘要生成結束後,應用簽名演算法對摘要進行簽名:
產生一個隨機數k
利用隨機數k,計算出兩個大數r和s。將r和s拼在一起就構成了對消息摘要的簽名。
這里需要注意的是,因為隨機數k的存在,對於同一條消息,使用同一個演算法,產生的簽名是不一樣的。從函數的角度來理解,簽名函數對同樣的輸入會產生不同的輸出。因為函數內部會將隨機值混入簽名的過程。

關於驗證過程,這里不討論它的演算法細節。從宏觀上看,消息的接收方從簽名中分離出r和s,然後利用公開的密鑰信息和s計算出r。如果計算出的r和接收到的r值相同,則表示驗證成功。否則,表示驗證失敗。

7. 橢圓曲線(ecc)加密,簽名(ecdsa)問題。

用asp實現橢圓曲線加密,簽名。
一個你可以下載一個加密軟體,可心在www,.com中搜索加密軟體,加密軟體很多,你要橢圓曲線加密,簽名,你先建立一個文件夾,然後將橢圓保存,對文件夾加密就行了!

8. ECC橢圓曲線密碼應用

1背景簡介
隨著通訊網路特別是Internet的高速發展,利用網路作為信息交流和信息處理變得越來越普遍,社會的傳統事務和業務運作模式受到前所未有的沖擊。目前,無論是國家政府還是企業都正融入這場網路革命中,從其原來的傳統經營模式向網路模式演化。未來的電子政務、電子商務、電子業務將成為不可逆轉的發展趨勢。在與日俱增的網路活動中,人們越來越關心信息安全這個問題。這集中體現在:

(1)網路的身份認證——確認網路客戶的真實身份
(2)信息和數據的保密性——個人或系統機密信息和數據保護
(3)信息和數據完整性——防止不合法的數據修改
(4)不可抵賴性——網路環境下行為的事後的不可抵賴(數字簽名)
信息安全中最核心的技術是密碼技術,基本上可分為序列密碼、對稱密碼(又稱分組密碼)、非對稱密碼(又稱公鑰密碼)三種。

非對稱密碼演算法是支撐解決以上所涉的四個關鍵方面的問題的核心。目前越來越流行的是基於PKI體系模型的解決方案。在PKI體系模型中,客戶端需要一較好的個人信息安全載體,智能卡或智能密碼鑰匙將是一較理想的方式,都必須支持公鑰演算法,而ECC是最適合使用在這一資源受限制的客戶端產品中。

2 橢圓曲線密碼演算法ECC

自公鑰密碼問世以來,學者們提出了許多種公鑰加密方法,它們的安全性都是基於復雜的數學難題。根據所基於的數學難題來分類,有以下三類系統目前被認為是安全和有效的:

(1)大整數因子分解系統(代表性的有RSA),

(2)有限域(數學中的一種代數結構)離散對數系統(代表性的有DSA),

(3)有限域橢園曲線離散對數系統(ECC)。

當前最著名、應用最廣泛的公鑰系統RSA是由Rivet、Shamir、Adelman提出 的(簡稱為RSA系統),它的安全性是基於大整數素因子分解的困難性,而大整數因子分解問題是數學上的著名難題,至今沒有有效的方法予以解決,因此可以確保RSA演算法的安全性。RSA系統是公鑰系統的最具有典型意義的方法,大多數使用公鑰密碼進行加密和數字簽名的產品和標准使用的都是RSA演算法。RSA方法的優點主要在於原理簡單,易於使用。但是,隨著分解大整數方法的進步及完善、計算機速度的提高以及計算機網路的發展(可以使用成千上萬台機器同時進行大整數分解),作為RSA加解密安全保障的大整數要求越來越大。為了保證RSA使用的安全性,其密鑰的位數一直在增加,比如,目前一般認為RSA需要1024位以上的字長才有安全保障。

但是,密鑰長度的增加導致了其加解密的速度大為降低,硬體實現也變得越來越難以忍受,這對使用RSA的應用帶來了很重的負擔,對進行大量安全交易的電子商務更是如此,從而使得其應用范圍越來越受到制約。DSA(Data Signature Algorithm)是基於有限域離散對數問題的數字簽名標准,它僅提供數字簽名,不提供數據加密功能。安全性更高、演算法實現性能更好的公鑰系統橢圓曲線加密演算法ECC(Elliptic Curve Cryptography)基於有限域上橢圓曲線的離散對數計算困難性。人類研究橢圓曲線已有百年以上的歷史,但真正把其應用到密碼學中是1985年由Koblitz(美國華盛頓大學)和Miller(IBM公司) 兩人提出。定義在有限域(Fp 或F(2m))的橢圓曲線(y2=x3+ax+b)上的點(x,y),再加上無窮點O,如按一定的規則運算(估且稱為乘法)將組成一個群(數學中的一種代數結構)。有限域上橢圓曲線乘法群也有相對應的離散對數計算困難性問題。因此,許多公開密碼系統都是基於此問題發展出來的,如類似ELGamal,DSA等密碼系統的ECES,ECDSA。

3 橢圓曲線加密演算法ECC的優點

橢圓曲線加密演算法ECC與RSA方法相比有著很多技術優點:

●安全性能更高

加密演算法的安全性能一般通過該演算法的抗攻擊強度來反映。ECC和其他幾種公鑰系統相比,其抗攻擊性具有絕對的優勢。橢圓曲線的離散對數計算困難性(ECDLP)在計算復雜度上目前是完全指數級,而RSA 亞指數級的。這體現ECC比RSA的每bit安全性能更高。

●計算量小和處理速度快

在一定的相同的計算資源條件下,雖然在RSA中可以通過選取較小的公鑰(可以小到3)的方法提高公鑰處理速度,即提高加密和簽名驗證的速度,使其在加密和簽名驗證速度上與ECC有可比性,但在私鑰的處理速度上(解密和簽名),ECC遠比RSA、DSA快得多。因此ECC總的速度比RSA、DSA要快得多。同時ECC系統的密鑰生成速度比RSA快百倍以上。因此在相同條件下,ECC則有更高的加密性能。

●存儲空間佔用小

ECC的密鑰尺寸和系統參數與RSA、DSA相比要小得多。160位 ECC與1024位 RSA、DSA有相同的安全強度。而210位 ECC則與2048bit RSA、DSA具有相同的安全強度。意味著它所佔的存貯空間要小得多。這對於加密演算法在資源受限環境上(如智能卡等)的應用具有特別重要的意義。

●帶寬要求低

當對長消息進行加解密時,三類密碼系統有相同的帶寬要求,但應用於短消息時ECC帶寬要求卻低得多。而公鑰加密系統多用於短消息,例如用於數字簽名和用於對對稱系統的會話密鑰傳遞。帶寬要求低使ECC在無線網路領域具有廣泛的應用前景。

4橢圓曲線加密演算法ECC的相關標准

ECC的這些特點使它在某些領域(如PDA、手機、智能卡)的應用將取代RSA,並成為通用的公鑰加密演算法。許多國際標准化組織(政府、工業界、金融界、商業界等)已將各種橢圓曲線密碼體製作為其標准化文件向全球頒布。ECC標准大體可以分為兩種形式:一類是技術標准,即描述以技術支撐為主的ECC體制,主要有IEEEP1363、ANSI X9.62、ANSI X9.63、SEC1、SEC2、FIP 186-2、ISO/IEC 14888-3。規范了ECC的各種參數的選擇,並給出了各級安全強度下的一組ECC參數。另一類是應用標准,即在具體的應用環境中建議使用ECC技術,主要有ISO/IEC 15946、IETF PKIX、IETF TLS、WAP WTLS等。在標准化的同時,一些基於標准(或草案)的各種橢圓曲線加密、簽名、密鑰交換的軟、硬體也相繼問世。美國RSA數據安全公司在1997年公布了包含ECC的密碼引擎工具包BSAFE 4.0; 以加拿大Certicom為首的安全公司和工業界聯合也研製、生產了以橢圓曲線密碼演算法為核心的密碼產品,還提出了各種安全條件下對橢圓曲線離散對數攻擊的懸賞挑戰。可以相信,ECC技術在信息安全領域中的應用會越來越廣。

9. 理解橢圓曲線加密演算法

橢圓曲線加密演算法,即:Elliptic Curve Cryptography,簡稱ECC,是基於橢圓曲線數學理論實現的一種非對稱加密演算法。相比RSA,ECC優勢是可以使用更短的密鑰,來實現與RSA相當或更高的安全。據研究,160位ECC加密安全性相當於1024位RSA加密,210位ECC加密安全性相當於2048位RSA加密。

一般橢圓曲線方程式表示為:(其中a,b,c,d為系數)
> y2=ax3+ bx2+cx+d
典型的橢圓曲線如:y2=x3−4x2+16

先擺一個栗子:

小米很難算到的那個數,就是公鑰密碼演算法中的私鑰(一個公鑰密碼演算法安全的必要條件(非充分)是「由公鑰不能反推出私鑰」),公鑰密碼演算法最根本的原理是利用信息的不對稱性:即掌握私鑰的人在整個通信過程中掌握最多的信息。
橢圓曲線加密演算法是一個基於加法階數難求問題的密碼方案。 對於橢圓曲線來講,橢圓曲線的基點就是例子裡面的5,而私鑰就是基點的加法階數(例子裡面的11),公鑰是基點(5)進行對應階數的加法(11次)得到的結果(55)。

簡單描述就是:G * k = K (G,K公開,k保密)

上述例子相對簡單,橢圓曲線加密演算法里的加法建立在 「有限域上的二元三次曲線上的點」上 ,組成一個「有限加法循環群」。具體的說,這個加法的幾何定義如下圖,兩個點的加法結果是指這兩點的連線和曲線的交點關於x軸的鏡像。

如果我們從某一點出發(所謂的單位元,比如正整數域的1,代表一個空間里的最基本單元),不停做自增操作(所謂群操作,比如++),枚舉出整個空間的集合元素。如圖:

因此給定橢圓曲線的某一點G,從G出發,不停做切線,找對稱點,依次得到-2G,2G,-4G,4G,-8G,8G... 。即:當給定G點時,已知x,求xG點並不困難。反之,已知xG點,求x則非常困難。即Q = NG,N就是我們的私鑰,Q就是我們的公鑰。

現在我們知道了公鑰(Q)和私鑰(N)的生成的原理,我們在看看橢圓曲線數字簽名演算法(ECDSA)的過程,橢圓曲線數字簽名演算法(ECDSA)是使用橢圓曲線密碼(ECC)對數字簽名演算法(DSA)的模擬。ECDSA於1999年成為ANSI標准,並於2000年成為IEEE和NIST標准。

私鑰主要用於 簽名,解密 ;公鑰主要用於 驗簽,加密 ,可以通過私鑰可以計算出公鑰,反之則不行。
公鑰加密:公鑰加密的內容可以用私鑰來解密——只有私鑰持有者才能解密。
私鑰簽名:私鑰簽名的內容可以用公鑰驗證。公鑰能驗證的簽名均可視為私鑰持有人所簽署。

通常需要六個參數來描敘一個特定的橢圓曲線:T = (p, a, b, G, n, h).
p: 代表有限域Fp的那個質數 a,b:橢圓方程的參數 G: 橢圓曲線上的一個基點G = (xG, yG) n:G在Fp中規定的序號,一個質數。 h:余因數(cofactor),控制選取點的密度。h = #E(Fp) / n。

這里以secp256k1曲線(比特幣簽名所使用的曲線)為例介紹一下公私鑰對的產生的過成。
secp256k1的參數為:

本質上ECDSA的私鑰就是一個隨機數滿足在曲線G的n階里及k∈(0,n),根據Q=kG可以計算出公鑰,生成的私鑰一般為32位元組大小,公鑰通常為64個位元組大小。如:

ECDSA簽名演算法的輸入是數據的哈希值,而不是數據的本身,我們假設用戶的密鑰對:(d, Q);(d為私鑰,Q為公鑰) 待簽名的信息:M; e = Hash(M);簽名:Signature(e) = ( r, s)。

簽名介面:

驗證介面:

一個例子:

閱讀全文

與橢圓曲線加密的安全性相關的資料

熱點內容
現在安卓是用什麼開發語言 瀏覽:655
雲伺服器性能怎麼看 瀏覽:739
圖解政治pdf 瀏覽:162
自製可編程計算機 瀏覽:132
每個文件夾放入一張圖片 瀏覽:453
cgzip壓縮文件夾 瀏覽:591
如何找下載的app 瀏覽:470
程序員之死最新進展 瀏覽:261
台電u盤可以下載加密嗎 瀏覽:697
java培訓機構上海 瀏覽:616
長城伺服器怎麼裝機 瀏覽:355
pm和hm哪個軟體編程好 瀏覽:205
咋樣把文件夾強力去除 瀏覽:989
jvmgc演算法 瀏覽:599
我的世界怎樣控制命令方塊發文字 瀏覽:864
期貨翻番計演算法 瀏覽:496
華為底部app如何增加 瀏覽:116
為什麼用了幾個星期的安卓充電器就壞了 瀏覽:359
伺服器風扇響怎麼回事 瀏覽:17
django打包編譯 瀏覽:197