用 Go 构建一个区块链 -- Part 5: 地址 1
想知道更多关于区块链技术知识,请百度【链客区块链技术问答社区】
链客,有问必答!!
比特币地址
这就是一个真实的比特币地址:1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa。这是史上第一个比特币地址,据说属于中本聪。比特币地址是完全公开的,如果你想要给某个人发送币,只需要知道他的地址就可以了。但是,地址(尽管地址也是独一无二的)并不是用来证明你是一个“钱包”所有者的信物。实际上,所谓的地址,只不过是将公钥表示成人类可读的形式而已,因为原生的公钥人类很难阅读。在比特币中,你的身份(identity)就是一对(或者多对)保存在你的电脑(或者你能够获取到的地方)上的公钥(public key)和私钥(private key)。比特币基于一些加密算法的组合来创建这些密钥,并且保证了在这个世界上没有其他人能够取走你的币,除非拿到你的密钥。下面,让我们来讨论一下这些算法到底是什么。
公钥加密
公钥加密(public-key cryptography)算法使用的是成对的密钥:公钥和私钥。公钥并不是敏感信息,可以告诉其他人。但是,私钥绝对不能告诉其他人:只有所有者(owner)才能知道私钥,能够识别,鉴定和证明所有者身份的就是私钥。在加密货币的世界中,你的私钥代表的就是你,私钥就是一切。
本质上,比特币钱包也只不过是这样的密钥对而已。当你安装一个钱包应用,或是使用一个比特币客户端来生成一个新地址时,它就会为你生成一对密钥。在比特币中,谁拥有了私钥,谁就可以控制所以发送到这个公钥的币。
私钥和公钥只不过是随机的字节序列,因此它们无法在屏幕上打印,人类也无法通过肉眼去读取。这就是为什么比特币使用了一个转换算法,将公钥转化为一个人类可读的字符串(也就是我们看到的地址)。
如果你用过比特币钱包应用,很可能它会为你生成一个助记符。这样的助记符可以用来替代私钥,并且可以被用于生成私钥。BIP-039 已经实现了这个机制。
好了,现在我们已经知道了在比特币中证明用户身份的是私钥。那么,比特币如何检查交易输出(和存储在里面的币)的所有权呢?
数字签名
在数学和密码学中,有一个数字签名(digital signature)的概念,算法可以保证:
当数据从发送方传送到接收方时,数据不会被修改;
数据由某一确定的发送方创建;
发送方无法否认发送过数据这一事实。
通过在数据上应用签名算法(也就是对数据进行签名),你就可以得到一个签名,这个签名晚些时候会被验证。生成数字签名需要一个私钥,而验证签名需要一个公钥。签名有点类似于印章,比方说我做了一幅画,完了用印章一盖,就说明了这幅画是我的作品。给数据生成签名,就是给数据盖了章。
为了对数据进行签名,我们需要下面两样东西:
1.要签名的数据
2.私钥
应用签名算法可以生成一个签名,并且这个签名会被存储在交易输入中。为了对一个签名进行验证,我们需要以下三样东西:
1.被签名的数据
2.签名
3.公钥
简单来说,验证过程可以被描述为:检查签名是由被签名数据加上私钥得来,并且公钥恰好是由该私钥生成。
用 Go 构建一个区块链 -- Part 5: 地址 1相关推荐
- 用Go 构建一个区块链 -- Part 5: 地址
链客,专为开发者而生,有问必答! 此文章来自链客区块链技术问答社区,未经允许拒绝转载. 比特币地址 这就是一个真实的比特币地址:1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa.这 ...
- 用 Go 构建一个区块链 -- Part 5: 地址
翻译的系列文章我已经放到了 GitHub 上:blockchain-tutorial,后续如有更新都会在 GitHub 上,可能就不在这里同步了.如果想直接运行代码,也可以 clone GitHub ...
- 通过python构建一个区块链来学习区块链
了解区块链Blockchains如何工作的最快方法就是构建一个区块链.你来到这里是因为,和我一样,你对加密钱币的崛起感到很兴奋.而且你想知道区块链是如何工作的,想了解它们背后的基本技术. 但理解区块链 ...
- php构建一个区块链(含源码)
php构建一个区块链(含源码) 我们要用PHP编程语言构建区块链,区块链本身就是一个非常简单的概念,它是一个非常简单的数据结构,数字货币是很复杂,但区块链不是,它们复杂的原因是共识算法,挖矿机制和运行 ...
- 用 Go 构建一个区块链 -- Part 7: 网络
翻译的系列文章我已经放到了 GitHub 上:blockchain-tutorial,后续如有更新都会在 GitHub 上,可能就不在这里同步了.如果想直接运行代码,也可以 clone GitHub ...
- 用 Go 构建一个区块链 -- Part 6: 交易(2)
翻译的系列文章我已经放到了 GitHub 上:blockchain-tutorial,后续如有更新都会在 GitHub 上,可能就不在这里同步了.如果想直接运行代码,也可以 clone GitHub ...
- 用 Go 构建一个区块链 -- Part 3: 持久化和命令行接口
翻译的系列文章我已经放到了 GitHub 上:blockchain-tutorial,后续如有更新都会在 GitHub 上,可能就不在这里同步了.如果想直接运行代码,也可以 clone GitHub ...
- 用 Go 构建一个区块链 ---- Part 1: 基本原型
翻译的系列文章我已经放到了 GitHub 上:blockchain-tutorial,后续如有更新都会在 GitHub 上,可能就不在这里同步了.如果想直接运行代码,也可以 clone GitHub ...
- 用 Go 构建一个区块链 -- Part 1: 基本原型
引言 区块链是 21 世纪最具革命性的技术之一,它仍然处于不断成长的阶段,而且还有很多潜力尚未显现出来. 本质上,区块链只是一个分布式数据库而已. 不过,使它独一无二的是,区块链是一个公开的数据库,而 ...
最新文章
- pandas.core.frame.DataFrame是什么数据结构,为什么要如此取值 [ ]中嵌套[ ]
- 科普|深度解析5G与未来天线技术
- HDU2018 母牛的故事
- VS2008资源问题解决方法
- windows 下怎样利用NET-SNMP 发送和接收trap
- NOI[2001]食物链
- 动态区间第k小:树状数组套权值线段树
- JavaScript Iframe富文本编辑器中的光标定位
- 多线程导出excel高并发_大牛带你深入java多线程与高并发:JMH与Disruptor,确定能学会?...
- 如何拿到半数面试公司Offer——我的Python求职之路
- oracle成本抛转,抛砖引玉:CBO成本计算初探
- 使用bind构建本地简易dns服务器
- 就等android了
- 目录_计算机视觉——算法及应用
- 数据结构c语言版严蔚敏第二版课后答案
- (转)Windows 批处理(bat)语法大全
- 大数据本质是什么,基础理论应该怎么理解?
- android版youtube最新版下载,youtube安卓版
- 计算机用户接入广域网的技术,广域网接入技术
- 基于[三星6818]I2C驱动开发的0.96寸oled屏
热门文章
- 云计算背后的秘密(3)-BigTable
- 修改 pip 下载源
- 都在抢论文第一作者,如何处理?
- 转载:opencv错误rect错误
- rsatool使用步骤图解_图解360系统重装大师如何使用
- 北斗导航 | 卫星导航基础知识(坐标系)
- 频谱分析:基于python画出时域频域波形
- 样机模型尺寸怎么改_土耳其五代机全尺寸样机模型首次亮相巴黎航展,这不是玩票,是一架认真设计的五代机!...
- 科学计算机要用的电池是几号,科学计算器的常识及注意事项
- 用python定位手机_使用Python定位android和iphone