左耳听风
陈皓
网名“左耳朵耗子”,资深技术专家,骨灰级程序员
立即订阅
40357 人已学习
课程目录
已完结 108 讲
0/6登录后,你可以任选6讲全文学习。
开篇词 | 洞悉技术的本质,享受科技的乐趣
免费
01 | 程序员如何用技术变现(上)
02 | 程序员如何用技术变现(下)
03 | Equifax信息泄露始末
04 | 从Equifax信息泄露看数据安全
05 | 何为技术领导力?
06 | 如何才能拥有技术领导力?
07 | 推荐阅读:每个程序员都该知道的知识
08 | Go语言,Docker和新技术
09 | 答疑解惑:渴望、热情和选择
10 | 如何成为一个大家愿意追随的Leader?
11 | 程序中的错误处理:错误返回码和异常捕捉
12 | 程序中的错误处理:异步编程以及我的最佳实践
13 | 魔数 0x5f3759df
14 | 推荐阅读:机器学习101
15 | 时间管理:同扭曲时间的事儿抗争
16 | 时间管理:如何利用好自己的时间?
17 | 故障处理最佳实践:应对故障
18 | 故障处理最佳实践:故障改进
19 | 答疑解惑:我们应该能够识别的表象和本质
20 | Git协同工作流,你该怎么选?
21 | 分布式系统架构的冰与火
22 | 从亚马逊的实践,谈分布式系统的难点
23 | 分布式系统的技术栈
24 | 分布式系统关键技术:全栈监控
25 | 分布式系统关键技术:服务调度
26 | 分布式系统关键技术:流量与数据调度
27 | 洞悉PaaS平台的本质
28 | 推荐阅读:分布式系统架构经典资料
29 | 推荐阅读:分布式数据调度相关论文
30 | 编程范式游记(1)- 起源
31 | 编程范式游记(2)- 泛型编程
32 | 编程范式游记(3) - 类型系统和泛型的本质
33 | 编程范式游记(4)- 函数式编程
34 | 编程范式游记(5)- 修饰器模式
35 | 编程范式游记(6)- 面向对象编程
36 | 编程范式游记(7)- 基于原型的编程范式
37 | 编程范式游记(8)- Go 语言的委托模式
38 | 编程范式游记(9)- 编程的本质
39 | 编程范式游记(10)- 逻辑编程范式
40 | 编程范式游记(11)- 程序世界里的编程范式
41 | 弹力设计篇之“认识故障和弹力设计”
42 | 弹力设计篇之“隔离设计”
43 | 弹力设计篇之“异步通讯设计”
44 | 弹力设计篇之“幂等性设计”
45 | 弹力设计篇之“服务的状态”
46 | 弹力设计篇之“补偿事务”
47 | 弹力设计篇之“重试设计”
48 | 弹力设计篇之“熔断设计”
49 | 弹力设计篇之“限流设计”
50 | 弹力设计篇之“降级设计”
51 | 弹力设计篇之“弹力设计总结”
52 | 管理设计篇之“分布式锁”
53 | 管理设计篇之“配置中心”
54 | 管理设计篇之“边车模式”
55 | 管理设计篇之“服务网格”
56 | 管理设计篇之“网关模式”
57 | 管理设计篇之“部署升级策略”
58 | 性能设计篇之“缓存”
59 | 性能设计篇之“异步处理”
60 | 性能设计篇之“数据库扩展”
61 | 性能设计篇之“秒杀”
62 | 性能设计篇之“边缘计算”
63 | 区块链技术的本质
64 | 区块链技术细节:哈希算法
65 | 区块链技术细节:加密和挖矿
66 | 区块链技术细节:去中心化的共识机制
67 | 区块链技术细节:智能合约
68 | 区块链技术 - 传统金融和虚拟货币
69 | 程序员练级攻略:开篇词
70 | 程序员练级攻略:零基础启蒙
71 | 程序员练级攻略:正式入门
72 | 程序员练级攻略:程序员修养
73 | 程序员练级攻略:编程语言
74 | 程序员练级攻略:理论学科
75 | 程序员练级攻略:系统知识
76 | 程序员练级攻略:软件设计
77 | 程序员练级攻略:Linux系统、内存和网络
78 | 程序员练级攻略:异步I/O模型和Lock-Free编程
79 | 程序员练级攻略:Java底层知识
80 | 程序员练级攻略:数据库
81 | 程序员练级攻略:分布式架构入门
82 | 程序员练级攻略:分布式架构经典图书和论文
83 | 程序员练级攻略:分布式架构工程设计
84 | 程序员练级攻略:微服务
85 | 程序员练级攻略:容器化和自动化运维
86 | 程序员练级攻略:机器学习和人工智能
87 | 程序员练级攻略:前端基础和底层原理
88 | 程序员练级攻略:前端性能优化和框架
89 | 程序员练级攻略:UI/UX设计
90 | 程序员练级攻略:技术资源集散地
91 | 程序员面试攻略:面试前的准备
92 | 程序员面试攻略:面试中的技巧
93 | 程序员面试攻略:面试风格
94 | 程序员面试攻略:实力才是王中王
95 | 高效学习:端正学习态度
96 | 高效学习:源头、原理和知识地图
97 | 高效学习:深度,归纳和坚持实践
98 | 高效学习:如何学习和阅读代码
99 | 高效学习:面对枯燥和量大的知识
左耳听风
登录|注册

