在上面對(duì)AES加密的初步認(rèn)知中,我們知道AES加密需要一個(gè)key,加減密雙方都需要知道,那這個(gè)key怎么設(shè)定好?看一下下面的一種場景:
在社交的APP中,一般對(duì)聊天內(nèi)容都會(huì)是加密的,A和B聊天,A和C聊天。如果這個(gè)Key都是固定的,那么是不是意味著:如果B通過蠻力等方法破解某段聊天信息,拿到了和A之間的AES_Key,再抓包劫持了A和C的傳輸內(nèi)容,就可以輕易的破解A和C之間的內(nèi)容,顯然這種做法是不安全的。
所以安全的模式是A和B,A和C,B和C, 他們聊天內(nèi)容加密的key都是不同的(再安全點(diǎn)加密方式也可以有區(qū)別)。那樣即使A和B的加密被破解了,A和C,B和C等其他的聊天記錄都不會(huì)被輕易破解。
那怎么傳送這個(gè)key,肯定不是明文傳送,那用哪一種加密方式更好點(diǎn),一般都是非對(duì)稱加密,如RSA、ECC等。
非對(duì)稱加密:加減密的密鑰不同,分私鑰和公鑰。
主流的非對(duì)稱加密方式如:RSA和ECC
這邊為什么選用ECC,客觀因素有很多:
安全性高
有研究表示160位的橢圓密鑰與1024位的RSA密鑰安全性相同,256位相當(dāng)于3072位。
加密效率比較
1)計(jì)算負(fù)荷:在私鑰的加密解密速度上,速度更快。
2)密鑰大小:存儲(chǔ)空間占用小。
3)帶寬:帶寬要求低.
AES的Key經(jīng)過接收方公鑰加密和AES加密的內(nèi)容 一起發(fā)送
給接收方,接收方通過自己私鑰先將加密后的AES_KEY解密,再通過解密得到的原始AES_KEY,并用該key解密發(fā)送方發(fā)送的內(nèi)容,得到明文。
如下圖所示:

上面這種加密方式性能上絕對(duì)是杠杠的,雖然自己沒有用具體的數(shù)據(jù)測(cè)試過,但也找過很多資料看了,加密算法速度高于
擴(kuò)展:AES和ECC的混合加密還有一種特殊的場景,先來看一下ECC 數(shù)學(xué)函數(shù) Q=dG; (Q是公鑰 d是私鑰 G是他們之間的關(guān)系);Q1 = d1G1; Q2=d2G2;那么能推出 key=Q1d2G2 = Q2d1G1;
有沒有亮點(diǎn) 1的公鑰和2的私鑰 2的公鑰和1的私鑰 他們能得到一個(gè)相同的值 key。那么我們能不能把這個(gè)相同的key 作為他們之間AES加減密的key呢?
那我們是不是可以在這個(gè)發(fā)送過程少傳一個(gè)AES密鑰key‘的參數(shù),那在傳輸?shù)倪^程透露的信息是不是有可以少,安全性是不是會(huì)高一點(diǎn)呢?
32位的ECC加密 和32位AES解密,經(jīng)實(shí)踐可以使用上述方法。