主页 > imtoken钱包官方下载地址 > Blockchain-02-BTC-密码学原理

Blockchain-02-BTC-密码学原理

imtoken钱包官方下载地址 2023-05-14 06:17:28

目录

区块链和密码学

以比特币为例。 作为区块链的经典应用,比特币本质上是一种加密货币,但实际上比特币并没有加密,区块链上的所有信息都是公开的,包括账户信息。 地址、交易记录、金额等。 比特币在密码学中主要使用了两个功能,一个是哈希,一个是签名; 这也是区块链密码学部分的主要功能。

1.哈希(hash)函数

哈希函数是可用于将任意大小的数据映射到固定大小的值的任何函数。 哈希函数返回的值称为哈希值、哈希码、摘要或简称为哈希。 这些值用于索引一个固定大小的表,称为哈希表。 使用哈希函数索引哈希表称为哈希或分散内存寻址。

比特币地址可以查到账户本人吗_比特币转错到比特币现金地址了_2021年5月比特币持币地址数量

2.密码哈希函数

密码哈希函数(英文:Cryptographic hash function),又译为加密散列函数、密码散列函数、加密散列函数,是散列函数的一种。 它被认为是一种单向函数,这意味着从哈希函数的输出中推回输入数据是极其困难的。 这种单向函数被称为“现代密码学的主力军”

比特币地址可以查到账户本人吗_比特币转错到比特币现金地址了_2021年5月比特币持币地址数量

那么区块链中的哈希函数主要是密码学哈希函数,它有几个重要的性质:

Collision resistance(防碰撞) Hiding (irreversible) puzzle friendly(只有比特币需要满足) Collision resistance

防冲突是指对于一个哈希函数H,2个输入a,b,你很难找到两个不同的输入使得哈希后的输出值相同

H(a)=H(b),其中a≠bH(a)=H(b),其中a≠bH(a)=H(b),其中=b

两个不同的输入输出的值是相同的。 一般来说,哈希冲突是不可避免的,因为你的输入空间其实比输出空间大很多。 如果我们的散列函数的输出值控制在256位Bit,那么它的输出空间就有2256种情况。 理论上,如果进行2256+1次计算,就可以实现哈希碰撞,即可以找到两个不同的输入,使哈希值相同。 但这样的计算量太大,难以实现。

使用防碰撞,我们可以用它来检测数据是否被篡改。 如果我们有一个数据m,它的哈希值H(m),也叫‘消息摘要’,如果有人改变了m,那么这个哈希值也必然会发生变化。 由于具有抗碰撞性,这意味着您无法在不被发现的情况下篡改内容。

抗碰撞性无法从数学上证明,只能通过实践经验获得,但一些哈希函数如 MD5 已经找到了人为构造哈希碰撞的方法。

隐藏

隐藏意味着散列过程是不可逆的。 你知道哈希值,但是你不能反转哈希函数的输入值。但是这个条件的前提是

输入空间足够大:如果只有几个输入很无聊

输入空间是均匀分布的:即使有很大的输入空间,如果某些输入值被选中的概率很高,则意味着输入值反转的概率很高

数字承诺

利用前两个属性可以实现数字承诺,也称为密封信封的数字等价物。

举一个现实生活中的例子。 如果一个人声称他可以预测股票涨停板,他如何证明呢? 如果让他提前公布他的“预测”——股票明天涨停,然后明天去股市,那么他公布的信息本身就会影响股票的涨停。 如果是在股价涨停之后公布,那么大家就会怀疑他是不是篡改了自己的“预测”。 这里的密封信封就是解决这个问题的方法。 让这个人先把预测结果写在纸上,装进信封封好,然后交给第三方公证机构保管。 第二天股市收盘后比特币地址可以查到账户本人吗,让公证机构检查信封是否完好,打开信封,查看纸上的预测结果与实际涨停板是否一致。

在这个问题上使用数字承诺的方法是为预测结果计算一个哈希值,然后发布哈希值。 由于隐藏的特性,每个人都无法通过哈希值知道预测结果。 预测结果将于次日收市后公布。 由于抗碰撞的性质,预测结果没有被篡改,否则与公布的哈希值不匹配。 在这个问题中,比如预测是“上涨股票的名字”,那么因为总共有这么多股票,输入空间不够大,所以不满足隐藏的性质(可以遍历所有获得哈希值的股票 知道哪只股票预计会上涨)。 这时候的解决办法可以是在输入后加一个随机数nonce,增加输入空间和输入概率的随机性,让分布足够均匀:

H(x||nonce)orH(x||nonce)H(x||nonce) or H(x||nonce)H(x||nonce)orH(x||nonce)

