首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >区块链学习笔记 | 比特币中用到的密码学原理

区块链学习笔记 | 比特币中用到的密码学原理

作者头像
Python进击者
发布于 2019-08-12 12:04:10
发布于 2019-08-12 12:04:10
1.6K0
举报
文章被收录于专栏:JAVAandPython君JAVAandPython君
喜欢就关注我们吧!

JAVAandPython君

本文来自“小震同学”公众号投稿


区块链这个名词,大家都不陌生,那么区块链的本质究竟是什么?有人说区块链是下一代的价值互联网;也有人说它是世界上最慢的数据库。的确,如果把它当数据库用的话是非常的慢,而且仅仅只能实现数据库中的一小部分功能。

可以说区块链这项技术是饱受争议,有人把它捧上了天,将其与工业革命相提并论,说它是像蒸汽机一样的伟大发明;也有很多贬低区块链的,将它说成是庞氏骗局。但无论是哪种说法,真正懂区块链的人是不多的,很多人其实只是在讨论区块链的商业模式,而且有的商业模式和区块链的本质其实并没有什么关系。

虽然从比特币的价格走势来看,现在似乎已经错过了比特币暴涨的好时候,但实际上,从区块链的整体发展来看,现在还是处于非常早期的阶段,所以从现在开始学习的话,可以说是这个领域的先行者了。而且,区块链不等于比特币,比特币只是基于区块链技术的一种加密货币而已,千万不要被比特币限制了想象力!

学习前提:学习的前提是已经学过基本的数据结构和算法,掌握了基本的编程技能

参考资料

  • BitCoin and Cryptocurrency Technologies
  • 以太坊白皮书、黄皮书、源代码
  • Solidity文档

比特币中用到的密码学原理

比特币被称作是加密货币,但实际上加密货币是不加密的,区块链上所有的交易内容都是公开的,包括账户的地址、转账的金额等等。比特币中主要用到密码学中的两个内容:哈希签名

哈希

密码中的哈希函数被称作:cryptographic hash function,它有两个重要的性质:collision resistance和 hiding 。

collision resistance

其中的collision是指哈希碰撞,什么是哈希碰撞?

若有哈希函数H(),假设两个输入 x , y 且 x 不等于 y ,使得H(x) = H(y),则称为哈希碰撞。

collision resistance 的解释是:Collision resistance is a property of cryptographic hash functions: a hash function H is collision resistant if it is hard to find two inputs that hash to the same output; that is, two inputs a and b such that H(a) = H(b), and a ≠ b.

it is hard to find 意思是很难找到两个不同的输入使得二者的哈希值相等,也就是说想要人为地制造哈希碰撞是非常难的,但哈希碰撞是客观存在的,例如当我们使用哈希表的时候,不同的输入可能会被映射到哈希表中的同一个位置,因为输入空间大于输出空间。

那么collision resistance这个性质有什么用呢?

它可以用来对一个massage求digest,例如有一个massage m ,取它的哈希值H( m )作为digest 用来检测m是否被篡改,因为当m被篡改时,它所对应的哈希值H(m)就会发生变化,而根据collision resistance性质可以知道,很难找到另一个输入m ' 使得H( m ' ) =H( m ),因此想要篡改内容而不被检测出来几乎是不可能的。

举个例子:你想要把一个文件存到云存储服务上,当你某一天要用需要下载回来的时候,如何确定下载的文件就是当初保存的那份文件呢?这时就可以用到哈希函数的collision resistance性质,在上传的时候用文件的内容作为输入算一个哈希值出来,保存到本地,将来取文件的时候再算一个哈希值出来,与原先本地的哈希值进行比较,如果一致则说明文件没有被篡改。

但需要注意的是,哈希函数的 collision resistance 这一性质从理论上是无法证明出来的,它是由实践经验得出的,而有的哈希函数则可以人为地制造哈希碰撞,很著名的一个例子就是MD5,它之前是一个很流行的哈希函数,当初人们认为它很安全,但是现在已经能够人为地制造哈希碰撞了。

hiding

这一性质是指哈希函数的计算过程是单向的、不可逆的。

意思是给定一个输入 x ,可以算出它的哈希值H(x),但无法根据哈希值H(x)反推出原来的输入x ,也就是说,哈希值H(x)没有泄露有关输入 x 的任何信息。

