ECC (橢圓曲線算法)
使用的為iOS 平臺(tái)下使用 OpenSSL('OpenSSL-Universal', '1.0.1.17') 來(lái)實(shí)現(xiàn)的
加密
私鑰簽名服球,公鑰驗(yàn)簽
簽名方法在 openssl庫(kù) ecdsa.h
簽名
ECDSA_SIG * ECDSA_do_sign(const unsigned char *dgst, int dgst_len,
EC_KEY *eckey);
驗(yàn)簽
int ECDSA_do_verify(const unsigned char *dgst, int dgst_len,
const ECDSA_SIG *sig, EC_KEY *eckey);
公鑰加密带兜,私鑰解密???
沒(méi)有看到有這一塊的實(shí)現(xiàn)谅摄,
只看生成一個(gè)秘鑰,用其私鑰和自己的公鑰生成一個(gè)新的秘鑰多律,用其做AES
ecdh.h(橢圓曲線密鑰交換算法)
生成新的秘鑰
EC_KEY newKey = EC_KEY_new_by_curve_name(EC_GROUP_get_curve_name(EC_KEY_get0_group(myEcKey)));
EC_KEY_generate_key(newKey);
和myEcKey的publickey做 ecdh.h 的 compute
ECDH_compute_key( , , EC_KEY_get0_public_key(myEcKey), newKey , KEY_HASH_FUNCTION);
保存 newKey 的publicKey痴突,其私鑰丟掉
Save( EC_KEY_get0_public_key(newKey));
獲得密鑰的時(shí)候調(diào)用:
EC_POINT epnt = EC_POINT_new(EC_KEY_get0_group(myEcKey));
EC_POINT_oct2point(egrp, epnt, @LoadSaveKey ));
ECDH_compute_key(,,epnt, myEcKey, KEY_HASH_FUNCTION);
每次使用的時(shí)候,都生成一個(gè)新的秘鑰對(duì)狼荞,私鑰使用一次后丟掉苞也,公鑰傳輸給Other,
Other 通過(guò)自己的私鑰和傳輸過(guò)來(lái)的公鑰可以計(jì)算出 AES 的秘鑰