密码学07--数字签名之go中的椭圆曲线数字签名

目录

1.ECC

1.1 简介

1.2 GO语言中的ECC说明

1.3 Go语言中的ECC相关

1.4 Go语言中的ECC数字签名流程

1.4.1 ECDSA密钥对生成

1.4.2 ECDSA密钥对本地化

1.4.3 ECDSA私钥数字签名

1.4.4 ECDSA公钥签名校验

1.5 Go语言中的ECC数字签名模板


1.ECC

1.1 简介

Elliptic curve cryptography,椭圆曲线密码学,即ECC。是一种建立公开密钥加密的算法,基于椭圆曲线数学。椭圆曲线在密码学中的使用是在1985年由Neal Koblitz和Victor Miller分别独立提出的。详情链接https://www.cnblogs.com/Kalafinaian/p/7392505.html

如果你能够坚持看完上面的博客,并且能够看懂里面的内容,我十分佩服,因为我实在是没看下去。不过或多或少了解了一些基本的概念比如椭圆曲线函数并不是说真的就是一个函数来生成椭圆上的两个点这么简单,函数的几何形状也并不真的是一个椭圆。(真的就看懂了这么点东西..)所以有机会还是希望多多阅读一下大神的博客。

1.2 GO语言中的ECC说明

在上一篇博客中我提到了一个来自大神们的嘲讽,那就是:

  • go语言只提供了RSA算法的非对称加密接口,而没有提供ECC的非对称加密接口!
  • 然而go语言却同时提供了RSA算法的数字签名接口,和ECC的数字签名接口。

这就意味着我们虽然不能使用ECC生成的公私钥对我们的信息进行非对称加密操作,但是我们却可以使用ECC生成的公私钥进行数字签名操作。直白一点说就是:RSA算法可以使用生成的密钥对来对信息加密,也能进行数字签名;而ECC则只能使用生成的密钥对进行数字签名。

1.3 Go语言中的ECC相关

(1)go中用于声明椭圆曲线模型的包 crypto/elliptic包,并提供生成4种素域的椭圆曲线函数(素域:执行不同ECC函数的到的不同椭圆曲线)。当然如果你对ECC有相当的研究并懂得它的执行原理,也可以通过go语言中提供的详细ECC方法来定制属于自己标准的ECC函数╮(╯▽╰)╭ 我暂时先放弃了。对于go语言自带的ECC函数来说,数字越大对应的ECC的公私钥的长度就越长,对应的加密等级就越高,当然也就越安全,那么对应的执行效率也就会相对降低。

(2)go中用于椭圆曲线数字签名的包 crypto/ecdsa包

1.4 Go语言中的ECC数字签名流程

1.4.1 ECDSA密钥对生成

与RSA不同的是,RSA算法生成的密钥对都是*rsa类型的,而ECC算法生成的密钥对都是*ecdsa类型的。所以当生成*ecdsa密钥对的时候需要调用的自然不能是crypto/rsa包中的函数,而应当是crypto/ecdsa包中的GenerateKey函数。

//GenerateKey函数生成一对ecdsa类型的公钥/私钥。
func GenerateKey(c elliptic.Curve, rand io.Reader) (priv *PrivateKey, err error)

相信你已经注意到本函数的第一个参数是一个elliptic.Curve类型的对象,这是什么?这就是ECC椭圆曲线!那么我们会如何生成ECC椭圆曲线吗?嗯,我不会,所以我们可以直接通过调用crypto/elliptic包中的自带ECC函数来生成一个ECC椭圆曲线。

//返回一个实现了P-224的曲线。
func P224() Curve
//返回一个实现了P-256的曲线。
func P256() Curve
//返回一个实现了P-384的曲线。
func P384() Cu
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值