区块链和密码技术

一、区块链

区块链是什么?一句话,它是一种特殊的(非关系型)分布式数据库,这种数据库只能做插入和查找操作,并且没有管理员。

  1. 首先,区块链的主要作用是储存信息。任何需要保存的信息,都可以写入区块链,也可以从里面读取,所以它是数据库。
  2. 其次,任何人都可以架设服务器,加入区块链网络,成为一个节点。区块链的世界里面,没有中心节点,每个节点都是平等的,都保存着整个数据库。你可以向任何一个节点,写入/读取数据,因为所有节点最后都会同步,保证区块链一致。

区块链的三个基本特征:

  1. 区块链是一个分布式数据库(系统)。
  2. 区块链采用密码学保证已有数据不能被篡改。
  3. 区块链采用共识算法来对于新增数据达成共识。

二、密码

2.1 密码的目标

密码学David Kahn在他的被称为“密码学圣经”的著作中是这样定义密码学的:“密码术(cryptology)就是保护。”保护什么呢?

  • 首要的当然是保护信息本身不被别人获取(机密性);
  • 同时,保护信息不被伪造、篡改(完整性);
  • 能够验证信息的发送者(可认证);
  • 另外,也需要防止信息发出者抵赖(不可抵赖)。

2.2 对称加密与非对称加密

对称加密

采用单钥密码系统的加密方法,同一个密钥可以同时用作信息的加密和解密,也称为单密钥加密。

  • 优点:加解密速度快;
  • 缺点:1.密钥管理量大 2.密钥传输信道安全性更高 3.数字签名的问题。

非对称加密

采用两个密钥来进行加密和解密,这两个秘钥是公开密钥(publickey,简称公钥)和私有密钥(private key,简称私钥)。

优点:

  1. 加密和解密能力分开,私钥不能由公钥推导出来
  2. 多个用户加密的消息只能由一个用户解读(用于公共网络中实现保密通信)
  3. 只能由一个用户加密消息而使多个用户可以解读(数字签名)
  4. 无需事先分配密钥5. 密钥持有量大大减少。

缺点:加解密速度慢。在比特币区块链系统中,采用非对称加密算法当中的椭圆曲线加密算法。

实现非对称加密算法有多种方法,大多数都是基于求解数学难题的,主要包括三类:大整数分解、离散对数和椭圆曲线。

  1. 大整数分解类问题:给出两个大约数,很容易就能将它们两个相乘。但是,给出它们的乘积,找出它们的因子就不那么容易了。这就是许多现代密码系统的关键所在。
  2. 离散对数类问题: 给定素数p和正整数g,知道g^x mod p的值,求x
  3. 椭圆曲线类问题:就是将离散对数问题应用于椭圆曲线上的点。

需要注意的是,这些问题只是看上去不可解,因为历经多年仍未能找到一个简单的解决办法,一旦找到了一个解决办法,那么基于这些问题的加密算法就不再安全了。

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

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

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

三、数字签名

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

提起数字签名,不得不提起密码学领域的另一个知识:哈希函数。数字签名的标准方法通常是,给定一个消息m,利用哈希函数先创建一个定长的消息摘要h(m),之后用私钥签署摘要S[h(m)]。所签署的消息以(m, S[h(m)])对的形式发送。通过公钥恢复h(m)的值,并将h应用到所接收到的消息m上,验证消息的真实性。

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

3.1 hash算法

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

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

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

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

  1. SHA-256,主要用于完成PoW(工作量证明)计算;
  2. RIPEMD160,主要用于生成比特币地址。如下图1所示,为比特币从公钥生成地址的流程。

3.2 哈希特性:

对于安全用途来说,哈希函数具备如下特性:

  • 正向快速:给定明文和哈希算法,在有限时间和有限资源内能计算得到哈希值
  • 逆向困难:给定哈希值,在有限时间内很难逆推出明文
  • 输入敏感:原始输入信息发生任何改变,新产生的哈希值有很大不同
  • 冲突避免:很难找到两段内容不同的明文,使得它们的哈希值一致

冲突避免有时候又称为“抗碰撞性”,分为“弱抗碰撞性”和“强抗碰撞性”。如果给定明文前提下,无法找到与之碰撞的其他明文,则算法具有“弱抗碰撞性”;如果无法找到任意两个发生Hash碰撞的明文,则称算法具有“强抗碰撞性”。

参考资料

药企,独角兽,苏州。团队长期招人,感兴趣的都可以发邮件聊聊:tiehan@sina.cn
个人公众号,比较懒,很少更新,可以在上面提问题,如果回复不及时,可发邮件给我: tiehan@sina.cn