区块链技术与应用:02-BTC-密码学原理
本文为个人整理笔记,知识点来源于北京大学肖臻老师的《区块链技术与应用》公开课视频:https://www.bilibili.com/video/BV1Vt411X7JF?from=search&seid=11990345748014503507&spm_id_from=333.337.0.0
BTC-密码学原理
比特币称为加密货币(crypto-currency),但实际上加密货币是不加密的,区块链上所有的交易是公开的。
比特币主要用到了密码学中的两个功能:哈希函数和签名。
一、哈希函数(cryptographic hash function)
密码学中,哈希函数有两个重要性质:哈希碰撞和hiding
1、哈希碰撞(collision resistance)
x≠y,H(x)=H(y)
哈希碰撞指的是不同的输入,得到的哈希值是相同的。
哈希碰撞理论上是不可避免的,因为输入空间是远远大于输出空间的。比如现在给定256位的哈希值,那么我们的输出空间为2^256,输出空间是无限大的。但是没有什么高效的办法可以人为地输入不同值,使得获取的哈希值是一样的。只有一种蛮力的方式,brute-force,遍历所有输入范围去获取。
理论上是无法证明哈希函数具有哈希碰撞的性质,只是通过实践发现哈希函数发现不了人为制造哈希碰撞的方法。当然也有例外,目前MD5已经被破解了,存在可人为制造哈希碰撞的方法。
哈希碰撞这个性质的作用:没有办法可以篡改内容,而不被检测出来。比如:一个文件存在某个云存储服务器上,如何判定文件是否被篡改。上传之前,会算一个哈希值存在本地,下载之后再去算一个哈希值,比对之前的值,如果是一样的,则说明文件没有被篡改。
2、hiding
hiding指的是哈希函数的计算是单向的,不可逆的。X→H(X),输入X,可以获取哈希值H(X),但是通过H(X)是推不出输入值x的。除非用穷举的方式,所以成立的前提是输入的空间要足够得大,且取值概率是均等,则难以破解。
结合哈希碰撞的性质,可以实现digital commitment,也可以称为digital equivalent of a sealed envelope。现实生活中,可以理解为:预测可能影响结果,比如股市走向,大v预测走向,可能引领一堆人去买,也可能导致有人趁机做套。所以预测结果是不可提前公开的。那么,如何验证哈希值正确与否?需要一个第三方公证机构,事先保管好哈希值。
常用的方法是输入+一个随机数,再去取哈希。
3、Puzzle friendly
除了密码学要求的两个性质以外,比特币中还要求哈希函数的另一个性质,叫做Puzzle friendly。是指哈希值计算的事先是不可预算的,看着输入是看不出来输出的,即无法人为地输入使得哈希值在指定的某一个区间内。
后面会讲到比特币挖矿,挖矿就是找到一个随机数nonce,nonce会跟区块块头的其他信息一起作为输入,得到一个哈希值,使其小于等于指定的目标值target。挖矿的过程就是一直不停地去试各种随机数,使其输出的哈希值在既定范围内。挖矿很难,验证很容易,验证只需要用挖矿得到的输入值做一次哈希运算,得到的值在既定范围内即可。
比特币用到的哈希函数是SHA-256(Secure Hash Algorithm),我们前面说的三个性质,SHA-256都是满足的。
二、签名
1、账户管理和加密方式
讲签名之前,需要先讲下比特币系统中的账户管理。
日常生活中,开立账户需要带好自己的证件去银行办理开户,这是一种典型的中心化账户管理。而比特币是去中心化的,不存在银行这样的中心机构,每个用户可以自己在本地开户,创建一个公钥和私钥。用户在本地的公私钥对,就是一个账户。
对称加密:公私钥的概念来源于非对称的加密(asymmetric encryption algorithm)。一开始的加密是对称的,即两个人拥有同一个密钥encyption key,用户A将信息用该密钥加密后发送给用户B,用户B收到信息后使用同一密钥解密。对称加密方式下,密钥的传输是个问题,不能在网络上明文传输,容易泄露。
非对称加密:所以出现了非对称加密,加密用的是公钥,解密用的是私钥。还是之前的例子,用户A给用户B发信息,通过用户B的公钥加密信息。用户B接收到信息后,通过用户B自身的私钥解密。即非对称加密用的是同一个人的公私钥对,这样做的好处是公钥是可以公开的。简单理解,公钥相当于银行账号,私钥相当于银行卡密码,我可以通过私钥去交易。
2、签名
前面说到比特币的信息是公开不加密的,那要公私钥有什么用呢?即用于本段落要说明的签名。
比如A转给B10个比特币,怎么证明是A发起的,而不是别人冒名顶替的呢?发起者A可以用私钥签名,接受者B用发起者A的公钥验证发起人身份。
此外,还存在一个安全问题,公私钥都是自己在本地生成的,有没有可能两个人的公私钥重复了,导致可以盗取他人资产的情况?这种概率理论上是存在的,实际上是微乎其微的,可以忽略不计的。不过比特币计算的每一步需要好的随机源,任何一步没用好的随机源,都可能导致私钥泄露。
区块链技术与应用:02-BTC-密码学原理的更多相关文章
- 一、Bitcoin比特币与BlockChain区块链技术
一.比特币历史 2008 年 10 月 31 日,一个网名叫中本聪(英文翻译过来滴)的家伙发布比特币唯一的白皮书:<Bitcoin:A Peer-to-PeerElectronic Cash S ...
- 001-Bitcoin比特币与BlockChain区块链技术
一.比特币历史 2008 年 10 月 31 日,一个网名叫中本聪(英文翻译过来滴)的家伙发布比特币唯一的白皮书:<Bitcoin:A Peer-to-PeerElectronic Cash S ...
- 给本体ONT技术社区的第一封公开信-涉及到不少区块链技术知识
给本体ONT技术社区的第一封公开信-涉及到不少区块链技术知识 共识是区块链的核心机制,在一系列的区块链的发展历史当中,PoW/PoS/BFT等系列的共识算法都在各自的应用场景发挥了不同作用.在本体的第 ...
- FUNMVP:几张图看懂区块链技术到底是什么?(转载)
几张图看懂区块链技术到底是什么? 本文转载自:http://www.cnblogs.com/behindman/p/8873191.html “区块链”的概念可以说是异常火爆,好像互联网金融峰会上没人 ...
- HyperLedger Fabric 1.4 区块链技术发展(1.3)
区块链技术发展经历区块链1.0(数字货币).区块链2.0(数字资产与智能合约)和区块链3.0(各种行业分布式应用落地)三个阶段.区块链在应用上分为公有链(PublicBlockChains).联盟链( ...
- 区块链技术(一):Truffle开发入门
以太坊是区块链开发领域最好的编程平台,而truffle是以太坊(Ethereum)最受欢迎的一个开发框架,这是我们第一篇区块链技术文章介绍truffle的原因,实战是最重要的事情,这篇文章不讲原理,只 ...
- 如何从零开始学习区块链技术——推荐从以太坊开发DApp开始
很多人迷惑于区块链和以太坊,不知如何学习,本文简单说了一下学习的一些方法和资源. 一. 以太坊和区块链的关系 从区块链历史上来说,先诞生了比特币,当时并没有区块链这个技术和名词,然后业界从比特币中提取 ...
- 区块链技术现状&前景
炒作周期 Gartner 在 2017 年发布的新兴技术炒作曲线,这张图是去年 8 月发布的,当时估计它们也没料到随后能有那么火,当时区块链在这个位置,其实是已经过了炒作的巅峰期,正在往低谷走的这个阶 ...
- 未来-区块链-IBM:IBM 区块链技术开发社区
ylbtech-未来-区块链-IBM:IBM 区块链技术开发社区 1.返回顶部 1. 开始学习 IBM Blockchain 101:开发人员快速入门指南 这篇快速入门指南适合不熟悉区块链技术,希望快 ...
- AngelToken:区块链技术的突破
科技进步,直接捅破了政治.金融.军事领域所有的玩法,让工业革命以来形成的规则变得一钱不值. 而且,当下的最重要的技术趋势——区块链.Token.AngelToken,正在引导我们走向全面的失控和未知. ...
随机推荐
- 目标检测yolov5检测火龙果
一.github官方网址 https://github.com/ultralytics/yolov5/tree/v6.1 二.labelme标记数据集: (1).进入虚拟环境 (2).pip inst ...
- vue点击遮罩层阴影区域隐藏
<div class="overlay" v-if="mask" @click="closeMaskTap($event)"> ...
- sed编辑器
sed sed是一个非交互式的流文本编辑器,可实现增删改查,广泛适用于shell脚本中 工作原理 sed每次只从文本或标准输入中读取一行数据,将其拷贝到一个编辑缓冲区,然后对其如同命令一般处理,并显示 ...
- noi 1.5 36 计算多项式的值
描述 假定多项式的形式为xn+xn-1+-+x2+x+1,请计算给定单精度浮点数x和正整数n值的情况下这个多项式的值. 输入 输入仅一行,包括x和n,用单个空格隔开.x在float范围内,n < ...
- 创建ZBLOG数据库
1.下载ZBLOG待测系统,并解压缩 打开内容如下 2.打开小皮面板的网站,点击网站->管理->打开根目录,然后把里面所有内容删除,粘贴下载好打开的内容 3.然后重启Nginx 4.浏览器 ...
- element NavMenu侧栏导航菜单(可折叠)
展示效果如图: 代码: <el-scrollbar class="scrollbar-wrapper"> <!-- el-scrollbar超长可滚动 --> ...
- vue表单校验限制输入数字后小数点两位(包括避开通过中文输入法的那些坑)
<el-form-item label="海运运费系数"> <el-input v-model.trim="ruleForm.oceanFreightC ...
- 主要转引本地的pycharm如何与服务器连接
需求:本地电脑pycharm上编写程序,在服务器端运行代码. 主要参考了这两篇文章: 1. https://blog.csdn.net/qq_43391414/article/details/1205 ...
- 修改tomcat启动时,修改默认访问的页面
在
- Navicat15激活
1.下载Navicat for MySQL 15 https://www.navicat.com.cn/download/navicat-for-mysql 2.下载激活工具 注意:因某些限制,下载链 ...