主页 > imtoken安卓官方下载 > 比特币所依赖的技术
比特币所依赖的技术
一、项目图
比特币是如何运作的,它使用了哪些技术?
图片
1. 交易是一切数据的来源
图片
2、交易流程
图片
图片
2. 比特币使用了哪些技术
图片
1 概述
1.密码学
2.P2P网络
3. 工作量证明
4.base58
三、密码学(保证交易安全) 一、对称加密简介
使用单密钥密码体制的加密方法,可以用同一个密钥对信息进行加密和解密。 这种加密方式称为对称加密,也称为单密钥加密。
算法
DES、3DES、AES、TDEA、河豚、RC2、RC4、RC5、IDEA、SKIPJACK。
图片
Feature 2. 非对称加密介绍(交易验证)
公钥和私钥一一对应。 公钥负责加密,对外公开。 私钥用于加密和签名。 只能自己拿着,绝对不能外泄。
公钥加密的组成
图片
私钥签名
图片
签名图标
图片
特征算法
常用:RSA、ECC、Elgamal、背包算法、Rabin、DH
应用
图片
总结4. P2P网络(广播交易,同步账本)
计算机网络的初衷是建立一个可以相互通信的对等计算机网络。 但由于历史问题,联网的计算机配置不高,计算能力和存储能力不足。 因此,长期以来,我们更倾向于使用基于客户端(client)和服务器(server)的C/S模式和浏览器(Browser)和服务器(server)的B/S模式。
现代计算机的计算能力和配置有了显着提高,建立去中心化的P(peer)2P(peer)对等网络可以很好地应对这种高并发数据处理,广泛应用于文件下载和在线视频领域。
==才明白==
1 简介
P2P(peer-to-peer):点对点技术,没有中央服务器,依靠用户群交换信息的互联网系统。
网络中的参与者共享他们的一些硬件资源(处理能力、存储能力、网络连接能力、打印机等),这些共享资源通过网络提供服务和内容,可以被其他对等节点(Peer)直接访问无需通过中间实体。 这个网络的参与者既是资源、服务和内容的提供者(Server),也是资源、服务和内容的获取者(Client)。 P2P架构是一个应用层的概念。
2.图标
图片
三、特点
抗攻击,高容错,地位平等。
4.申请
BT下载,电驴下载。
5. 工作量证明(挖矿)
工作量证明(POW:Proof of work)是指表明你做了某事的结果。 得到结果的过程很曲折,但验证却很简单。
==你展示计算出的随机数nonce,如果你提供的区块数据的计算结果小于当前难度值,则系统认为你做了一定量的计算工作。 ==
图片
我们都说比特币挖矿是个问题,那到底是什么问题呢? 其实就是对当前打包的交易进行哈希sha256运算。 哈希运算很简单,为什么会出问题呢? 比特币难题需要矿工找到特定的哈希值。 我们都知道哈希运算的结果是没有规律可循的,想要找到一个明确的哈希是不现实的。 我们需要难度和可行性,所以挖矿需要找到一个小于目标值的哈希值。 能。
图片
演示:
== 计算时同步收集交易,上一轮比赛结束后将收集到的交易打包,开始新一轮比赛。 ==
==挖矿期间不会添加新的交易==
难度值(猜测):0x000f00000000000000 0x0000ffffffffffffff 10000
sha256(helloworld+1) => 0x12345.... 0x000100000000000000
sha256(helloworld+2) => 0x0212345.... 0x000100000000000000
.....
sha256(helloworld+10000) => 0x0000f4345.... 0x000100000000000000 挖矿成功! 10000 随机数
是我们当前区块的哈希值
10000 是我们要找的随机数
0x333f00000000000000 -> 0x10087ffffffffff
0x00000000 ->
图片
截屏
图片
1 简介
工作量证明(Proof Of Work),简称POW,是一种针对服务和资源滥用,或阻断服务攻击的经济对策。 一般需要用户进行一些耗时且适当的复杂计算,答案可以很快被服务商核对。 所消耗的时间、设备和能源作为保证成本,以确保服务和资源被真正的需求所使用。 目前该技术已经成为加密货币的主流共识机制之一,例如比特币所采用的挖矿技术。
2.原理
BTC的POW需要运行哈希算法(sha256)找到符合要求的Block Hash(小于目标哈希值),==,哈希值由N个前导零组成,零个数取决于网络难度值==。 得到合理的 Block Hash 需要大量的试算,计算时间取决于机器的哈希速度。
图片
Hash和Nonce是匹配的,只有计算出Nonce才能确定hash值。
因为满足条件的Nonces有无穷多个,我们只需要找到一个就可以挖矿成功。
3.代码
import (
"crypto/sha256"
"fmt"
)
func main() {
var data = "helloworld"
for i := 0; i < 1000000; i++ {
hash := sha256.Sum256([]byte(data + string(i)))
fmt.Printf("hash : %x, %d\n", string(hash[:]), i)
}
}
看一下,前导0的个数增加了一个,i值的变化
图片
六、比特币地址生成 1、地址规则
散列一个随机字符串以生成一个 32 字节的私钥
图片
生成过程如下(大家可以看懂了,v5版本会使用代码实现):
图片
可以验证地址比较短比特币缩写,可读的前面有版本号,可以根据地址快速判断属于哪个网络地址
版本号不同:
主网:00 ---> 1
测试网:
专用网络:
图片
2.在线演示
在线生成地址(不靠谱,仅供演示)
BitCoinAddress(很有意思的地址,生成一个真实可用的地址)
七、编码(网络传输、地址生成) 一、Base64简介
Base64编码是我们程序开发中经常使用的一种编码方式。 因为base64编码的字符串更适合在不同的平台和语言中传输(一个字符在其他系统中可能没有)。 它是一种基于用 64 个可打印字符表示二进制数据的表示方法。 通常用于存储和传输一些二进制数据的编码方式,一句话:textualize binary data (convert to ASCII)。
影响
由于在某些系统中只能使用 ASCII 字符。 Base64 是一种用于将非 ASCII 字符数据转换为 ASCII 字符的方法。
原则
base64编码需要将3个8位字节(3*8=24)转换成4个6位字节(4*6=24),然后在6位前面加上两个0比特币缩写,组成8位字段形式. 如果剩余字符小于3个字节,则用0补足,输出字符使用'=',所以编码后的输出文本末尾可能出现1个或2个'='。
为了保证输出的码位是可读字符,Base64制定了统一转换的码表。 编码表的大小为2^6=64,这也是Base64这个名字的由来。
base64编码表
图片
恰好三个字节的情况:
图片
少于三个字节:
图片
特征码
package main
import (
"encoding/base64"
"fmt"
"log"
)
func main() {
input := []byte("区块链学员中有一群神秘的大佬,他们家里有矿!")
encodeString := base64.StdEncoding.EncodeToString(input)
fmt.Println(encodeString)
decodeBytes, err := base64.StdEncoding.DecodeString(encodeString)
if err != nil {
log.Fatalln(err)
}
fmt.Println(string(decodeBytes))
fmt.Println()
uEnc := base64.URLEncoding.EncodeToString([]byte(input))
fmt.Println(uEnc)
uDec, err := base64.URLEncoding.DecodeString(uEnc)
if err != nil {
log.Fatalln(err)
}
fmt.Println(string(uDec))
}
Base58(比特币生成地址)
去除base64字符中的6个容易混淆的字符
为什么是base58
==58个字符(Base58数字系统)和校验位用于提高可读性,避免歧义并有效防止地址转录和键入错误。 ==
8.总结
我们从交易环节入手,大方向介绍了比特币的运行流程和相关技术,但是各个环节在系统中是如何工作的呢? 接下来,我们就带领大家逐层分析,走进它的内部结构。
图片