1. 概念
椭圆曲线密码学(英语:Elliptic curve cryptography,缩写为 ECC),一种建立公开密钥加密的算法,基于椭圆曲线数学。椭圆曲线在密码学中的使用是在1985年由Neal Koblitz和Victor Miller分别独立提出的。
ECC的主要优势是在某些情况下它比其他的方法使用更小的密钥——比如RSA加密算法——提供相当的或更高等级的安全。
椭圆曲线密码学的许多形式有稍微的不同,所有的都依赖于被广泛承认的解决椭圆曲线离散对数问题的 困难性上。与传统的基于大质数因子分解困难性的加密方法不同,ECC通过椭圆曲线方程式的性质产生密钥。
ECC 164位的密钥产生的一个安全级相当于RSA 1024位密钥提供的保密强度,而且计算量较小,处理速度 更快,存储空间和传输带宽占用较少。目前我国 居民二代身份证 正在使用 256 位的椭圆曲线密码,虚拟 货币 比特币 也选择ECC作为加密算法。
具体算法详解参考:
- https://www.cnblogs.com/Kalafinaian/p/7392505.html
- https://blog.csdn.net/taifei/article/details/73277247
2. go语言生成ECC椭圆曲线的私钥和公钥
/*
* 生成椭圆曲线非对称加密的私钥和公钥
* elliptic.Curve:elliptic.P521()/elliptic.P384()/elliptic.P256()
*/
func GenerateECCKey(c elliptic.Curve, privatePath,publicPath string){
// 生成密钥
privateKey, _ := ecdsa.GenerateKey(c, rand.Reader)
// 保存密钥
// x509编码
x509PrivateKey, _ := x509.MarshalECPrivateKey(privateKey)
//pem编码编码
block := pem.Block{
Type:"ecc private key",
Bytes:x509PrivateKey,
}
//保存到文件中
privateFile, _ := os.Create(privatePath)
pem.Encode(privateFile,&block)
defer privateFile.Close()
////////////////////保存公钥//////////////////////
// x509编码
x509PublicKey, _ := x509.MarshalPKIXPublicKey(&privateKey.PublicKey)
// pem编码
publicBlock := pem.Block{
Type:"ecc public key",
Bytes:x509PublicKey,
}
publicFile, _ := os.Create(publicPath)
defer publicFile.Close()
pem.Encode(publicFile,&publicBlock)
}
func testGenECC() {
byecc.GenerateECCKey(elliptic.P521(), "eccPri.pem","eccpub.pem")
}