非对称加密之ECC椭圆曲线(go语言实践)

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")
}

你可能感兴趣的:(非对称加密之ECC椭圆曲线(go语言实践))