65 | 区块链技术细节:加密和挖矿

陈皓 2018-05-15
前面一篇文章中提到的技术解决了交易信息不能被篡改的问题。但还有一个比较重要的问题,那就是,我们每个人只能发起和自己有关的交易,也就是能发起自己对别人付钱的交易,我们不能发起别人对我付钱,或是别人向别人付钱的交易。
那么,在比特币中是怎么解决这个问题的?让我们先看一些基础的加密技术。

比特币的加密方法

密钥对 / 签名 / 证书

所谓密钥对,也就是一种非对称加密技术。这种技术,在对信息进行加密和解密时,使用两个不同的密钥。这样一来,我们就可以把其中一个密钥公布出去,称之为公钥,另一个密钥私密地保管好,称之为私钥。
现实社会中,有人使用公钥加密,私钥解密,也有反过来用私钥加密,公钥解密,这得看具体的场景。(比特币使用了非对称加密的技术,其使用了ECDSA 密钥对比技术。)
比如,我把我加密的密钥发布给所有人,然后大家都用这个公钥加密信息,但其他人没有私钥,所以他们解不了密文,只有我能解密文,也只有我能看得懂别人用我的公钥加密后发给我的密文。如下图所示。
但是,这会有个问题,那就是每个人都有我的公钥,别人可以截获 Mike 发给我的信息,然后自己用我的公钥加密一个别的信息,伪装成 Mike 发给我, 这样我就被黑了。于是,我们需要对 Mike 的身份进行验证,此时就需要用到“数字签名”的概念了。
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《左耳听风》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(22)

  • 陈小喵~
    耗子叔,非常佩服您的知识广度和深度。想问下这么多知识您是怎么记录下来的呢?简单来说您是否有一套自己记笔记或收集存储知识的方法…包括知识的分类,整理,定期的回顾,新知识的添加,老知识的内容更新等等…以及使用的工具什么的…这个是否能分享下呢?

    作者回复: 后面我会写提高学习能力的文章,敬请关注!

    2018-04-05
    11
  • 龚极客
    关于数字签名的图片左侧应该是用公钥对数字签名解密,然后把解密结果和md5('hello')比对吧?

    作者回复: 是的。我的图可能没画好,但是文字描述如你所说。

    2018-04-08
    3
  • Ray
    关于证书机构颁发公私钥匙那段,如何做到防止中间人攻击?黑客不是照样可能通过木马方式获得通信双方的公私钥匙嘛?

    作者回复: 当然可以,其除了需要伪装成发送和接收方,还要伪装成证书机构,才能做到神不知鬼不觉,证书中有证书的源信息,比如,公钥的服务器域名,你还要伪造DNS服务器……另外,如果黑客种了木马,那不需要这么复杂了,这意味着私钥都被黑了,这才是灾难——你的身份就是你的私匙!别人拿到了你的私匙,你就已经不是你了。所以,如果你的比特币的私匙被盗,相当于你的钱被盗了,区块链不像银行,其只认私匙,不认人……

    2018-04-05
    3
  • i
    难度系数是自动调整的吧?这个调整机制是怎样的?
    2018-06-03
    1
  • 杨洪林
    不太明白下面挖矿的代码为什么计算两次哈希值?一次不就可以验证有没有挖到矿了吗?

    hash = hashlib.sha256(str).hexdigest()
    hash = hashlib.sha256(hash).hexdigest()
    2018-04-21
    1
  • 盗马将
    耗子叔:最近一直在看区块链,但是还是很蒙圈,
    1 区块链是一个分布式数据库,他是那个节点的数据是全部复制的一模一样的嘛?我看好多人解说的时候说那个节点上的交易信息都是一样的,而且区块的哈希值很内容有关。这样在内容被篡改的时候哈希值会变化区块脱链。那么如果生成有新的交易记录的时候语言广播,同步信息到所有的区块中,那么之前生成的区块的内容是不是有变化,内容变化以后hash值也会变化,是不是也就脱链了。感觉怎么都说不通?望耗子叔指点指点
    2019-11-07
  • edisonhuang
    区块链中的安全性通过每个人的一对密钥,公钥和私钥,以及对自己数据做数字证书的方式来保证。挖矿则是通过算计暴力穷举一个合法字符串的过程,挖矿难度与算力相关动态调整,全网算力越强挖矿难度越大
    2019-07-31
  • zjg
    “然后 Jack 用这个权威机构的公钥解密这个证书,得到 Mike的公钥,再用 Mike 的公钥来验证 Mike 的数字签名”,我觉得文中这句话有错误。
    证书的数字签名是由CA的私钥生成的,所以数字签名的验证需要用CA的公钥来验证,而不是Mike的公钥。
    2019-04-22
  • 沙漠之鹰
    比特币是怎么保证有限的
    2019-02-10
  • 李海洋
    比特币的总量是怎么控制的,算法上怎么做的,10分钟产生一个区块又是怎么定的
    2019-02-07
  • 尾巴的爸爸
    尊敬的陈老师,您好!
    我在阅读专栏时,顺便学习代码,发现了 一个问题,期望您的解答。
    在测试程序部分:
    str = data + `n`
    这行代码是否存在问题? 这样的话,这个传入的字符串始终是“ChenHaon",程序就陷入死循环了。
    我修改了一下,将变量名改名为input_str:
    input_str = data + str(n)
    程序能正常运行,得到结果,耗时约1.72秒(台式机)。
    请问这样改是否合理?
    多谢
    2018-10-19
  • 够扽
    那我们还是去银行把,,,既然黑客这么🐂🍺
    2018-09-19
  • anbien
    “用这个权威机构的公钥解密这个证书,得到 Mike 的公钥,再用 Mike 的公钥来验证 Mike 的数字签名”,Mike的公钥本身应该没用CA私钥加密吧?加密的应该只是Mike证书内容的摘要
    2018-06-24
  • neohope
    其实感觉Fabric的整体架构和经典的安全架构更靠近一些。 挖矿的化,是不是增加一下分叉的相关知识,以及BITCOIN和ETH如何奖励矿工稍微好一些?
    2018-06-22
  • Cong Chen
    如果可以使用Mike的公钥来验证签名,而Mike的公钥是全网发布的,那么Mike所发的信息不就变成全网可截获了吗?所以这种信息不确保私密性?

    作者回复: 这种方式只是为了验证消息是不是Mike发出来的。不是为了私密。

    2018-06-10
  • Wilson_qqs
    比特币的挖矿中那个公式用的是<target而不是=.意思是只要找到一个符合条件的hash就可以了?
    2018-04-19
  • Wilson_qqs
    同样的疑问被一个读者提问了。就是权威机构颁发证书来防止中间人攻击。其实,黑客同样可以把jack电脑上的机构公钥换成自己的,然后截取证书,用机构公钥解密证书获取各种信息再伪装成自己的发给jack.只是这种方法对黑客来说成本有些高?这种方式并不能绝对防止中间人攻击对吧,耗子哥?

    作者回复: 是可以的。但为了成为中间人,攻击者不但要能同时和服务器,客户端通信,还要嵌入到服务器和客户端的通信链路之中,将服务器的数据转发给客户端,将客户端的数据转发给服务器。实现这样目的的手段有多种,比较常见的有DNS劫持和局域网ARP欺骗。

    2018-04-19
  • 一般无
    请问所谓的小费是怎么回事?
    为什么比特币会是有限的?
    有没有可能一笔交易额太小了没有挖矿机愿意为他记账?

    作者回复: 小费是:我转你10元,但给你12元,其中2元是给矿工的小费。手续费:比特币不鼓励小额交易,对于小额要收手续费。比特币如果是无限的,就会导致通货膨胀。第三个问题,一笔交易会有未确认时间,未确认时间越长被记账的优先级就越高。

    2018-04-08
  • 李连杰
    交易费用太高了,算力或电力消耗就是维护区块链交易制度所需的交易费用,肯定是行不通的,不符合经济学原理。人是追求利益最大化的,所以大家有动力一起建立和遵守某个规则,这个规则一定使大部分人的个体收益和整体收益增加。感觉区块链很“脑残”啊,少了最重要的一根弦。
    2018-04-08
  • 逆行
    “挖矿”是有奖励机制的,即奖励比特币,而比特币又是有限的,等比特币到达上限后,谁又来给“挖矿”买单呢?或者没有了奖励机制,谁又来打包交易生成区块呢?

    作者回复: 交易的手续费

    2018-04-06
收起评论
22
返回
顶部