但是仔细一想,真的就没有办法通过H(x)反推出 x 吗?其实是可以通过蛮力求解的方法得出输入 x 的,只要把输入所有可能的取值遍历一遍,将每一个取值的结果与目标H(x)作比较,直到找到相同的结果就可以知道对应的输入了。

因此,hiding这一性质成立的前提是输入空间要足够的大,使得上述这种蛮力求解的方式行不通,而且输入的分布要比较均匀,各种取值的可能性是差不多的。这一点很好理解,因为即使输入空间足够大,但是如果常用的输入都比较集中在某一些值,那么也是可以通过蛮力破解的。

hiding这一性质有什么用呢?

hiding可以和collision resistance 这一性质结合在一起用来实现 digital commitment,有时候也把它称作 digital equivalent of a sealed envelope,直译过来可以理解为 数字加密信封。

举个例子来说明下sealed envelope(加密信封)在现实生活中的意义:比方说有一个人,他想要预测第二天的股票是否会涨,那么如何来证明他的预测是否是准确的呢?

一种方法是,他提前一天对外公布第二天的某某股票会涨,等到第二天的结果出来后再判断他的预言是否准确,那么这种方法是否存在问题呢?如果这个人是股票界的权威人士,那么他的预测势必会直接影响到第二天股票是否会涨,可能使得原本不会涨的股票反倒涨了。

这说明预测结果不能公开,那如果预测结果不公开,等到第二天结果出来后再公开,那又如何保证预测的结果是否被篡改过呢?这就需要用到sealed envelope,将预测结果写下来,放入一个信封,把信封交由第三方公证机构保管,等到第二天结果出来后再验证预测是否准确。这就是现实生活中sealed envelope的用处。

那在电子世界中,如何实现一个digital sealed envelope呢?

将预测结果作为输入 x 算出一个哈希值,将这个哈希值公布出去,由于hiding这个性质,只知道公布的哈希值是无法反推出输入,也就是预测结果;而又由于collision resistance性质,使得输入无法被篡改,因为输入一旦篡改,得出的哈希值就会和当初公布的不一样。这就起到了digital sealed envelope的功能。

但在实际操作中有一些细节需要注意,因为hiding性质的前提是输入空间要足够大,分布要比较均匀,而在上述股票预测的例子中,它的输入空间却不是足够大,因为股票的支数是有限的。常用的解决方法是:在输入后面拼接一个随机数作为整体取哈希,来保证拼接之后的输入足够随机,分布足够均匀。

puzzle friendly

在比特币中,除了用到上述两个性质之外,还要求第三个性质:puzzle friendly

它的意思是,哈希值的计算事先是不可预测的。光看输入很难猜出最后的输出是什么,所以当想要算出来的哈希值是落在某个范围之内(target space),那就只能一个一个地算,没有其他的捷径。例如:想要得到一个256位哈希值,前面k位都是0,什么样的输入能算出这样的哈希值?唯一的办法就是一个一个试,直到试出某个输入符合要求。

后面讲到的比特币挖矿的过程就是基于这样的一个原理。挖矿实际上就是找一个随机数nonce,它和区块块头(block header)中的信息合在一起作为输入取哈希,使得得出的哈希满足某一个条件。由于只能一个一个随机数去试,因此挖矿的过程才能用来作为工作量证明(proof of work)。

虽然挖矿的过程需要很大的工作量才能找到符合条件的nonce,但是一旦有一个人找到了这个nonce,将它公布出去后,其他人要验证它是否符合要求很容易的,只需要进行一次哈希运算就可以了,这一性质叫做difficult to solve,but easy to verify 。

比特币中用的哈希函数叫SHA-256,上述的三个性质它都满足。

签名

介绍签名之前需要先了解一下比特币系统中的账户管理,在日常生活中,如果想要开一个账户,我们需要带上证件去银行办理开户手续,这就是中心化系统的账户管理方式。而比特币是去中心化的,没有类似于银行这样的机构。那如何进行账户管理呢?

每一个用户自己决定是否开户,不需要任何人批准,开户的过程很简单,就是在本地创立一个公钥和私钥的对:(public key , private key ),这个公私钥对就代表了一个账户,公钥是公开的,私钥是只有自己知道的。公私钥这个概念来源于非对称加密体系(asymmetric encryption algorithm)

