go语言rsa Go语言面试题

Golang 椭圆加密算法实现椭圆曲线密码学(英语:Elliptic Curve Cryptography , 缩写:ECC)是一种基于椭圆曲线数学的公开密钥加密算法 。椭圆曲线在密码学中的使用是在1985年由Neal Koblitz和Victor Miller分别独立提出的 。
ECC的主要优势是在某些情况下它比其他的算法(比如RSA加密算法)使用更小的密钥并提供相当的或更高等级的安全 。ECC的另一个优势是可以定义群之间的双线性映射,基于Weil对或是Tate对;双线性映射已经在密码学中发现了大量的应用,例如基于身份的加密 。
不过一个缺点是加密和解密操作的实现比其他机制花费的时间长 。
7 Go密码学(四) 非对称加密之RSA对称加密有非常好的安全性,其加解密计算的性能也较高,但其有两个重要缺点:
在如今开放的信息社会 , 秘钥的管理愈加困难 , 非公开的秘钥机制虽然破解较难,但还是有遭到攻击的可能性,由于对称加密需要加解密双方共同握有私钥 , 所有生成秘钥的一方必须分发给另一方才能进行安全通行,这就难免秘钥在网络中传输,网络是不可靠的 , 其有可能被拦截或篡改 。于是就产生了公开秘钥体制 , 即服务方根据特定算法产生一对钥匙串 , 自己持有私钥小心保存 , 而公钥公开分发,在通信中,由公钥加密进行网络传输,而传输的信息只能由私钥解密 , 这就解决了秘钥分发的问 。公开秘钥体制就是非对称加密,非对称加密一般有两种用途:
如今的非对称加密比较可靠的有RSA算法和ECC算法(椭圆曲线算法),RSA的受众最多,但近年来随着比特币、区块链的兴起,ECC加密算法也越来越受到青睐 。下面我们先介绍一下RSA加密算法的使用,ECC我们下一讲展开 。
公钥密码体系都是要基于一个困难问题来保证其安全性的,RSA是基于大数分解,将一个即使是计算机也无能为力的数学问题作为安全壁垒是现代密码学的实现原理 。讲述这类数学问题需要庞杂的数论基础,此相关部分在此不再展开,感兴趣的请出门右拐搜索欧几里得证明、欧拉函数等数论部分知识 。
Go标准库中crypto/rsa包实现了RSA加解密算法,并通过crypto/x509包实现私钥序列化为ASN.1的DER编码字符串的方法,我们还使用编解码包encoding/pem(实现了PEM数据编码,该格式源自保密增强邮件协议,目前PEM编码主要用于TLS密钥和证书 。)将公私钥数据编码为pem格式的证书文件 。
使用以上加解密方法:
通过Go语言创建CA与签发证书本篇文章中go语言rsa,将描述如何使用go创建CAgo语言rsa,并使用CA签署证书 。在使用openssl创建证书时,遵循的步骤是 创建秘钥创建CA生成要颁发证书的秘钥使用CA签发证书 。这种步骤,那么我们现在就来尝试下 。
首先 , 会从将从创建CA开始 。CA会被用来签署其他证书
接下来需要对证书生成公钥和私钥
然后生成证书:
我们看到的证书内容是PEM编码后的 , 现在caBytes 我们有了生成的证书,我们将其进行 PEM 编码以供以后使用:
证书的x509.Certificate与CA的x509.Certificate属性有稍微不同 , 需要进行一些修改
为该证书创建私钥和公钥:
有了上述的内容后,可以创建证书并用CA进行签名
要保存成证书格式需要做PEM编码
创建一个ca.go里面是创建ca和颁发证书的逻辑
如果需要使用的话,可以引用这些函数
panic: x509: unsupported public key type: rsa.PublicKey
这里是因为x509.CreateCertificate的参数privatekey需要传入引用变量,而传入的是一个普通变量

推荐阅读