区块链及相关密码学技术

      密码学技术是区块链技术的核心,现本文将介绍区块链技术涉及到的部分密码学技术知识。包括:hash算法、对称加密与非对称加密以及数字签名等简要地介绍。

一、hash算法

      Hash,就是把任意长度的输入(又叫做预映射, pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,其中散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,但是不可逆向推导出输入值。简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。

     哈希(Hash)算法,它是一种单向密码体制,即它是一个从明文到密文的不可逆的映射,只有加密过程,没有解密过程。同时,哈希函数可以将任意长度的输入经过变化以后得到固定长度的输出。哈希函数的这种单向特征和输出数据长度固定的特征使得它可以生成消息或者数据。

     以比特币区块链为代表,其中工作量证明和密钥编码过程中多次使用了二次哈希,如SHA(SHA256(k))或者RIPEMD160(SHA256(K)),这种方式带来的好处是增加了工作量或者在不清楚协议的情况下增加破解难度。

以比特币区块链为代表,主要使用的两个哈希函数分别是:

1.SHA-256,主要用于完成PoW(工作量证明)计算;

2.RIPEMD160,主要用于生成比特币地址。如下图1所示,为比特币从公钥生成地址的流程。

                                  图1:从公钥生成比特币地址

二、对称加密与非对称加密

       对称加密:采用单钥密码系统的加密方法,同一个密钥可以同时用作信息的加密和解密,也称为单密钥加密。优点:加解密速度快;缺点:1.密钥管理量大2.密钥传输信道安全性要求更高3.数字签名的问题。

      非对称加密采用两个密钥来进行加密和解密,这两个秘钥是公开密钥(publickey,简称公钥)和私有密钥(private key,简称私钥)。优点:1. 加密和解密能力分开,私钥不能由公钥推导出来2. 多个用户加密的消息只能由一个用户解读(用于公共网络中实现保密通信)3. 只能由一个用户加密消息而使多个用户可以解读(数字签名)4. 无需事先分配密钥5. 密钥持有量大大减少。缺点:加解密速度慢。在比特币区块链系统中,采用非对称加密算法当中的椭圆曲线加密算法。

       比特币使用了secp256k1标准所定义的一条特殊的椭圆曲线和一系列数学常数。 secp256k1曲线由下述函数定义,通过该函数可产生一条椭圆曲线,如图2所示:

或者

                                                                               图2:椭圆曲线

         通过该椭圆曲线可以生成公钥,以一个随机生成的私钥k为起点, 我们将其与曲线上已定义的生成点G相乘,获得曲线上的另一点,就得到了相应的公钥K。 生成点是secp256k1标准的一部分, 比特币密钥的生成点都是相同的:{K = k * G},其中k是私钥, G是生成点, 在该曲线上所得的点K是公钥。

         因为所有比特币用户的生成点是相同的, 一个私钥k乘以G将得到相同的公钥K。 k和K之间的关系是固定的, 但只能单向运算, 即从k得到K。 这就是可以把比特币地址(K的衍生)与任何人共享而不会泄露私钥(k) 的原因。

三、数字签名

       数字签名基于非对称加密,既可以用于证实某数字内容的完整性,又同时可以确认来源。

        一个典型的场景是,Alice通过信道发给Bob一个文件(一份信息)。Alice可以先对文件内容进行摘要,然后用自己的私钥对摘要进行加密(签名),之后同时将文件和签名都发给Bob。Bob收到文件和签名后,用Alice的公钥来解密签名,得到数字摘要,与收到文件进行摘要后的结果进行比对。如果一致,说明该文件确实是Alice发过来的(别人无法拥有Alice的私钥),并且文件内容没有被修改过(摘要结果一致)。

       知名的数字签名算法包括DSA(Digital Signature Algorithm)和安全强度更高的ECSDA(Elliptic Curve Digital Signature Algorithm)等。除普通的数字签名应用场景外,针对一些特定的安全需求,产生了一些特殊数字签名技术,包括盲签名、多重签名、群签名、环签名等。

四、总结

       总而言之,区块链技术作为新兴的技术,其中大量利用了现代密码学的已有成果,包括哈希、加解密、数字签名等。另一方面,区块链系统和诸多新的场景也对密码学和安全技术提出了很多新的需求,反过来也将促进相关学科的进一步发展。

 

个人技术分享公众号:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hello World程序员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值