在说非对称加密之前先来将一下对称加密(symmetric encryption algorithm),比如:小A要将信息传给小B,但是通讯的网络是有可能被窃听的,为了解决这一问题,小A和小B事先商量好一个秘钥encryption key,小A用秘钥将信息加密传给小B,小B收到信息后再用这个秘钥进行解密,因为加密解密用的是同一个秘钥,所以称为对称加密。但是这样做的前提是小A小B之间要有足够安全的通信渠道,来保证秘钥的传输,显然这是对称加密的一个不足之处。

为了解决这个问题,非对称加密就被提了出来:用公钥加密,用私钥解密。这时候,小A传信息给小B时,需要用小B的公钥对信息进行加密,小B收到信息后用自己的私钥进行解密。也就是加密和解密用的都是接收方的公钥和私钥。由于公钥是公开的,发信息时只需要知道对方的公钥,而私钥不需要彼此透明,因为它是用来解密的。因此这就解决了对称加密中秘钥分发存在的安全问题。

在比特币系统中,创立账号只需要一对公私钥,公钥可以理解为银行账户,而私钥则是账户的密码,密码是只有你自己知道的,别人给你转账时只需要知道你的公钥。

假设这样一个场景:某一天,小A转了10个比特币给小B,然后广播到区块链上,那其他人怎么知道这笔交易确实是小A操作的呢,会不会是有其他人冒名顶替?这时候就需要用到公私钥了,为了解决这个问题,小A需要在发布交易的时候用自己的私钥对这笔交易进行签名,其他人收到交易的信息之后用小A的公钥验证这笔交易签名的正确性,来确定这笔交易就是小A操作的。

看到这里,有人可能就会有疑问了,既然每个人都能生成自己的公私钥对,那会不会出现两个人生成的公私钥对恰好相同呢?实际上,这种可能性是微乎其微的,即使你有一台超级计算机,每天啥事不干,就去产生公私钥对,也几乎不可能产生同样的公私钥对。这里需要强调的是,产生公私钥的时候需要有一个好的随机源(a good source of randomness),如果随机源不好的话,就有可能出现两个人生成的公私钥对相同的情况。比特币中用到的签名算法,不光是生成公私钥的时候要有好的随机源,之后的每一次签名也要有好的随机源,否则就有可能泄露私钥。

