本文作者:长衣貌,曾供职于法国兴业银行,现于美资摩字投行交易部任职

之前的一期我们挖下了比特币加密的坑。谈到了“私钥”和“公钥”,却没有仔细讲过。那么在今天这期,我们就结合密码学的一些知识来聊一聊比特币的加密。

01

数字签名

日常生活中,假如我们想用支付宝来购买一些产品,我们可以选择刷脸或者使用指纹来认证这个支付动作是由我们自己发起的。如果是用银行卡来支付,我们则可以用签名来认证。但这些传统的认证方式在比特币的电子支付系统里并不安全的,因为无论是人脸、指纹还是签名都可以在计算机系统里进行拷贝,从而伪造身份进行验证。

于是为了解决这个问题,比特币的支付系统采用了“数字签名”。

02

“私钥”、“公钥”和“地址”都是什么?

了解比特币交易的人可能都听说过“私钥”、“公钥”和“地址”。但它们究竟是什么呢?

在中本聪的设计里,比特币用户在注册时,会生成一个32byte的随机数作为用户的“私钥”。这个“私钥”是要严格保密的(我们可以将它想象成我们银行账户的密码,绝对不可以泄露,不然账户里的比特币就全部遗失了)。

紧接着,利用这个“私钥”经过椭圆曲线加密算法便得到了我们的“公钥”。再接下来,通过4次哈希运算和1次Base58编码便得到了我们的“地址”(“地址”我们可以理解为我们银行的账户号码)。而“公钥”和“地址”则是可以对外公开的。

看到这里大家可能有些懵了,“椭圆曲线加密算法”、“哈希运算”和“Base58编码”都是些什么啊?其实大家不必纠结于此,只要记得“私钥”是我们注册账户时给的,“公钥”是由“私钥”生成的(且由“公钥”反推不到“私钥”),而“地址”则是由“公钥”生成的,就足够了。

私钥”和“公钥”的用途如下:

1. “私钥”可以对信息进行加密

2. “公钥”则可对这个加密后的信息进行解密

这种加密和解密需要不同钥匙的加密方法则被称为“非对称加密”。

03

“私钥”、“公钥”和“地址”又是怎样运作的呢?

简单地讲,假如我们要给别人转比特币的话,我们就需要将我们的“公钥”和“地址”发给对方;假如我们要从对方处收款,我们则需将我们的“地址”发给付款方。这里值得注意的是,我们的“私钥”在交易过程中从来没有公开过。

接下来我们就用一个具体的例子来详细说明一下三者的运作过程。

我们假设甲要付给乙10个比特币。那么甲就要:

1. 甲要写一条“记录”:甲付给乙10个比特币。

2. 甲要对这个“记录”进行“数字摘要”,即运用SHA256运算将这个“记录”转换成一条“数字摘要”。

3. 甲要运用自己的“私钥”对这个“数字摘要”进行加密,形成“密码”。

这样子,这次交易的加密过程就告一段落了。

那么其他人要如何“认证”这个交易呢?

首先,甲就需要将“甲付给乙10个比特币”这条“记录”进行全网广播。广播的同时,甲也要将自己的“公钥”和第3步形成的“密码”告知全网。

当比特币矿工们得知这样的“记录”时,他们便可以自己将这条“记录”进行SHA256运算得到一个“数字摘要”。另一方面,矿工们也会用甲广播的“公钥”对甲发布的“密码”进行解密。解密后,矿工们便得到了另一个“数字摘要”。

假如这两次得到的“数字摘要”是一样的,那么比特币矿工们就可以对这条交易进行“认证”;反之,假如两次得到的“数字摘要”是不同的,比特币矿工们则会抛弃这条交易。这是因为,只有用甲的“私钥”才能将这个“数字摘要”生成这样一个特殊的“密码”;说这个“密码”特殊是因为它又可以被甲的“公钥”解密还原成原本的这个“数字摘要”。两次的“数字摘要”一样也就间接说明广播这条“记录”的人有甲的“私钥”,而“私钥”又是保密的,那么这个人就可以被认为是甲。

以上的过程就是我们之前提到的比特币的“数字签名”。而其实我们平时生活中用到的银行卡,好多时候也是利用这种方式进行电子签名。

(图片来自网络,侵权即删)

