当前位置: 首页 > news >正文

【BTC】密码学原理

目录

挖矿的有效工作证明

签名技术


从去年开始,我对区块链技术产生了浓厚兴趣,对其中的运作原理,以及在Web3领域中的一些应用都产生了好奇。但是开始了解后发现对于这个领域中的很多概念都比较模糊,所谓的去中心化、社区治理、共识机制等概念都感觉很空洞,不是那么具体。

所以为了系统性了解该领域,在前段时间开坑了北京大学肖臻老师的《区块链技术与应用》公开课,现在已经全部学完。未来的一段时间我会把学习过程中的笔记整理分享出来。笔记内容如有问题,希望大家予以指正。话不多说,开始正文!

比特币用到了密码学中的哈希和签名两大技术:

  • 哈希函数应用在挖矿时的有效工作证明中(求解困难,但是验证简单)。hash(e) < target,只等通过暴力方法去求解符合要求的哈希入参。
  • 比特币系统中创建一个账户、转账收款就会用到签名技术。

挖矿的有效工作证明

区块链是由一个个区块构成的,其实就相当于一个链表。比特币的区块链中每一个区块上会有一块空间专门用来存放一个数据,比特币中要求将这一个数据采用SHA-256哈希函数处理后,得到的结果应该小于一个目标值target。但是想要知道某一个值经过哈希后的结果是不是小于目标值,目前没有捷径的方法,只能暴力一个个试,这一点是哈希函数性质决定的。所以矿工节点本身是为了创建区块,来维护区块链的运行,而作为回报区块链会奖励矿工虚拟币,但是如何证明矿工确实有好好的工作(挖矿),这就需要有效工作证明,也就是前面说的必须要创建区块中的某一个数据哈希后小于目标值。这种方法的特点就是求解的时候会很困难,只能暴力地遍历求解(这就是为什么挖矿需要很多高性能显卡持续不断地进行运算,因为想要创建合法的区块,就必须保证哈希后的值小于target,所以就要遍历尝试出符合条件的入参是多少),但是验证起来却很简单,直接把他们计算出来的结果计算一次哈希就能直接判断是否符合要求了。这种特性就很适合作为有效工作证明。

签名技术

数字签名用来验证交易的合法性

  • 通讯时要把传输的数据进行加密,加密用的是通讯对方的公钥(公钥不用保密,所有人都可以知道),对方收到加密的信息后再用自己的私钥解密(加密和解密用的是同一个人的公钥和私钥),这种形式就叫做非对称加密
  • 对称加密就是加密和解密都用同一个密钥。

在比特币中如何证明这个交易是由你来操作的,这就需要我们生成一个电子签名。

比特币中创建账户,其实就是创建了一个公钥和私钥,公钥相当于银行账号,别人知道了你的公钥就可以给你转账,私钥相当于银行密码,你只要有私钥就能把账户中的钱转走比如我给一个人转账10BTC,如何证明这笔转账确实是我本人转出的,而不是某个人冒充我只是为了把我的钱偷走而伪造的呢?我们在转账的时候就用自己的私钥对这一笔交易进行加密,然后把这一笔交易数据写入区块链上,大家都能够看到,其他人就可以用我的公钥来对区块链上的这一笔转账数据来解密,进而确定这一笔交易确实是由我本人发起的,这个私钥加密公钥解密的过程就是签名。这就是签名在比特币中的作用

Bob想要进行交易,Bob先对自己要发送的交易数据Message用Hash函数做一次哈希,然后再用自己的私钥对哈希进行加密(椭圆曲线数字签名算法 ECDSA),加密后的密文我们就称为电子签名。然后就会把要发送的Message和这个电子签名发送到网络中,所有人都可以查看。Alice想要证明这笔交易是不是由Bob发出的,那么她就会去访问这个电子签名,用Bob的公钥对电子签名进行解密,得到Message的哈希值,然后再去用网络中的Message做一次哈希,对比这两个哈希值结果是否一样,如果一样,就说明这笔交易是Bob发出的。(只能用私钥进行数据加密,公钥只能用来解密数据)。所以私钥很重要,因为私钥可以伪造你的电子签名,就可以把你的资产全部转走。

所以虽然叫加密货币,但是除了私钥之外,其实链上所有信息都是公开的。

理论上讲,如果一个人不断地去创建账户,生成公私钥,然后把公钥和公链上的某一个公钥去比对,如果发现两个公钥是一样的,那么这个人就能用对应的私钥去盗取别人账户上的资产,将其转给自己的账户。但是实际操作上,其实是很难实现的,现在公钥256位,生成两个相同公钥的概率是微乎其微的,比地球爆炸的概率还要低,几乎可以忽略不记。(当然有些人认为当量子计算机出来之后,就能分分钟暴力尝试出相同的公私钥签名,破解公私钥就成为了现实,虚拟货币体系也将瓦解。但是我认为如果真的有那一天,最先被破解的也是现有的银行金融体系)

哈希和签名可以结合起来用的,比特币系统中一般是先对message做一次哈希,然后再对哈希值做一次签名(签名就是用私钥进行加密),将签名后的数据发送出去,接收方再用公钥去解密。

相关文章:

  • FPGA基础 -- Verilog表达式之操作数:常数
  • _mm_aeskeygenassist_si128 硬件指令执行的操作
  • SpringCloud + Zookeeper + Feign整合及Feign原理
  • 43-旋转图像
  • 网络安全之任意文件读取利用
  • nt!CcGetDirtyPages函数分析之Scan to the end of the Bcb list--重要
  • 设计模式笔记_创建型_工厂模式
  • C++ vector(2)
  • 【学习笔记】NLP 基础概念
  • 微软因安全漏洞禁用黑暗环境下的Windows Hello面部识别功能
  • langChain4j-流式输出
  • 前端压缩图片的免费软件
  • C# winform教程(二)----ComboBox
  • Pycharm(二十)神经网络入门
  • 【技术】记一次 Docker 中的 ES 数据迁移,使用 Reindex API
  • 运行ollama V0.9.1 异常 GLIBC_2.27 not found
  • 香橙派3B学习笔记12:C语言操作GPIO_<wiringPi.h>_点灯通用输入输出
  • 数字孪生:为UI前端设计带来前所未有的创新体验
  • 《解构线性数据结构的核心骨架:从存储模型到操作范式的深度解析》
  • 深度学习进阶:卷积神经网络(CNN)原理与实战
  • 重庆seo团队/aso如何优化
  • 企业网站案例分析/什么是sem
  • 网站运营策略/外链网盘源码
  • 网站可以换虚拟主机吗/网络营销技巧培训
  • 回老家做PHP网站/线上推广外包公司
  • 网站建设先进技术/直通车怎么开才有效果