椭圆曲线原理 椭圆曲线算法说明 椭圆曲线算法命令 椭圆曲线常用函数
- 2019-09-22 23:30:00
- admin
- 原创 3493
一、椭圆曲线原理
1、椭圆曲线函数y^2 = x^3 + ax + b,椭圆曲线参数(p, a, b, n, x, y);
2、(p, a, b)定义了椭圆曲线,p表示素数域的范围,p决定密钥长度;
3、(x, y)定义了椭圆曲线基点G,n是基点的阶,是曲线上点的个数;
4、椭圆曲线上的任何一点都可以表示为kG,k范围是[1, n];
5、椭圆曲线是否安全由p和n共同决定,p和n都必须足够大;
6、假定Q=dG,则d为私钥是一个数,Q为公钥是一个点;
二、椭圆曲线算法说明
1、椭圆曲线和DH算法本质是离散对数没有多项式时间的解法;
2、椭圆曲线主要用于签名和密钥交换;
3、椭圆曲线私钥可以导出公钥;
4、DH算法主要用于密钥交换;
5、相同输入下,ECDH密钥值每次一样;
6、相同输入下,ECDSA签名值每次不一样,因为引入了随机数;
三、椭圆曲线算法命令
openssl ecparam -list_curves,显示支持的曲线类型
openssl ecparam -genkey -name secp192k1 -out ec.pem,生成pkcs1格式私钥
openssl ec -param_out -in ec.pem | openssl asn1parse,查看曲线类型
openssl ec -in ec.pem -pubout -out ecpub.pem,导出公钥
openssl ec -noout -text -in ec.pem,查看私钥
openssl ecparam -out curve.param -name secp256k1,生成曲线参数
openssl genpkey -paramfile curve.param -out ec.pem,生成pkcs8格式私钥
openssl pkey -in ec.pem -pubout -out ecpub.pem,导出公钥
openssl pkey -noout -text -in ec.pem,查看私钥
openssl dgst -ecdsa-with-SHA1 -sign ec.pem -out sign datafile
openssl dgst -ecdsa-with-SHA1 -verify ecpub.pem -signature sign datafile
四、椭圆曲线常用函数
1、EC_KEY_new_by_curve_name(nid),生成EC_KEY,包含椭圆曲线参数EC_GROUP;
2、EC_KEY_generate_key(key),生成椭圆曲线私钥和公钥;
3、EC_KEY_get0_group(key),获取椭圆曲线参数;
4、EC_GROUP_get_degree(group),获取私钥比特位数,比如曲线secp192k1返回192;
5、EC_KEY_get0_private_key(key),获取私钥,打印值与openssl显示一致;
6、EC_KEY_get0_public_key(key),获取公钥,打印值与openssl显示一致;