一、区块链技术与应用-密码学原理
密码学原理:
哈希:
加密货币(crypto-currency)
密码学中所用的哈希函数被称为cryptographic hash function
它有两个重要的性质:
1. collisiion resistance(哈希碰撞)
两个不同的输入 哈希函数结果却相同
哈希碰撞是不可避免的 因为输入空间远远大于输出空间
输入可以是任意文本或数字 空间是无限大的 有任意多种输入的可能
然而输出空间却只有种可能 因为哈希值就是一个256位的二进制数
所以就会必然出现两个输入映射到同一个输出的情况
实际中 靠蛮力 也称为brute-force去找到这样一个哈希碰撞是几乎不可能的
假定有一个文本m 那么这个文本的哈希值H(m)叫做m的digest 用来检测对这个文本的篡改
前面我们提到的哈希碰撞 通过英文也可以理解为哈希反抗 意思为这种情况是不想要发生 事实上也确实是几乎不可能发生的
我们几乎是找不到一个H() = H(m) 所以哈希值digest完全可以验证文本真伪
举例:
我要把一重要的文本信息放到了腾讯云服务器上 放之前我生成了一下文本的哈希值并记录在自己电脑上 等要取回文本信息文件的时候 如果再次计算要取回文本信息的哈希值 发现与我当初记录的哈希值一样 那么就可以判定文本在腾讯云服务器的时候没有被修改
注意⚠️:在这个世界上 目前还没有任何一个数学家或者密码学家能找到人为制造哈希256碰撞的方法 但是也同样无法用数学证明不可以人为制造 这一理论是基于感性的经验
哈希函数也有多种形式 曾经有一个著名的哈希函数叫MD5 这个哈希函数最初也认为是不可以被人为制造的 但是最终依然在2004年的时候被我国密码学专家王小云破解
2. hiding (隐藏属性)
给定一个x可以算出一个哈希值H(x) 但是H(x)不可以反推出x
我们也可以理解为这个H(x)没有泄露出任何关于输入的任何信息
当然我们也可以通过蛮力求解 但是hiding成立的前提是输入空间要足够的大 并且取值的范围相对分散
由此 两种性质在一起就形成了digital commitment(digital equivalent of a sealed envelope)
这里我们来解读一下这段英文
Question: sealed envelope是一个密封的信封 加入我里面放了预测明天股票的信息 为什么要密封起来呢?
因为如果预测被提前公开了就会影响到明日的股票涨跌 比如我作为一个权威的专家预测明天某只股票可能要涨 结果大家一跟风都买入直接涨停 干扰了所预测的事情 所以要密封起来 那么加上了digital代表的意思是我把这个信封预测的内容转换成哈希值 因为hiding的属性 结果公布前没人能反推出我的预测内容 然而等结果出来后我把内容公布并再次转换成哈希值 并与我预测前的哈希值作比较 因为第一个哈希碰撞的属性 如果哈希值相同 则证明了结果前后我公布的预则内容是一致的
但是为了让输入空间足够的大 我们会把信封的内容加入一个随机数nonce
Bitcoin
在比特币中 除了需要密码学中两个属性之外 还需要一个属性叫:
Puzzle Friendly
比特币用的哈希函数叫SHA-256
SHA-256(Secure Hash Algorithm-256)是256个bit 转换成十六进制就是除以4 结果就是64位
假如我们想要得到一个哈希值 让这64位中的前10位十六进制数都是0
那么puzzle friendly属性就说没有一种捷径可以缩小输入的范围 只能靠蛮力一个一个去试
这里我们开始说比特币的挖矿:
挖矿其实就是在找这么一个随机数nonce 这个随机数nonce和区块里的其他信息合在一起作为输入得到一个哈希值
H(block header) target
bloack header 成为区块头 里面包含着nonce和一些其他信息 只有nonce是我们可以操作修改的 挖矿其实就是在不停的去试nonce和其他信息的组合 得到的哈希值落在小于target这个范围内
Question: 为什么是小于target呢? 如果说我们正在寻找前10位都是零的十六进制哈希值 那么这个target就是0000000000FFFFFFFFFF……
也就是说10个零加54个F就是target 只要小于等于它 就落在这个范围了(有计算机基础的朋友应该都很容易理解)
又因为puzzle friendly的属性说没有捷径可以走 所以这个寻找合适的随机数nonce才可以作为
proof of work(工作量证明)
你挖到矿了(找到了合适的随机数nonce) 一定是因为你做了大量的工作 因为没有捷径
一旦有一个人(矿工)找到了这么一个nonce 就是把他的成果广播到全网
其他人验证他是否正确只要把他的nonce拿过来和其他信息组合得出哈希值 看看这个哈希值是不是真的小于等于target就行
注意⚠️:nonce随机数全世界的矿工都在疯狂寻找尝试 但是和nonce组合的“其他信息” 每个人手一份都是一模一样的
总结:寻找nonce难如登天 但是验证却很简单 算一次哈希值就好了
这个性质叫做:
difficult to solve but easy to verify
比特币作为数字货币的核心思想是去中心化 意思就是说不需要类似银行系统的存在帮我们来监管记账
Question: 那有个问题怎么去开账户呢? 答案是每个用户自己决定开户 不需要任何人批准 开户的过程非常简单 就是创造一个公钥和私钥对组(public key, private key)
公钥和私钥来源于:
asymmetric encryption algorithm 非对称加密体系
解释非对称加密体系之前 我们先来理解一下对称加密体系:
假设说我有一些信息想在网络上传给我的好朋友小红 但是不希望任何一个人知道其中的内容 我就选择了用一个加密钥匙(encyption key)给其加密 同时把加密钥匙也一并在网上发给我的好朋友小红让他用同一个加密钥匙去解密 这就是一种对称
然而用一个加密钥匙依然是不安全的 别人也可以用这个钥匙去解密我发送的文件信息
所以这时候就引出了非对成加密体系
在非对称加密体系中 加密用的是公钥 而解密用的是私钥 比如还是我给朋友小红传机密文件 但这次我加密的时候使用小红的公钥去加密 公钥就像面向对象中的public权限 谁都可以访问 而小红在收到这个加密文件后可以用自己的私钥去解开 私钥就像是面向对象里的private 除了自己谁都不可以访问
注意⚠️:加密和解密用的是同一个人的公钥和私钥 而且是接收方的
比特币账户的产生 是在本地电脑上产生一个公钥和私钥 这个公钥就像是银行的账号 别人给你转账就只要知道你的公钥就可以转账了 私钥相当于你的账户密码 知道私钥就可以把账户上的钱转走
在比特币中 我们都知道交易的账单是公开的 那为什么还需要加密呢?接下来就引出了“签名”
签名:
Question: 当公开的账单中出现了一条我发起的交易记录 别人怎么知道这个交易真的是我发起的呢?会不会有人打算冒名顶替我来发的这条虚假的交易记录呢?
所以在我发起的这条交易记录中还需要我用私钥进行签名 其他人收到我广播出去的交易记录的时候就需要用我的公钥去验证这个签名 都是同一个人“我”的私钥和公钥
Question: 这里有一个问题 怎么保证每一人产生的公私钥都是独立的呢?
如果有人个每天啥都不干 就去不停的创建公私钥尝试 从而登陆别人的账户去偷钱 那么是否真的可行呢?
答案在理论上讲是完全可行的 但是以我们如今的计算机算力和256位的哈希函数 得到一模一样的公私钥的概率小于地球爆炸的概率 所以可以忽略不计
备注:
本篇文章主要以理论为主讲了比特币的两大模块——哈希和签名 在后续的文章中 会涉及具体的数据结构和算法实现。
一、区块链技术与应用-密码学原理相关推荐
- 区块链笔记 - 《区块链技术核心概念与原理讲解》
说明:笔记内容来源于慕课网<区块链技术核心概念与原理讲解>视频课程.如有侵权,请联系删除. 目录 1.区块链前世今生 2.区块链前景 3.比特币是什么 4.比特币原理 4.1 账本如何验证 ...
- 区块链技术研究综述:原理、进展与应用
来源:区块链技术研究综述:原理.进展与应用 期刊:通信学报. #blockchain 相当于对区块链先进行一个系统的了解吧 区块链的层次化技术结构. #未解决的问题 上述文 献虽 然归纳得较为 ...
- 附录 区块链技术名词与核心原理
一.区块链的技术要素 (一)区块与链 从技术角度看,区块链是一种利用去中心化和去信任的方式集体维护一本数据簿的可靠性的技术方案.该方案要让 参与系统中的任意多个节点,通过一串使用密码学方法相关联产生的 ...
- 区块链技术核心概念与原理
第一章 区块链技术入门 1.1区块链前世今生 1.1.1 密码朋克(Cypherpunk) 邮件组: 密码 数学 计算机技术 等 wiki解密创始人: 阿桑奇 BT下载作者 : 布莱姆-科恩 ...
- 区块链技术核心概念与原理讲解-Tiny熊
转载自简书ceido:https://www.jianshu.com/u/fcdf49ef65bb (1)区块链前世今生 密码朋克(Cypherpunk):是一个邮件组,里面有许多大牛. 区块链不是单 ...
- 区块链技术4:密码学之哈希
所以,我们非常需要这样一种电子支付系统,它基于密码学原理而不基于信用,使得任何达成一致的双方,能够直接进行支付,从而不需要第三方中介的参与. <比特币白皮书> bitcoin是一种加密货币 ...
- 区块链技术指2.1 区块链技术
摘要 区块链基础 区块链是随着比特币等数字加密货币的日益普及而逐渐兴起的一种全新技术,它提供了一种去中心化的.无需信任积累的信用建立范式,目前已经引起金融行业.科研机构.政府部门和投资公司的高度重视与 ...
- 区块链技术指南笔记(三):区块链运作的核心技术
前言 在学习区块链的时候,有很多知识点,作为读者的我们不能第一时间去消化它(也没必要第一遍就弄懂),某些方面的设计思想看的也是一知半解.我遇到这种情况,一般会将书多看几遍,再去寻找各个知识点之间的关系 ...
- 【转载】区块链技术原理、应用领域及挑战
区块链技术原理.应用领域及挑战 李董, 魏进武 中国联合网络通信有限公司研究院,北京 100032 引用本文: 李董, 魏进武. 区块链技术原理.应用领域及挑战. 电信科学[J], 2016, 32( ...
最新文章
- WPF框架的内存泄漏BUG
- 设计模式之策略模式学习笔记
- Unity的NGUI插件篇——入场效果
- 关于在64位系统上,使用APlayer,运行报错“找不到指定的模块”
- 【Android 安装包优化】WebP 应用 ( libwebp 源码下载 | Android.mk 和 Application.mk 构建脚本修改 | libwebp 函数库编译 )
- Leetcode 292. Nim 游戏 解题思路及C++实现
- 辰星计划2021 | 旷视春季实习生招募—空中宣讲会第二弹来了!
- 冲击SuperGLUE:基于多任务与对抗训练的Finetune方案解析
- install npm 到某个文件下执行_如何将npm安装到指定目录?
- 蓝桥杯 历届试题 带分数
- ajax应用_AJAX的应用
- 2017.6.3 完全平方数 思考记录
- 【Flink】did not rea ct to cancelling signal for 30 seconds, but is stuck No implementation was bound
- Vim 实用技术,第 1 部分: 实用技巧(转)
- android 色彩管理,你买的贵价屏幕只是半成品?谈谈色彩管理那点事
- 计算机主机内有哪些硬件,电脑主机内部有哪些硬件
- Solution to no ADO.NET in VS2019 VS里没有ADO的解决办法
- hdu 5055(坑)
- Flume-----八种采集方案
- 我是江西人 (二)江右商帮