sha256加密_比特币入门(五):比特币的加密相关推荐

  1. mysql5.7.16 表空间加密_技术分享 | InnoDB 表空间加密

    本文目录: 一.表空间加密概述 应⽤场景 加密插件 加密限制 注意事项 二.加密表空间 安装加密插件 配置表空间加密 查看表空间被加密的表 三.更新 master encryption key 四.导 ...

  2. 配置加密_数据库密码配置项都不加密?心也太大了!

    先看一份典型的配置文件 ... 省略 ... ## 配置MySQL数据库连接spring.datasource.driver-class-name=com.mysql.jdbc.Driversprin ...

  3. 郁金香汇编代码注入怎么写看雪_汇编语言入门五:流程控制(一)

    回顾 前面说到过这样几个内容: 几条简单的汇编指令 寄存器 内存访问 对应到C语言的学习过程中,无非就是这样几个内容: 超级简单的运算 变量 好了,到这里,我们继续接下来的话题,程序中的流程控制. 文 ...

  4. 数据存储加密和传输加密_将时间存储网络应用于加密预测

    数据存储加密和传输加密 I'm not going to string you along until the end, dear reader, and say "Didn't achie ...

  5. ubuntu取消主目录加密_如何在Ubuntu上恢复加密的主目录

    ubuntu取消主目录加密 Access an encrypted home directory when you're not logged in – say, from a live CD – a ...

  6. mysql实现内容加密_简单为mysql 实现透明加密方法

    一般用户在数据库中保存数据,虽然数据库存储的是二进制,无法直接明文打开查看,但是如果是一个外行人,直接连接进入mysql中,还是可以直接查看数据的. 所以对于一些核心数据,特别是企业重要数据资产,一般 ...

  7. js对本地文件进行加密_怎么对电脑文件进行加密

    怎么保护电脑文件安全 禁止修改计算机文件内容?如何保护计算机电脑文件的安全,防止电脑文件被意外修改呢?背景电脑中的重要文件,甚至是局域网共享的文件夹,我们有必要保护其电脑文件的完整性,防止被恶意修改, ...

  8. java简单对称加密_聊聊java中的对称加密机制

    对数据的加密算是一个老生常谈的话题了,加密的方式很多,java也为这些加密算法提供了支持.今天就来聊聊对称加密算法的java实现方式.本文对加密算法不了解也没关系,我会从0开始讲解,保证小白也能看懂. ...

  9. java调用微信加密_微信登录授权, 并且解密加密内容获取手机号和地区

    所使用的的依赖 org.springframework.boot spring-boot-starter-web 2.3.7.RELEASE org.apache.httpcomponents htt ...

  10. 【转载】比特币入门教程

    作者: 阮一峰 原文地址:www.ruanyifeng.com/blog/2018/01/bitcoin-tutorial.html 推荐搜索上面链接,查看原文! 比特币(bitcoin)诞生于200 ...

最新文章

  1. 素数c语言k1k2,1.编写一程序,输入两个整数k1,k2,(k1k2)。求出k1,k2间的素数...
  2. 有道翻译蛋的进阶:丁磊为其加冕称“王”
  3. 一个模型通杀8大视觉任务,一句话生成图像、视频、P图、视频处理...都能行 | MSRA北大出品...
  4. 汇编: dup伪指令
  5. Qt Creator造型Modeling
  6. Android对话框dialog大全
  7. 前端学习(2011)vue之电商管理系统电商系统之初步使用upload上传组件
  8. pyecharts anaconda_Pyecharts安装使用和绘图案例
  9. linux下的shell多线程用法,shell多线程操作
  10. linux安装cd dev ls,linux 第一节 安装
  11. 微信小程序轮播图(详细)
  12. Seaweedfs上传大文件_large file
  13. Hyper-V虚拟机网络配置
  14. webdriver中的等待——主要讲解WebDriverWait()
  15. 春运浙江运送旅客量将达1.38亿人次 同比下降3.4%
  16. 排列组合|分组和分配问题
  17. 17964 水桶打水
  18. 随机生成1万个随机姓名与密码存入txt文本中
  19. 粒度语义感知表示增强的自监督单目深度估计 Fine-grained Semantics-aware Representation Enhancement
  20. 毕业设计 深度学习 机器视觉 人脸识别系统 - opencv python

热门文章

  1. 一条语句引发的思考:装箱和拆箱,空指针的类型转换
  2. 第一部分 1.2 定义OC的类和创建OC的对象
  3. JS 回调(CallBack)
  4. 【工具推荐】光影魔术手
  5. Deep Learning经典论文列表(Reading List)
  6. 基于GEE平台实现湖泊水位与水体面积关系分析
  7. 在Vue项目中引入echarts图表的方法(引入cdn)
  8. android 7相机拍照功能介绍,android7 相机拍照流程
  9. C语言中的`sprintf`和`sscanf`两个函数介绍
  10. 题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?