美文网首页
非对称加密之ECC椭圆曲线(go语言实践)

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

作者: 泡泡龙吐泡泡 | 来源:发表于2018-11-06 11:08 被阅读49次

    1. 概念

    椭圆曲线密码学(英语:Elliptic curve cryptography,缩写为 ECC),一种建立公开密钥加密的算法,基于椭圆曲线数学。椭圆曲线在密码学中的使用是在1985年由Neal Koblitz和Victor Miller分别独立提出的。

    ECC的主要优势是在某些情况下它比其他的方法使用更小的密钥——比如RSA加密算法——提供相当的或更高等级的安全。

    椭圆曲线密码学的许多形式有稍微的不同,所有的都依赖于被广泛承认的解决椭圆曲线离散对数问题的 困难性上。与传统的基于大质数因子分解困难性的加密方法不同,ECC通过椭圆曲线方程式的性质产生密钥。

    ECC 164位的密钥产生的一个安全级相当于RSA 1024位密钥提供的保密强度,而且计算量较小,处理速度 更快,存储空间和传输带宽占用较少。目前我国 居民二代身份证 正在使用 256 位的椭圆曲线密码,虚拟 货币 比特币 也选择ECC作为加密算法。

    具体算法详解参考:

    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语言实践)

          本文链接:https://www.haomeiwen.com/subject/cswyxqtx.html