国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

算法2_非對稱加密算法之ECDSA(橢圓曲線數(shù)字簽名算法)

這篇具有很好參考價值的文章主要介紹了算法2_非對稱加密算法之ECDSA(橢圓曲線數(shù)字簽名算法)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

ECDSA(橢圓曲線數(shù)字簽名算法)

AES(高級加密標(biāo)準(zhǔn)): =>對稱加密

? 對業(yè)務(wù)數(shù)據(jù)進(jìn)行加密,防止他人可以看見

ECDSA(橢圓曲線數(shù)字簽名算法):=>非對稱加密算法(公鑰和私鑰)

? 驗證數(shù)據(jù)的真實性,防止業(yè)務(wù)數(shù)據(jù)被篡改

SHA(安全哈希算法)=>哈希算法

1. 作用:

ecdsa,# 密碼學(xué)基礎(chǔ),區(qū)塊鏈

因為ECDSA橢圓曲線數(shù)字簽名算法獲得公鑰和私鑰對是一一對應(yīng)的,不存在"不同私鑰但是公鑰相同的情況"所有偽造ECDSA簽名是根本不可能的

2. 解釋ECDSA

ECDSA當(dāng)中有兩個詞要注意:Curve(曲線)和Algorithm(算法)=>意味著ECDSA基本上是基于數(shù)學(xué)的

1. 基本原理:

假設(shè)給定一條曲線Curve、一串隨機(jī)數(shù)Rand Num以及隨機(jī)在曲線上取原點(Origin Point)

Private_Key=Rand_Num

Public_Key=Magic_Math(Curve,Rand_Num,Origin_Point)

=> 接下來就是要好好理解這個魔法數(shù)學(xué)Magic_Math =>(看完以下的就知道這個Magic_Math其實就是一個在已知橢圓曲線和參考點G的前提下對G進(jìn)行以下運(yùn)算)
P u b l i c _ K e y = R a n d _ N u m × O r i g i n _ P o i n t G ( 點 的 乘 法 ) Public\_Key=Rand\_Num \times Origin\_PointG (點的乘法) Public_Key=Rand_Num×Origin_PointG()

3. 解釋Magic_Math:

1. 前提

ECDSA只使用整數(shù)數(shù)學(xué),沒有浮點數(shù)

=>整數(shù)范圍由簽名當(dāng)中所采用的位數(shù)決定的,更多的位數(shù)意味著更大的數(shù)字范圍,更高的安全性能

? why? 因為整數(shù)范圍越大,則表示的位數(shù)越大那么破解ECDSA所需要猜測的數(shù)字范圍也越大,那么破解所花費(fèi)的時間越長,那么安全性就越高

=>mod 模運(yùn)算:就是整數(shù)求除之后的余數(shù)

2. 橢圓曲線密碼學(xué)

基于以下方程:
y 2 = ( x 3 + a ? x + b ) m o d p y^2=(x^3+a*x+b) mod p y2=(x3+a?x+b)modp

以上方程可以得知:
該方程所對應(yīng)的曲線:對于任意的x坐標(biāo)(只能取整數(shù)),你可以得到兩個y的值,且曲線關(guān)于x軸對稱。

p是一個素數(shù),且確保所有得到的值在規(guī)定SHA的輸出長度所能夠表示的范圍之內(nèi).

綜上所述:經(jīng)過取模運(yùn)算之后結(jié)果只能在0-p-1之間,

總結(jié):
ecdsa,# 密碼學(xué)基礎(chǔ),區(qū)塊鏈

3. 橢圓曲線點加法的表示方法:
ecdsa,# 密碼學(xué)基礎(chǔ),區(qū)塊鏈

? 注釋:這是a=-4,b=0以后的橢圓曲線,P+Q點與R點對稱
P = ( x 1 , y 1 ) P + Q = ( X 2 , y 2 ) = > X 1 = X 2 且 Y 1 = ? Y 2 P=(x1,y1) \quad P+Q=(X2,y2)=>X1=X2且Y1=-Y2 P=(x1,y1)P+Q=(X2,y2)=>X1=X2Y1=?Y2
? 所以對于橢圓曲線的點加法的定義是:在橢圓曲線上取兩點P和Q進(jìn)行加法運(yùn)算結(jié)果為P+Q 等價于 P和Q的連接的延長線交于橢圓曲線R點,R點的對稱點即P+Q

4. 橢圓曲線點乘法的表示方法:
k ? P 可 以 定 義 為 P 對 自 身 進(jìn) 行 k 次 相 加 獲 得 點 k*P可以定義為P對自身進(jìn)行k次相加獲得點 k?PP進(jìn)k

5.橢圓曲線點乘法的單向陷門性ecdsa,# 密碼學(xué)基礎(chǔ),區(qū)塊鏈
> 單向陷門函數(shù)的意思是:知道起點和終點不能求得乘數(shù)k,換句話說不知道怎么從起點開始做變換到達(dá)R點 正是這種單向陷門的性質(zhì)是ECDSA的安全性的基礎(chǔ)所在

4.ECDSA算法:

? 首先你需要知道你的橢圓曲線參數(shù)的含義
橢 圓 曲 線 的 數(shù) 學(xué) 表 示 : y 2 = ( x 3 + a × x + b ) ? m o d ? p 橢圓曲線的數(shù)學(xué)表示:y^2=(x^3+a\times x+b)\,mod \,p 數(shù)學(xué):y2=(x3+a×x+b)modp

其 中 a ? b ? p 是 橢 圓 曲 線 中 的 參 數(shù) , N 是 曲 線 面 上 符 合 該 橢 圓 曲 線 數(shù) 學(xué) 表 示 的 點 個 數(shù) , G 是 曲 線 上 的 任 意 一 點 作 為 起 點 其中a \ b \ p是橢圓曲線中的參數(shù),N是曲線面上符合該橢圓曲線數(shù)學(xué)表示的點個數(shù),G是曲線上的任意一點作為起點 a?b?p數(shù),N數(shù)學(xué)數(shù),G

