未央网|区块链技术中的非对称加密算法——签名和加密

签名是一种非对称加密算法的用法 , 即使用不同的加密密钥与解密密钥 , 而由已知加密密钥推导出解密密钥在计算上是不可行的 。 签名是用非对称算法的私钥签名 , 然后用私钥对应的公钥来验证签名 , 的主要作用是确定发送方的身份 。
除了签名 , 非对称加密算法还有一个用处是加密和解密 , 加密则是用公钥来对信息加密 , 然后用对应的私钥进行解密 , 主要作用是向接收方传递加密的信息 。 签名和加密的作用和算法都不相同 , 因此需要加以区别 。
1、签名与验签
签名算法可以在不泄露发送者本身的私钥的情况下 , 通过公钥和签名信息来确认发送者持有对应的私钥 。 签名还可将发送者的身份和信息绑定 , 防止其他人冒充发送者 , 因此这样处理可保证信息的防篡改的同时认证发送者的身份 。 目前常用的签名验签算法有RSA数字签名和椭圆曲线数字签名(ECDSA) , 其中椭圆曲线数字签名是区块链中应用最多的方法 。
1.1RSA数字签名
RSA是被研究得最广泛的公钥算法 , 从提出到现在已有四十年的历史 , 经历了各种攻击考验 。 RSA的安全性主要依赖大数分解 , 优势是秘钥长度可以增加到任意长度 。 RSA运算方式造成了签名内容如果较短 , 会被很容易修改为攻击者想要的内容 , 所以一般还需要将签名内容进行一次哈希运算 , 并填充至和私钥差不多的长度 。 此外 , 随着计算能力的增长 , 为防止被破解 , 秘钥长度也需要不断增长 , 目前认为安全的秘钥长度是2048bit 。 同时RSA的私钥生成需要两个质数的组合 , 因此寻找更长私钥的计算速度也更慢 。
1.2椭圆曲线数字签名
椭圆曲线算法是利用在有限域上的椭圆曲线的离散对数问题来加密或签名的 。 椭圆曲线的秘钥和RSA不同 , 有效范围会受椭圆曲线参数的限制 , 因此不能像RSA一样可以通过增加私钥长度来提高安全性 , 对于安全性不够的曲线 , 必须修改椭圆曲线的参数 , 不如RSA灵活 。 和RSA算法比 , 椭圆曲线的优势在于:私钥可以选取有效范围内的任意数 , 私钥的生成速度远快于RSA算法的私钥 。 最重要的是相同秘钥长度的椭圆曲线安全性能高很多 , 因此达到相同安全等级需要的椭圆曲线秘钥的长度远小于RSA秘钥的长度 , 因此占用的存储空间相对较小 , 对于存储比较受限的区块链来说 , 椭圆曲线更适用 。 这里用椭圆曲线对签名算法进行简单介绍 , 因为椭圆曲线的签名方法和加解密的方法区别明显 , 而RSA的签名和加解密算法模式近似 , 容易引起混淆 , 在此不做介绍 。
1.3非对称签名验签算法
签名算法最主要的思路就是利用算法的单向性 , 使私钥和随机数被隐藏起来 , 然后用公开信息计算获得一致的结果来验证签名的有效性 。
未央网|区块链技术中的非对称加密算法——签名和加密
文章图片
如图所示 , 蓝线为签名所需要的数据 , 经过单向门的数据可被隐藏 , 未经过单向门的数据需要小心处理;红线是验签的数据 , 这些数据对验签者都是公开的 。
【未央网|区块链技术中的非对称加密算法——签名和加密】下面不考虑乘法在有限域椭圆曲线上的具体算法 , 以SEC的椭圆曲线签名算法来简单介绍一下签名的过程 。 SEC是一个椭圆曲线的标准 , 一些常用的曲线 , 如secp256k1、secp256r1都是这个标准下的(http://www.secg.org/sec1-v2.pdf) 。 其他椭圆曲线算法的流程都差别不大 , 但是签名的方式有区别 , 如国密SM2的签名和验签计算的方式和SEC的不一样 , 给消息进行哈希算法的流程也更多 。 RSA签名则没有随机数的流程 。
1.3.1私钥签名
签名算法多次用到了算法的单向性 , 可以看做一个单向的门 , 经过计算相当于从一边穿过单向门 , 但是并不能通过运算再走回去 。 比如私钥为k , 公钥K可通过椭圆曲线乘法算出:


推荐阅读