非對稱加解密需要兩個祕鑰:公開祕鑰(publickey)和私有密鑰(privatekey)。公開祕鑰與私有密鑰是一對,如果用公開密鑰對數據進行加密,只有用對應的私有密鑰才能解密;如果用私有密鑰對數據進行加密,那麼只有用對應的公開密鑰才能解密。因爲加密和解密使用的是兩個不同的祕鑰,所以這種算法叫作非對稱加解密算法。
實現方案:
加密原理:
1,先產生一組隨機數,32字節
2,根據產生的隨機數計算出一個橢圓曲線點(採用國際標準給出的基點),由32字節變成64字節 A
3,根據產生的隨機數計算出一個橢圓曲線點(採用公開密鑰作爲基點),由32字節變成64字節,取橢圓曲線點X座標前16字節作爲加
密祕鑰祕鑰
4,對明文進行對稱加密,加密祕鑰爲第3步產生的共享祕鑰,得出密文 B
5,對密文進行一次消息認證碼,基於AES-128的消息認證碼算法,其中的祕鑰取橢圓曲線點X座標後16字節作爲祕鑰,產生認證碼 C
6,計算非對稱加密後的密文爲 A + B + C
解密原理:
1,根據密文截取前面的64字節橢圓曲線點與中間部分的對稱加密密文與最後的16字節消息認證碼
2,根據私有密鑰計算出一個橢圓曲線點(採用第一步64字節橢圓曲線點作爲基點),由32字節變成64字節,取橢圓曲線點X座標前16
字節作爲解密祕鑰
3,根據對稱加密密文進行一次消息認證碼,其中校驗祕鑰爲取橢圓曲線點X座標後16字節作爲祕鑰,消息爲對稱加密密文,產生認
證碼
4,校驗消息認證碼是否準確,對已經獲取的16字節消息認證碼與產生的進行比較,如果不相等,校驗失敗,意味着解密失敗。
5,對加密密文進行對稱解密,祕鑰爲取橢圓曲線點X座標前16字節作爲祕鑰,然後解密成功。
小結:橢圓曲線點滿足交換律哦。a*(b*G) = b*(a*G),根據這個原理可以共享出一個祕鑰來。