橢圓曲線的參數(shù)是由**NIST(National Institute of Standards and Technology)SECG(Standards for Efficient Cryptography Group)** 這兩個機(jī)構(gòu)提供的已知高效和安全的標(biāo)準(zhǔn)化參數(shù)即提供了 a,b,p,G這四個參數(shù)

總結(jié):綜上所述
私 鑰 d A 是 一 串 隨 機(jī) 數(shù) 公 鑰 Q a 是 私 鑰 d A × G 獲 得 橢 圓 曲 線 終 點 即 Q a = d A × G 私鑰dA是一串隨機(jī)數(shù) \quad 公鑰Qa是私鑰dA\times G獲得橢圓曲線終點 即\quad Qa=dA\times G dA機(jī)數(shù)QadA×GQa=dA×G

	Go標(biāo)準(zhǔn)庫 crypto/ecdsa
	//私鑰(或者說公私鑰對)
	type PrivateKey struct {
		PublicKey  //所對應(yīng)的公鑰
		D *big.Int //私鑰即隨機(jī)數(shù)
	}
	//公鑰
	type PublicKey struct {
		//生成該公鑰的橢圓曲線
		elliptic.Curve
		X, Y *big.Int //公鑰的(X,Y)
	}
	// GenerateKey generates a public and private key pair.
func GenerateKey(c elliptic.Curve, rand io.Reader) (*PrivateKey, error) {
	//k通過randFieldElement方法生成隨機(jī)數(shù)作為私鑰
	k, err := randFieldElement(c, rand)
	if err != nil {
		return nil, err
	}
	
	priv := new(PrivateKey)
	//設(shè)置該公私鑰對是基于的橢圓曲線
	priv.PublicKey.Curve = c
	//私鑰
	priv.D = k
	//設(shè)置公鑰
	priv.PublicKey.X, priv.PublicKey.Y = c.ScalarBaseMult(k.Bytes())
	return priv, nil
}

綜上所述:
私鑰是數(shù),公鑰是點坐標(biāo),PrivateKey既可以認(rèn)為是私鑰也可以認(rèn)為是公私鑰對

5.ECDSA算法進(jìn)行數(shù)字簽名過程:

? 假設(shè)下面的哈希算法采用的是SHA1那么輸出的長度為20字節(jié),那么簽名(R,S)中每個分量都是20字節(jié)

  1. 問題:如何對一個文件或一個消息進(jìn)行簽名呢?

    過程:已知橢圓曲線參考點G、私鑰dA以及產(chǎn)生一個隨機(jī)數(shù)K

    1. P = k × G ( × 是 橢 圓 曲 線 上 的 點 乘 ) 1. P=k \times G (\times 是橢圓曲線上的點乘) 1.P=k×G(×)

    2. P 點 的 x 坐 標(biāo) 作 為 R ( 20 字 節(jié) ) 2. P點的x坐標(biāo)作為R(20字節(jié)) 2.Px標(biāo)R(20節(jié))

    3. 對 消 息 M s g : z = S H A 1 ( M s g ) ( z 為 20 字 節(jié) ) 3.對消息Msg:z=SHA1(Msg) (z為20字節(jié)) 3.Msg:z=SHA1(Msg)(z20節(jié))

    4. S = k ? 1 ( z + d A × R ) ? m o d ? p ( k ? 1 是 k 的 模 的 乘 法 逆 元 ) 4. S=k^{-1}(z+dA\times R)\ mod \ p \quad (k^{-1}是k的模的乘法逆元) 4.S=k?1(z+dA×R)?mod?p(k?1k)

    最 終 的 輸 出 的 是 兩 元 數(shù) 組 ( R , S ) 最終的輸出的是兩元數(shù)組(R,S) 數(shù)(R,S)

  2. 問題:如何驗證簽名的合法性?

    過程:已知(R,S),公鑰Qa,參考點G以及消息msg
    z = S H A ( m s g ) z=SHA(msg) z=SHA(msg)

    P = S ? 1 × z × G + S ? 1 × R × Q a ( 第 1 , 2 個 是 橢 圓 曲 線 上 的 點 乘 算 法 ) P=S^{-1}\times z \times G+S^{-1} \times R \times Qa (第1,2個是橢圓曲線上的點乘算法) P=S?1×z×G+S?1×R×Qa(1,2)

    然后判斷P的x坐標(biāo)是否于R相等,如果相等則這個簽名有效,否則是無效的

    有效的含義即這個Msg認(rèn)為是真實且可信的

總結(jié)

  1. 私鑰是一個隨機(jī)數(shù),公鑰是一個點.
  2. 利用橢圓曲線上點乘是一個單向陷門函數(shù)特有的性質(zhì),作為ECDSA的安全性保證,使得生成公鑰.
  3. 參數(shù)a,b,p,G可以由NIST和SECG提供.
  4. 了解數(shù)字簽名和驗證簽名的過程,可以明白真正隨機(jī)數(shù)的重要性.

參考文獻(xiàn)

知乎之?dāng)?shù)海拾荒

孫榮燕,蔡昌曙,周洲,趙燕杰,楊金銘.國密SM2數(shù)字簽名算法與ECDSA算法對比分析研究[J].網(wǎng)絡(luò)安全技術(shù)與應(yīng)用,2013(02):60-62.文章來源地址http://www.zghlxwxcb.cn/news/detail-782981.html

到了這里,關(guān)于算法2_非對稱加密算法之ECDSA(橢圓曲線數(shù)字簽名算法)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包