链客,专为开发者而生,有问必答!

此文章来自链客区块链技术问答社区,未经允许拒绝转载。


比特币地址

这就是一个真实的比特币地址: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: 地址

    翻译的系列文章我已经放到了 GitHub 上:blockchain-tutorial,后续如有更新都会在 GitHub 上,可能就不在这里同步了.如果想直接运行代码,也可以 clone GitHub ...

  2. 用 Go 构建一个区块链 -- Part 5: 地址 1

    想知道更多关于区块链技术知识,请百度[链客区块链技术问答社区] 链客,有问必答!! 比特币地址 这就是一个真实的比特币地址:1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa.这是史 ...

  3. 通过python构建一个区块链来学习区块链

    了解区块链Blockchains如何工作的最快方法就是构建一个区块链.你来到这里是因为,和我一样,你对加密钱币的崛起感到很兴奋.而且你想知道区块链是如何工作的,想了解它们背后的基本技术. 但理解区块链 ...

  4. php构建一个区块链(含源码)

    php构建一个区块链(含源码) 我们要用PHP编程语言构建区块链,区块链本身就是一个非常简单的概念,它是一个非常简单的数据结构,数字货币是很复杂,但区块链不是,它们复杂的原因是共识算法,挖矿机制和运行 ...

  5. 用 Go 构建一个区块链 -- Part 7: 网络

    翻译的系列文章我已经放到了 GitHub 上:blockchain-tutorial,后续如有更新都会在 GitHub 上,可能就不在这里同步了.如果想直接运行代码,也可以 clone GitHub ...

  6. 用 Go 构建一个区块链 -- Part 6: 交易(2)

    翻译的系列文章我已经放到了 GitHub 上:blockchain-tutorial,后续如有更新都会在 GitHub 上,可能就不在这里同步了.如果想直接运行代码,也可以 clone GitHub ...

  7. 用 Go 构建一个区块链 -- Part 3: 持久化和命令行接口

    翻译的系列文章我已经放到了 GitHub 上:blockchain-tutorial,后续如有更新都会在 GitHub 上,可能就不在这里同步了.如果想直接运行代码,也可以 clone GitHub ...

  8. 用 Go 构建一个区块链 ---- Part 1: 基本原型

    翻译的系列文章我已经放到了 GitHub 上:blockchain-tutorial,后续如有更新都会在 GitHub 上,可能就不在这里同步了.如果想直接运行代码,也可以 clone GitHub ...

  9. 用 Go 构建一个区块链 -- Part 1: 基本原型

    引言 区块链是 21 世纪最具革命性的技术之一,它仍然处于不断成长的阶段,而且还有很多潜力尚未显现出来. 本质上,区块链只是一个分布式数据库而已. 不过,使它独一无二的是,区块链是一个公开的数据库,而 ...

最新文章

  1. Centos7 上安装 redis5.0.5
  2. Android的一个关于Activity和UI的小程序
  3. FAGLFLEXA 表和 BSEG 表有什么区别
  4. [云炬创业基础笔记]第九章企业的法律形态测试4
  5. JZOJ__Day 3:【NOIP普及模拟】数数(count)
  6. J2EE从头开始__EJB3
  7. 【SpringBoot的坑】Restful请求报错Request method 'POST' not supported,HiddenHttpMethodFilter无法将POST转换为PUT原因分析
  8. mysql查看binlog_MySQL的binlog数据如何查看
  9. ggeditor推动_谁推动了特殊招聘的文化?
  10. jQuery LigerUI 使用教程表格篇(1)
  11. 苹果或将推中国特色版iPhone 削掉了Face ID改用屏幕指纹
  12. [VBA]VBA编写的时光倒流软件
  13. 上传项目源码至Nexus私服
  14. 为什么要学习现代控制理论(机器人方向)?
  15. 2021年全国省市区街道代码自动同步(包含解决方案)
  16. 非服务器模式下运行getImageData函数出现 the operation is insecure
  17. godaddy域名转入步骤
  18. 计算机基础知识 pdf答案,计算机基础知识试题及答案(一).pdf
  19. 考过证券从业资格证的朋友们用的什么APP呢?
  20. python简易爬虫获取A股上证所有股票历史数据

热门文章

  1. 用Java中的HashSet写一个学生管理系统(添加、删除、修改、查询学生信息)
  2. Java中父类构造方法对子类构造方法的影响(不是一句话可以说清的)
  3. switch的case使用数组C语言,使用常量数组的元素作为switch语句中的case
  4. 办公室自动化系统_信息化管理建设 公司办公室用自动盖章机贵吗?
  5. 【系列】EOS开发3 EOS提供的程序和工具
  6. bzoj 4025 二分图——线段树分治+LCT
  7. RN Exception: Before building your project, you need to accept the license agreements and comp le...
  8. PHP如何更好的利用PHPstorm的自动提示
  9. Redis主从复制配置
  10. 破解CentOS的root密码(救援模式无密码)