比特币系统当中,哈希和签名是结合起来用的,一般是对一个massage取哈希,再对这个哈希值签名。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-08-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python进击者 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
区块链学习笔记之密码学原理
crypto-currency 加密货币,加密货币实际上是不加密的,因为产生的交易在区块链中都是公开的。
张宗伟 plus
2023/01/04
4920
BTC-密码学原理
1.密码学中用到的哈希函数被称为cryptographic hash function: 它有两个重要的性质:
yuanshuai
2023/11/17
4260
由比特币说起 - 区块链的前世今生及未来趋势
摘要 比特币越来越火,虽在国内尚不属于合法货币,但仍未能阻止人们火热的投资热情,也由此引发了人们对区块链的关注及重视。区块链(也包括比特币)做为源于开源社区的一项技术性创新,却由于去中心化的特点,已然形成一种文化。影响力也超越了技术本身。那么,比特币是什么?它是怎么出现的?现在发展到什么程度了?未来会发展成什么样子?他的技术原理是什么?区块链又是怎么回事?它的技术原理又是什么?为什么会得到了众多政府、机构、企业、个人的关注和青睐。凯文凯利曾说过:未来已经到来,只是尚未流行。欢迎大家一起来感受区块链的前世今生
IT大咖说
2018/04/04
8390
区块链基础知识与关键技术
最近在上 HKU 的<COMP7408 Distributed Ledger and Blockchain Technology>课程,对区块链的基础概念有了更系统的认知,结合之前上过的北京大学肖臻老师《区块链技术与应用》公开课,深知区块链知识体系之庞大,打算更新系列文章对区块链、比特币、以太坊等进行系统的知识梳理,如有错漏,欢迎交流指正。
pseudoyu
2023/04/11
7570
区块链基础知识与关键技术
揭秘区块链的核心技术之「哈希与加密算法 」
大家都知道,区块链的关键技术组成主要为:P2P网络协议、共识机制、密码学技术、账户与存储模型。而这些技术中,又以 密码学与共识机制 这两点为最核心。那么今天我们来详细的聊一聊密码学,看一看密码学技术是如何在区块链中应用的。
奎哥
2018/08/31
9400
揭秘区块链的核心技术之「哈希与加密算法 」
比特币入门教程
比特币(bitcoin)诞生于2008年的一篇论文。 一个署名为中本聪的人,提出了革命性的构想:让我们创造一种不受政府或其他任何人控制的货币!这个想法堪称疯狂:一串数字,背后没有任何资产支持,也没有任
wangxl
2018/03/09
8991
比特币入门教程
让入门者也能开明白的区块链讲解三
我们前面简单的了解了下什么是区块链,那么我们现在整体来看下具体区块链的定义: 区块链技术是一个保证了最终一致性的数据库 。说是数据库因为在区块链上我们的数据是保存在节点上的,数据存储在数据节点上相当于我们说的数据库。数据保持一直是我们在每个节点的上的数据交换都不会进行篡改,并且每个节点都会同步数据。保证数据的有效性。 从数据结构上来说是基于时间序列的链式数据块结构。 从节点图上来看,节点都是互相冗余备份。冗余备份:每个节点上都会有相同的数据备份。 才操作上看。是建立在密码学的公私钥管理体系管理账户的
用户2196435
2018/07/19
3260
区块链的加密技术
数字加密技能是区块链技能使用和开展的关键。一旦加密办法被破解,区块链的数据安全性将受到挑战,区块链的可篡改性将不复存在。加密算法分为对称加密算法和非对称加密算法。区块链首要使用非对称加密算法。非对称加密算法中的公钥暗码体制依据其所依据的问题一般分为三类:大整数分化问题、离散对数问题和椭圆曲线问题。
v-longbatuiguang2
2022/05/06
2.1K0
区块链的加密技术
区块链核心技术-密码学
大家好,首先感谢腾讯云提供云社区这样一个让技术人员沟通交流的平台,其次很高兴入驻到云+社区认识到大家,我是腾讯云TVP一员,专注于云计算、区块链、Web架构方向,myPagination作者,Github也开源了很多区块链的项目:https://github.com/linapex,有需要的朋友可以下载学习,本文是区块链技术实战系列的第二篇(不定期更新):
linapex
2019/03/22
12K0
区块链核心技术-密码学
学习笔记 | 什么是比特币?
1.比特币是一种电子货币,数字货币 2.其来自于中本聪《白皮书》 3.去中心化的电子记账系统,每个人的账本都是公开的 4.每个人的消费账本都会广播给其他所有人(billboard),将账单打包成一个块,就是区块,一块大小大约1M,可以存储4000多条记录,区块连接在一起形成区块链 5.以谁为准?
Justlovesmile
2021/12/13
5960
《区块链:定义未来金融与经济新格局》摘抄笔记第0章 必然的出现第1章 区块链是什么第2章 区块链带来的新机遇第3章 区块链的应用场景第4章 区块链技术原理
前三章是关于区块链的科普文章。最后一章专门涉及技术,最后一章感觉抄了《精通比特币》一书不少内容。 第0章 必然的出现 世界上最早的货币 —— 已知的最早货币:大麦货币。苏美尔人将定量的大麦作为通用单
SeanCheney
2018/04/24
8290
《区块链:定义未来金融与经济新格局》摘抄笔记第0章 必然的出现第1章 区块链是什么第2章 区块链带来的新机遇第3章 区块链的应用场景第4章 区块链技术原理
比特币和区块链(3):比特币的密码学知识之密码学哈希
其中主要原因是密码学知识在比特币的体系架构里扮演了非常重要的角色。接下来我们一起来了解下:密码学哈希
用户1564362
2018/08/17
6460
比特币和区块链(3):比特币的密码学知识之密码学哈希
密码学在区块链中的应用:哈希算法与加密解密算法
安全性是实现区块链系统功能的基础,也是目前阻碍区块链应用推广的因素之一。密码学是信息安全的基石,以很小的代价给信息提供一种强有力的安全保护,广泛应用于政治、经济、军事、外交和情报等重要领域。 随着近年来计算机网络和通信技术迅猛发展,密码学得到了前所未有的重视并迅速普及,同时应用领域也广为拓展。本文选自《商用区块链技术与实践》一书,主要讲解密码学在区块链中的应用。 哈希算法 哈希算法(Hash Algorithms)也称为散列算法、杂凑算法或数字指纹,是可以将任意长度的消息压缩为一个固定长度的消息的算法。哈
博文视点Broadview
2023/05/19
2.8K0
密码学在区块链中的应用:哈希算法与加密解密算法
EKT多链技术谈 | 起源——区块链中的密码学
前言:谈区块链离不开密码学。通常来讲,区块链技术是利用块链式数据结构来验证与存储数据、利用分布式节点公式算法来生成和更新数据、利用密码学的方式保证数据传输和访问的安全、利用由自动化脚本代码组成的智能合约来编程和操作数据的一种全新的分布式基础架构与计算范式。区块链的核心是它按照时间顺序将数据区块以顺序相连的方式组合成的一种链式数据结构,并以密码学方式保证的不可篡改和不可伪造的分布式账本。我们对此做一个总结,可以发现区块链中有四项不可缺的核心技术,分别是分布式存储、共识机制、密码学原理和智能合约。而今天我们将主要从密码学的角度聊一聊区块链的起源问题。
风中凌乱的靓仔
2019/03/22
1.6K0
EKT多链技术谈 | 起源——区块链中的密码学
区块链构架就是造房子!10分钟带你走遍构建全程
2008年,一个叫做中本聪(Satoshi Nakamoto)的人(或团体)定义了第一个区块链。
区块链大本营
2018/08/03
5920
区块链构架就是造房子!10分钟带你走遍构建全程
区块链 | 一文了解比特币的挖矿、矿机—《区块链历史链条》3
区块链从15年火到18年,但是你却对区块链一知半解,小编特打造《区块链历史链条》,将抽象的区块链概念由抽象化解释为形象化,供君参考。 21比特币的数字签名 比特币的数字签名,就是只有比特币转账中转出的人才能生成的,一段防伪造的字符串。通过验证该数字串,一方面证明该交易是转出方本人发起的,另一方面证明交易信息在传输中没有被更改。数字签名由数字摘要和非对称加密技术组成。首先通过数字摘要技术把交易信息缩短成固定长度的字符串,然后用自己的私钥对摘要进行加密,形成数字签名。完成后,需要将完整交易信息和
码神联盟
2018/04/03
3.4K0
区块链技术原理
随着互联网技术的不断发展和应用,数据的数量和价值也在不断增长,然而如何保护数据的安全和隐私,如何有效地管理和交换数据成为了一个日益重要的问题,区块链技术作为一种新兴的分布式数据库技术具有去中心化、安全和透明等特点,在数据管理和交易方面具有广泛的应用前景。本文将从区块链技术的基本概念、工作原理等方面进行介绍和概述,通过对区块链技术的深入了解,读者可以掌握其基本原理和应用方法为未来的区块链技术应用和创新提供帮助和指导
Al1ex
2023/08/10
8660
区块链技术原理
区块链是什么(上)超通俗的区块链入门干货
区块链是比特币的底层技术,不等同于比特币。有人说比特币就是一场泡沫,甚至放话“比特币是传销”。区块链作为继互联网后的新一波技术浪潮,本身无罪,况且炒币只是区块链里最初级的玩法。读完这篇文章,我们就能弄懂大部分区块链基础知识,从而离保守和狭隘远一点。
互链脉搏
2018/05/18
2.7K0
区块链是什么(上)超通俗的区块链入门干货
区块链技术与应用01 北大肖臻
记录一下课程吧。。还是记录以下要好,否则看完了和没看似的。。。。尴尬。。。。。。Fighting!!!!!!
Daffy
2020/11/10
1.1K0
区块链101:比特币交易是如何运作的?
简单的版本: 如果我想把我的一些比特币发送给你,我发布了我的意图,而节点扫描整个比特币网络来验证我是否有我想要发送的比特币,而2)还没有发送给其他人。一旦该信息被确认,我的事务就会被包含在一个“块”中,这个“块”被附加到上一个块中,因此“区块链”这个术语就会被包含进来。事务不能被撤消或篡改,因为它意味着重新执行后面的所有块。 变得有点复杂: 我的比特币钱包实际上并没有持有我的比特币。它所做的是保存我的比特币地址,它记录了我所有的交易,因此我的余额。这个地址——一个长串的34个字母和数字——也被称为我的“
架构师研究会
2018/04/09
1.1K0
区块链101:比特币交易是如何运作的?
推荐阅读
相关推荐
区块链学习笔记之密码学原理
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档