【安全】椭圆曲线加密算法(ECC)深入理解
背景
由于在实际的项目中使用到了基于ECDH的秘钥协商算法,所以对背后基于椭圆曲线密码学(ECC-Elliptic Curve Cryptography)进行了较为深入的学习,本篇文章主要分享一下几点:
- ECC基本介绍
- ECC Keys
- 曲线以及Key的长度
- ECC 相关算法
- 椭圆曲线(Elliptic Curves)
- 有限域上的椭圆曲线
- 有限域上的椭圆曲线: 计算篇
- 将EC 的点乘以一个整数
- ECC上的"Generator" Point
- ECC上的Private Key, Public Key and the Generator Point
- 基于Python的ECC相关实例讲解
基本概念介绍
ECC基本介绍
ECC的英文全称是: Elliptic Curve Cryptography - 椭圆曲线密码学,是基于有限域的椭圆曲线和复杂的椭圆曲线离散对数.
ECC实现了非对称加密所需要的大部分能力,包括: 加密(encryption)、签名(signatures )、秘钥交换(key exchange).
ECC被认为是RSA密码系统的最好继承者,相对于RSA,ECC的keys更小,在于RSA相同等级下能够更快地生成Key.
ECC Keys
Private keys(私钥)在ECC中使用一个整数来表示,通常是一个256bit的整数. 例如对于一个256bit的ECC private key(16进制编码) 可以表示如下:
0x51897b64e85c3f714bba707e867914295a1377a7463a9dae8ea6a8b914246319
在ECC中,**生成就像在一定范围内安全地生成一个随机整数一样简单,所以这个过程非常的快. 任何在这个范围的整数都是有效的ECC private keys.
public key(公钥)在ECC上是ECC points,那什么是ECC points呢?ECC point 代表的是坐落在曲线的整数坐标对{x, y}. 对于public key通常是比private key多一个bit.
曲线以及Key的长度
ECC加密算法可以采用不同的椭圆曲线. 不同的椭圆曲线具备不同的安全等级、不同的性能、不同的key长度,以及可能涉及到的不同底层算法.
ECC 中涉及的椭圆曲线中,非常的出名的有,sepc256k1、Curve25519等.
ECC keys的长度取决于它采用了哪种椭圆曲线. 例如非常出名的开源项目,OpenSSL、mbedtls等,对于ECC通常默认的private keys 为256bit,但最终取决于开发者使用哪一种椭圆曲线. 常见的有: 92-bit (curve secp192r1), 233-bit (curve sect233k1), 224-bit (curve secp224k1), 256-bit (curves secp256k1 and Curve25519), 283-bit (curve sect283k1), 384-bit (curves p384 and secp384r1), 409-bit (curve sect409r1), 414-bit (curve Curve41417), 448-bit (curve Curve448-Goldilocks), 511-bit (curve M-511), 521-bit (curve P-521), 571-bit (curve sect571k1) . 在mbedtls中对于选择的椭圆曲线,项目中直接提供了对应曲线的椭圆曲线参数.
ECC 相关算法
椭圆曲线密码学基于数学上的椭圆曲线有限域提供了不同使用场景的相关算法.
- ECC 数字签名相关算法: ECDSA、EdDSA
- ECC 加密算法: ECIES、EEECC
- ECC秘钥协商算法: ECDH、X25519等
以上这些算法,都是以private key和public key的形式出现。private key 是一个整数,而public key是对于椭圆曲线上的点(EC Point).
未完待续!!
总结
本文是基于一篇非常优秀的关于ECC的文章结合自己的理解进行输出的.
参考文章链接: Elliptic Curve Cryptography (ECC)
该链接中的系列文章讲述了我们日常开发中常用的关于数据安全相关的算法.
上一篇: MAC自带的lnmp
下一篇: .NET Core 控制台应用程序尝试