密码学是什么
密码学可以用下面的话来进行概括
注意是因为有这个第三方的存在,才需要密码学, 也就是说是为了防止第三方搞破坏。
密码体制分类
- 单钥、私钥、对称密码体制
- 双钥、公钥、非对称密码体制
密码学的主要研究内容
- 公钥加密
- 数字签名
- 私钥加密:分组密码,流密码
- 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这也就是挖矿的过程。 零知识证明则是节点如何在不透露密钥的情况下,验证身份的理论基础。