20.1 ECC介紹
橢圓曲線(ECC)算法一種公鑰算法,他比流行的RSA算法很多優點:
a.安全性能更高,如果160位ECC與1024位RSA、DSA有相同的安全強度
b.計算量小,處理速度快,在私鑰的處理速度上(解密和簽名),ECC比RSA、DSA快得多
c.存儲空間占用小、ECC的密鑰尺寸和系統參數與RSA、DSA相比要小得多,
d.帶寬要求低。
20.2 openssl的ECC實現
openssl實現了ECC算法,ECC算法系列包括三部分:ECC算法(crypto/ec)、橢圓曲線數字簽名算法ECDSA(crypto/ecdsa)以及橢圓曲線密鑰交換算法ECDH(crypto/dh)
a.密鑰數據結構
主要是公鑰和私鑰數據結構
struct ec_key_st
{
int version;
EC_GROUP *group;
EC_POINT *pub_key;
BIGNUM *priv_key;
}
b. 密鑰生成
對照公鑰和私鑰的表示方式,非對稱算法不同有各自的密鑰生成過程。橢圓曲線的密鑰生成實現在crypto/ec/ec_key.c
c. 簽名值數據結構
非對稱算法不同,簽名的結果表示也不一樣。
typedef struct ECDSA_SIG_st
{
BIGNUM *r;
BIGNUM *s;
} ECDSA_SIG
d.簽名與驗簽
對照簽名結果,crypto/ecdsa/ecs_sign.c實現簽名算法,crypto/ecdsa/ecs_vrf.c實現了驗簽。
e. 密鑰交換
crypto/ecdh/ech_ossl.c實現了密鑰交換算法
20.3 主要函數
a.EC_get_builtin_curves
功能:獲取橢圓曲線列表
b.EC_GROUP_new_by_curve_name
功能:根據制定的橢圓曲線來生成密鑰參數
c.int EC_KEY_generate_key
功能:根據密鑰參數生成ECC公私鑰
d.int EC_KEY_check_key
功能:檢查ECC密鑰
e.int ECDSA_size
功能:獲取ECC密鑰大小字節數
f.ECDSA_sign
功能:簽名,返回1表示成功
g.ECDSA_verify
功能:返回1表示合法
h.EC_KEY_get0_public_key
功能:驗簽,返回1表示合法
h.EC_KEY_get0_private_key
功能:獲取私鑰
i.ECDH_compute_key
功能:生成共享密鑰
