ECDH
第一次聽說ECDH 是不是就像上面的圖一樣, 一臉的問好, 不要緊谷歌是萬能的.
剛開始做的時候老大給我說你去了解一下ECDHE...心想這是個啥鬼, 難頂啊!
搜索了一些資料才知道,其實(shí)https使用的證書就是用的ECDHE來交換秘鑰, 最后完成的認(rèn)證的過程. 漲勢了....
也有朋友說, 直接在git上找找資源.肯定是有的,盡管最后也是在GitHub上找的資源,不過過程艱辛.
其實(shí)對于之前沒有用過的東西, 我是有很大的熱情去研究,學(xué)習(xí),也向之前的老師請教了一下這個東西.
其實(shí)最想吐槽的是: 做的時候啥都沒有, 就5個英文字符"ECDHE", 生成出來的樣式是什么樣的, 計(jì)算出來的結(jié)果是什么樣的, 都沒有.... 心累啊!!!!!!
直接在網(wǎng)上找資料學(xué)習(xí)吧! 身邊用這個東西的人, 是真的少.
- 看資料才知道原來ECDH, ECDHE, 其實(shí)差不多的,
TLS/SSL 協(xié)議詳解 (30) SSL中的RSA、DHE援奢、ECDHE慌申、ECDH流程與區(qū)別
于是就搜索Openssl里面的 使用ECDH的文檔.
這里我分享一下對我有用的文檔
https://blog.csdn.net/scuyxi/article/details/59182134
https://blog.csdn.net/bravegogo/article/details/63684286?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-11.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-11.nonecase
學(xué)習(xí)ECC及Openssl下ECC生成密鑰的部分源代碼心得
看了這個心得以后, 才了解ECDHE一些結(jié)構(gòu)體的構(gòu)造, 還有一些主要的函數(shù), 簽名 驗(yàn)簽,計(jì)算秘鑰, 而我想要的就是計(jì)算秘鑰
步入正題:
集成openssl, 就不說了..自己集成.
之前做iOS生成CSR的時候有一個工程. 就直接在main里面把demo"https://blog.csdn.net/scuyxi/article/details/59182134
"相關(guān)的代碼復(fù)制過去run了下.還有相關(guān)頭文件, 沒想到直接run成功了...
好.仔細(xì)看每一步的代碼步驟也很詳細(xì)...
創(chuàng)建的EC_key的過程就很簡單了,問題是計(jì)算的這一步, 是拿自己的私鑰和對方的公鑰,計(jì)算出來的共享秘鑰.
/* 獲取對方公鑰添瓷,不能直接引用 */
pubkey2 = EC_KEY_get0_public_key(key2);
/* 生成一方的共享密鑰 */
len1= ECDH_compute_key(shareKey1, 128, pubkey2, key1, NULL);
看到上面的代碼關(guān)鍵步.當(dāng)時有點(diǎn)不知所措,獲取對方公鑰丧诺,不能直接引用
pubkey2 = EC_KEY_get0_public_key(key2); 這個公鑰是對方傳給你的...我們的這邊給的公鑰是x:0x1c4ad6faf196e616c28832a540c78af8e0c3e4c6e27fcd82d479ae6497050db6
y:0x45c7debe0efc508e4f0d8a2fef5496c1174a4aa149e10cd5b2f02a5e7eb4faa6
懵了, 給我形容說是點(diǎn)的形式(x,y). 按照上面的咋辦, 咋轉(zhuǎn)化... 無奈了谷歌吧. 百度吧...
在git找到的ECDHUtils-Demo
之前做iOS生成CSR 的時候, 生成的格式是:
----BEGIN PUBLIC KEY-----
MFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAEDKAxb1Y5rn8OljHPqtMHr9aS1AE2qEu8
YtiWtceyJYZVpCjyTaqcKfJ/XiPLERjidr5rnJxowInZyhhaUcxuNw==
-----END PUBLIC KEY-----
-----BEGIN EC PRIVATE KEY-----
MHQCAQEEID8ZMgMJ/MVvHgPVm+FgGuqWdVb8uKd8IVEBPs9mR3C+oAcGBSuBBAAK
oUQDQgAEDKAxb1Y5rn8OljHPqtMHr9aS1AE2qEu8YtiWtceyJYZVpCjyTaqcKfJ/
XiPLERjidr5rnJxowInZyhhaUcxuNw==
-----END EC PRIVATE KEY-----
我想應(yīng)該是經(jīng)過base64編碼后的結(jié)果
[在線解析] (http://tool.chinaz.com/Tools/Base64.aspx) 沒有你想象的那么順利,最后啥也解析不出來.也或許是我用的方法不對.
繼續(xù)在git上找資料吧, "自己寫,不可能的, 這輩子都不可能的"
1.2.3.4.5.6.7.8.9.0
隔了好些天,心里的傷逐漸好轉(zhuǎn), 又是美好的一周
只能說運(yùn)氣好了, 在git上又找到一個Demo,這次很哇塞. 有種久旱逢甘霖的感覺
GMObjC-Demo國密SM2,SM4加解密,SM3摘要算法,SM2簽名驗(yàn)票偎箫,ECDH密鑰協(xié)商的OC封裝,基于OpenSSL
里面的加密算法,全是在Openssl的基礎(chǔ)上封裝出來的, 大神就是大神
路過的幫忙去點(diǎn)個贊吧!
下載下來以后, 直接看到ECDHE交互秘鑰, 而且也有我想要的格式(X,Y), 完美.
更換了一個加密曲線算法., 把文檔里面的數(shù)據(jù)代入進(jìn)去, 直接對應(yīng)結(jié)果. 真是爽
注意點(diǎn):
生成的公鑰需要在前面加一個04
跟作者交流了一下的過程
具體啥原因, 我覺得沒有必要去研究的那么透,
最后把GMObjC-Demo遷移到項(xiàng)目中. 進(jìn)行下一步的操作,至此大功告成
收獲: 知道了ECDHE的原理和Openssl的強(qiáng)大, 還有大神的存在.