区块链技术与密码学联系
密码学是什么
密码学可以用下面的话来进行概括
Cryptography is the practice and study oftechniques for secure communication in the presence of third parties (called adversaries) —from wiki.
密码学是第三方存在下的安全通信技术的研究与实践。
密码学是研究如何在敌人存在的环境中通讯
——著名的密码学者Ron Rivest
注意是因为有这个第三方的存在,才需要密码学, 也就是说是为了防止第三方搞破坏。
密码体制分类
- 单钥、私钥、对称密码体制
- 双钥、公钥、非对称密码体制
密码学的主要研究内容
- 公钥加密
- 数字签名
- 私钥加密:分组密码,流密码
- Hash函数
- 伪随机数
- 安全协议:承诺,零知识证明,多方计算
信息安全的基本要素
- 信息的保密性 (保证信息不泄漏给未经授权的人)
- 信息的完整性 (防止信息被未经授权的篡改或破坏)
- 认证性 (怎么知道是你的信息, 需要认证)对某一实体所声称的身份提供
证实的行动 - 不可否认性 (数字签名)
- 匿名性 (例如智能电表, 信息不能透露给别人)
- 接入控制
- 可用性
与区块链相关的密码技术
- 单向函数;
- 对称加密:AES;
- Hash函数;
- 公钥加密:RSA,ECC
- 数字签名及其推广;
- 承诺方案;
- 零知识证明;(如何不暴露密钥的情况下进行验证)
下面会重点讲几个点
哈希函数
哈希函数定义
Hash函数是将任意长度的消息映射成一个较短的定长输出消息的函数.如下形式: h = H(M), M是变长的消息,h是定长的Hash值.
哈希函数特点
哈希函数的特点就是 变长消息经过哈希处理变成定长哈希值, 也可以这样理解•Hash函数的目的是为文件、消息或其它的分组数据产生
“数字指纹”
哈希函数的需求
- H能用于任何大小的数据分组;
- H产生定长输出;
- 对任意给定的x, H(x)要相对易于计算,使得软硬件实现都实际可行;
- 对任意给定的码h, 寻求x使得H(x)=h在计算上是不可行的(单向的或原像稳固的);
- 任意给定分组x, 寻求不等于x的y, 使得H(y)= H(x)在计算上不可行(第二原像或弱抗攻击性);
- 寻求对任何的(x,y)对使得H(x)=H(y)在计算上不可行(碰撞或强抗攻击性);
零知识证明
零知识证明指的是证明者能够在不向验证者提供任何有用的信息的情况下,使验证者相信某个论断是正确的。零知识证明实质上是一种涉及两方或更多方的协议,即两方或更多方完成一项任务所需采取的一系列步骤。
交互证明协议
证明但是不能透露密钥
发送者给承诺, 验证者给挑战, 发送者给回应。只要挑战失败就表示不能通过, 这不是正确的发送者。
区块链和密码学联系
区块链是比特币的底层技术, 区块链本质上是一条哈希链。
早期哈希链
哈希链最早是由Leslie Lamport提出, 用于解决如何在不透露密码的情况下让邮箱服务器验证自己的身份
他的解决方案是首先把密码进行哈希,开始会把密码哈希N 次,然后把每次的哈希结果放到邮箱服务器的数据库中,此时数据库存储了N个哈希值分别对应密码的n次哈希值, 这就代表了他的密码, 那么如何验证呢? 验证方法很简单, 客户端将密码哈希A次(A<N), 然后将哈希值传给服务器, 服务器对哈希值再一次进行哈希, 把此时的哈希值与最开始存在数据库中的哈希A+1次的结果进行比对 , 如果相同则表示ok, 不同则表示不是此用户, 一共验证N次都成功,则表示·1是此用户的登陆。
在以上的过程中, 有两个重要的点
- 传给服务器的没有密码, 只有哈希值
- 从密码到第一个哈希值,再到第二个哈希值,只要有一个地方的哈希值出现问题,验证都不会成功
哈希链串联数据
当我们把上面的密码换成数据的话, 可以说现在这一条哈希链是一个数据库了
而且这样的数据库 有防止篡改, 公开验证的特性。
共识机制
那么对于这样一条哈希链, 是由谁来上传和记录数据呢, 换句话说, 谁能把数据哈希然后成为哈希链的新节点?
答案是共识机制,显然不能每个节点都能够记录数据, 因为这样每个节点得到的交易可能不同, 导致哈希链不同,出现分支, 我们使用工作量证明来当做共识机制, 由于哈希函数的随机性, 每次的哈希值的每一位的0/1的概率相同, 当节点找到某个值,其哈希值的前n位为0, 就表示工作完成, 此节点就被加入到哈希链里, 完成这一过程需要2^n次哈希计算
总结
首先明白区块链实质上是一条哈希链, 哈希函数能把变长值变成固定长度的哈希值, 且不可逆。 区块链就是把区块头当做数据进行哈希的哈希链, 此时区块链已经有了哈希链的特性了, 但是不能每个人都能把数据哈希然后成功加入链中,所以加入难度, 想要加入链中哈希值必须满足条件(前n位为0这也就是挖矿的过程。 零知识证明则是节点如何在不透露密钥的情况下,验证身份的理论基础。