挖矿时,通常会计算随机数。

解谜友好

比特币中的哈希函数除了前面两个属性外,还必须满足puzzle friendly的属性。 这种性质要求哈希值的计算是事先不可预测的,仅根据输入很难预测输出。 比如:我们需要一个hash值,它存在于一定的范围内,只能通过不停的计算才能找到。比如我们要得到一个hash

这个hash值的前K位全为0,共256位。

00000...XXXXXX00000...XXXXXX00000...XXXXXX

那么什么样的输入才能得到这样的输出呢? 答案很难得。

这个属性保证了在比特币系统中,比特币只能通过“挖矿”的方式获得。 换句话说,这个属性保证了工作量证明(POW)机制可以持续运行【“挖矿难,验证容易”】。 SHA-256 哈希函数用于比特币系统。 比特币挖矿的过程就是寻找一个随机数nonce。 这个nonce结合区块头中的其他信息作为输入,得到hash值。 得到的哈希值必须小于或等于指定的阈值:

H(block, header)≤targetH(block, header)≤targetH(block, header)≤target

请注意,nonce 不是块头以外的东西,它是字段之一,但可以手动设置。 挖矿过程就是不断尝试nonce,使得整个区块头的hash小于等于目标。 由于益智友好的性质,比特币挖矿的过程中没有捷径可走。 你只能通过不断地尝试大量的随机数来找到满足要求的解决方案,所以它可以作为工作量证明(proof of work,POW)。 这个puzzle friendly跟正面防撞有些关系,但又不完全一样。 那就是不可能人为地制造哈希碰撞,这就是不可能人为地构造一个符合特定特征的哈希值。

虽然很难找到符合要求的nonce,但是一旦找到并发布,其他人就很容易验证这个nonce是否符合要求。 只需计算哈希值并将其与目标进行比较即可。 .

3. 签名比特币账户管理

在第三方中心化系统中,开户依赖于第三方。 但是,在去中心化的比特币系统中,显然不可能“申请一个账户”。 在比特币系统中,账户的申请由用户自己处理,即创建公钥-私钥对。

公钥和私钥的应用保证了“签名”的应用。 在比特币网络中转账时,“签名”可以用来明确转账是从哪个账户进行的,从而防止不法分子从其他账户中窃取比特币。 发布交易时,用自己的私钥签名,其他人可以根据公钥进行验证,从而保证交易是自己发起的。 也就是说,只有有了私钥,才能把账户里的比特币转走。在比特币系统中,通过生成大量的公私钥对,很难得到别人的私钥

两种加密系统 对称加密系统

最早的加密系统是对称加密算法。 例如,双方通信协商一个加密密钥,发送方使用密钥加密,接收方使用密钥解密。 因为加密和解密使用密钥,所以这是一个对称加密系统。 这种方法假设存在某种安全通道可以将密钥分发给通信双方,这是对称加密系统的一个弱点。

非对称加密系统

非对称加密系统(非对称加密算法)不再像对称加密那样使用密钥,而是使用一对密钥,即公钥和私钥。 公钥用于加密,私钥用于解密。 比如A要给B发消息,然后用B的公钥加密消息,B收到消息后,用B自己的私钥解密得到消息原件。 也就是说,加密和解密都使用接收方的公钥和私钥。 这样做的好处是公钥不需要保密,可以告诉大家,有些人的主页上有PGP公钥。 只有私钥必须保密,但私钥只需要保存在本地,不需要传递给任何人,从而避免了密钥传输不安全的问题。 回复对方再用对方的公钥加密,不需要知道对方的私钥比特币地址可以查到账户本人吗,解决了对称加密体系中密钥分发不安全(不方便)的问题。

比特币签名

加密货币未加密。 前面学习的非对称加密公钥和私钥在比特币系统中用于签名。

比如A要给B转钱,也就是A在区块链上发起一笔交易,所有的交易都是公开的,但是怎么判断这笔交易确实是A发起的,而不是别人的冒牌货? 用于签署交易的私钥。 其他用户得到签名和交易信息后,可以使用A的公钥来验证签名的正确性。 私钥用于签名,公钥用于验证签名。 两者都是同一用户的公钥和私钥。 生成公钥和私钥的过程是随机的,但是需要选择一个好的随机源,否则前面的分析是不成立的(不够小,生成重复的公私钥对)。 比特币使用的签名算法不仅在生成公私钥对时有很好的随机源,而且每次签名时也有很好的随机源。 如果签名时使用的随机源不好,就有可能泄露私钥。

比特币系统中的签名一般是先对消息进行哈希,然后对哈希值进行签名。