比特币中的密码学详解

96
勇Max
2018.08.08 23:21* 字数 1132
image.png

上图描述了密码学的全部分类,以及其对应解决的信息安全分类。

比特币中涉及的密码学知识有:

  • SHA-256(哈希函数)
  • RIPEMD-160(哈希函数)
  • Base58 Encode
  • Base58Check Encode
  • Elliptic Curve

1. 私钥、公钥、钱包地址

私钥是一个256bits的二进制随机数。
私钥通过椭圆曲线乘法这个单向加密函数产生一个公钥;公钥再通过SHA256和RIPEMD160进行double hash产生比特币钱包地址。
私钥、公钥、钱包地址之间的关系如下图所示:


私钥、公钥、钱包地址

公钥产生钱包地址:
分为两步。


1.公钥哈希

2.公钥哈希编码为钱包地址

关于SHA256可以参考:
https://blog.csdn.net/u011583927/article/details/81432863
SHA256简单概括,包括三个部分:

  1. 常量的初始化

SHA256算法中用到了8个哈希初值以及64个哈希常量
这些初值是对自然数中前8个质数(2,3,5,7,11,13,17,19)的平方根的小数部分取前32bit而来

  1. 信息预处理

SHA256算法中的预处理就是在想要Hash的消息后面补充需要的信息,使整个消息满足指定的结构。

信息的预处理分为两个步骤:附加填充比特和附加长度

  1. 使用到的逻辑运算

SHA256散列函数中涉及的操作全部是逻辑的位运算

2. 非对称加密

在比特币系统中,我们使用公开密钥加密(非对称加密)创建一个密钥对来控制比特币的获取。这个密钥对包含了一个私钥和一个(由私钥导出的唯一)公钥。公钥被用来接收款项,私钥被用来签署一笔交易来花费比特币。

2.1 椭圆曲线算法

https://blog.csdn.net/u011583927/article/details/81432863

2.2 RSA算法

https://blog.csdn.net/u011583927/article/details/81432863

2.3 数字签名

比特币系统中,一笔交易归属以及真伪的验证使用了数字签名技术。

数字签名指的是对一段信息制作签名表示对其的认可,这个认可只对该信息有效,并且第三方无法根据该签名构造你对其他信息的签名。数字签名方案包括:
生成公钥私钥对,私钥用于签名,必须安全保存;公钥可以公开,用于他人验证签名有效性

把信息和私钥作为输入,输出即为签名

使用公钥,信息和签名作为输入,进行验证

在实践中,我们往往通过对哈希值进行签名,这样可以实现对任意长度信息的签名。

详细过程可以阅读What is a Digital Signature?

以及非对称加密概述中的数字签名部分

2.4 数字证书

数字证书是非对称加密的又一个重要应用,据我所知在比特币系统中并没有直接应用。但也确实是个重要的概念,作为链圈币圈的人,如果感兴趣不妨了解下什么是数字证书?

推荐看这篇文章数字证书原理,讲的很清晰

3. Base58编码

Base58编码在比特币的密钥和地址的编码中被广泛使用,用来增强密钥或地址的可读性以及防止传输或转录过程中发生错误。


image.png

3.1 Base58 Encode

Base58是用于Bitcoin中使用的一种独特的编码方式,主要用于产生Bitcoin的钱包地址。

Base58是在base64编码的基础上得到的,去掉了容易混淆的字母(不使用数字”0”,字母大写”O”,字母大写”I”,和字母小写”l”),以及影响双击选择字符串的字母(”+”和”/”符号)。

我们首先要需要了解什么是Base64编码

wiki : base64

Base64笔记(阮一峰的网络日志)

然后再来学习base58编码

wiki : base58

learn me a bitcoin : Base58

3.2 Base58Check Encode

而 Base58Check 编码其实就是在Base58编码的基础上,添加了校验的过程。流程并不复杂,如下图所示:

image.png

其实上图已经将 Base58Check 编码的过程描述清楚了,更多的细节请参考:

bitcoinwiki : Base58Check encoding

区块链
Web note ad 1