首页 > 其他分享 >01 BTC-密码学原理

01 BTC-密码学原理

时间:2023-05-02 11:34:17浏览次数:55  
标签:01 加密 BTC 比特 签名 哈希 私钥 密码学 函数

《区块链技术与应用》课程链接:https://www.bilibili.com/video/BV1Vt411X7JF/?spm_id_from=333.337.search-card.all.click


01 BTC-密码学原理

目录

  • 哈希部分
  • 签名部分

比特币加密货币(crypto-currency)


哈希部分

哈希函数(cryptographic hash function):

  • 抗碰撞性(collision resistance):难以进行哈希碰撞

    一般来说,哈希碰撞是不可避免的,因为输入空间足够大,输出空间有限。

    但其实在工作中哈希碰撞是不可行的。

    但是没有哪个哈希函数在数学上证明是真正collision resistance的。只能靠实践经验。因为没有实验经验,所以才说是collsion restance。

    同时,哈希函数还可以防止对信息进行篡改。对message求digest。

  • 计算不可逆(hiding)

    其实想要知道输入是什么,还是有办法的,尝试输入,查看哪个哈希值和原来数据的哈希值相等。【撞库】

collision resistance + hiding = digital commitment / digital equivalent a sealed envelope

现实生活中,如果有人想要预测股市准确,需将自己的预测结果交给第三方的公证机构,等股市开盘,再做验证。

电子世界中,使用哈希函数,可将预测结果hash,因为有hiding的效用,别人没法知道预测结果,股市开盘,可以公布自己的预测结果,因为有collision resistance的效用,所以自己不能对数据进行篡改。这样就实现了digital sealed envelope。

实际中,如果输入空间不是足够大,可以将输入数据与nonce进行拼接,之后一起进行hash,这样可以保证整个输入是足够随机的,分布也是足够均匀的。H(x || nonce)。


比特币除了哈希函数的两个性质外,比特币还需要一个性质,叫做puzzle friendly。(也就是对哈希之后的数据有要求)

意思是,我们查看哈希的输入,不会知道哈希之后的数据的情况,对哈希之后的数据进行限制。

puzzle friendly:事先不知道哪个输入更有可能计算出需要的哈希值(需要做大量的计算尝试,所以,过程才叫做工作量证明)。

所以,比特币的挖矿函数。

虽然想要得到nonce是很困难的,但是验证nonce符合要求,是很容易的,只需要做一次哈希就行。挖矿很难,验证很容易。【difficult to solve,but easy to verify】

比特币中的哈希函数,用的SHA-256。SHA(Secure Hash Algorithm)


签名部分

比特币的账户管理。依赖非对称加密体系(asymmetric encryption algorithm)。

对称加密的前提:假设有某种安全的信道,能把密钥分发给通讯双方。【对称加密的弱点:密钥的分发】

非对称加密(public key, private key):加密用的是公钥,解密用的是私钥。【解决了对称机密体系中密钥分发不方便的问题】

有个问题,我们说比特币虽然叫加密货币,但是数据都是公开的,那么要非对称机密做什么呢?实际上是用来做签名的。

同时,非对称加密还提供了签名的功能。

比特币中,给其他人进行比特币转账,其他人如何知道转账人的身份是否是真实的呢?这就需要转账人使用私钥进行签名。其他人收到交易之后,使用转账人的公钥去验证转账人的身份。

加密用公钥,签名用私钥。

问题:如果产生相同的私钥怎么办?比如,大量的产生不同的公私钥,用来盗取别人的账户。

理论上是可以的,但在实际上是不可行的。这种概率微乎其微,概率比地球爆炸还要小,没有成功的先例。

前提:产生一个公私钥的时候,有一个好的随机源。(a good source of randomness)

比特币中使用哈希函数对数据进行哈希,之后使用私钥对哈希数据进行签名。

标签:01,加密,BTC,比特,签名,哈希,私钥,密码学,函数
From: https://www.cnblogs.com/yangyi215/p/17367478.html

相关文章

  • 02 BTC-数据结构
    《区块链技术与应用》课程链接:https://www.bilibili.com/video/BV1Vt411X7JF/?spm_id_from=333.337.search-card.all.click02BTC-数据结构目录02BTC-数据结构hashpointerMerkletreehashpointer:不仅可以找到前区块的位置,还能防止前区块是否被篡改。Blockchainisal......
  • 03 BTC-协议
    《区块链技术与应用》课程链接:https://www.bilibili.com/video/BV1Vt411X7JF/?spm_id_from=333.337.search-card.all.click03BTC-协议目录03BTC-协议数字货币的需要解决的两个主要问题共识机制如果央行(中心化)发行数字货币,使用央行的私钥进行签名,大家交易的时候使用央行......
  • 01 Docker基础
    第一章Docker基础目录第一章Docker基础一、Docker简介1Docker是什么?2为什么使用Docker?3Docker的架构与结构4官方资料5Docker特点5.1优点5.2缺点二、Docker快速入门1Docker历程2官方要求3Docker安装4Docker加速器5Docker其它简介5.1Docker的基本命令格式5.2删除Do......
  • 每日总结2023-05-01
    今天继续学习了Android中的kotlin语言初始Java语言mportjava.util.ArrayList;importjava.util.List;publicclassRepository{privatestaticfinalRepositoryINSTANCE=null;privateList<User>users=null;publicstaticRepositorygetInstan......
  • 蛮力法解01背包问题
    #include<iostream>usingnamespacestd;structthing{intweight;//物品重量intvalue;//物品价值intnumber;//物品序号};thingthings[10];//假设最多有10个物品intthingsCount;//物品数量intbagSize;//背包容量intmaxTotalValue;//最大总重量......
  • 回溯法解决01背包问题
    #include<iostream>usingnamespacestd;structthing{intweight;//物品重量intvalue;//物品价值intnumber;//物品数量};thingthings[10];//假设最多有10个物品intthingsCount;//物品数量intbagSize;//背包容量intmaxTotalValue;//最大总重量......
  • 摄影-230501
    ......
  • 2023-05-01:给你一个整数 n , 请你在无限的整数序列 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1
    2023-05-01:给你一个整数n,请你在无限的整数序列[1,2,3,4,5,6,7,8,9,10,11,...]中找出并返回第n位上的数字。1<=n<=2^31-1。输入:n=11输出:0解释:第11位数字在序列1,2,3,4,5,6,7,8,9,10,11,...里是0,它是10的一部分。答案2023-05-01:该......
  • 分支限界法解01背包问题
    #include<iostream>usingnamespacestd;#defineMAX100structNode{intisVisit;//记录节点是否被扩展doublew;doublev;intlevel;//记录节点所在的层次doubleub;//上界Node*parent;//父节点};doublemaxValue=0;Node*PT[MAX......
  • P5336 [THUSC2016]成绩单
    题意:期末考试结束了,班主任L老师要将成绩单分发到每位同学手中。L老师共有\(n\)份成绩单,按照编号从\(1\)到\(n\)的顺序叠放在桌子上,其中编号为\(i\)的的成绩单分数为\(W_i\)。成绩单是按照批次发放的。发放成绩单时,L老师会从当前的一叠成绩单中抽取连续的一段,让这......