主页 > imtoken苹果下载 > 比特币背后的密码学原理1

比特币背后的密码学原理1

imtoken苹果下载 2023-02-12 05:43:17

目录:

前言

1.密码学理论

2. 比特币在行动

3. 区块链

4、挖矿原理

五、总结

前言

货币由于其天然属性与安全有着密不可分的联系,从最早的金库、保险柜、押运机构,到后来的ATM机、提款车; 从存折到银行卡,从密码卡到友盾,安全技术的一步步进步推动着金融保障领域的更新换代。

传统货币的安全要求,密码学是一种安全手段,是从“可用”到“安全使用”的升级。 对于比特币来说,密码学本身就是比特币系统的一部分,没有密码学支持的比特币系统将彻底崩溃比特币的核心原理,彻底“无法使用”。 本质上,比特币和密码学是一体的,比特币是一种具有自身安全属性的数字货币。 因此,对于比特币用户来说,了解比特币背后的密码学理论,有助于更好地理解比特币; 同时,通过密码学理论的分享,也可以顺便感受一下人类智慧的伟大。 毕竟在我眼里,密码学理论是大量聪明才智精心思考的结果,处处有许多精妙之处和巧思。

1.密码学理论

比特币本身并没有创造新的密码学成果,但比特币利用现有的密码学成果构建了一个令人惊叹的新数字货币世界:去中心化、区块链、可编程货币等,比特币本身就是一种令人钦佩的洞察力。

比特币 挖矿原理_比特币的核心原理_比特币密码学原理论文

首先,现代密码学理论的共识遵循“柯克霍夫原理”:

Kerckhoff 原则由 August Kerkhoff 在 19 世纪提出:即使每个人都知道系统的操作步骤,密码系统也应该是安全的。

这是什么意思? 以钥匙和锁为例。 锁(包括钥匙)的开发和生产过程完全公开。 锁被攻破的可能性只有两种:一种是证明流程存在漏洞,不需要拿到原来的钥匙也可以打开。 二是穷尽各种关键的可能性,在可接受的时间内进行概率意义上的尝试(暴力破解)。

算法是公开的,唯一需要保护的就是密钥,这是我们下面讨论的基础。

1.非对称加密

先来看看对称加密,简单易懂直观:

对称加密:对于同一份敏感数据,加密和解密密钥相同。

非对称加密呢:

非对称加密算法需要两个密钥:公钥和私钥。 公钥和私钥是一对。 如果数据是用公钥加密的,只有对应的私钥才能解密; 如果数据是用私钥加密的,那么只有对应的公钥才能解密数据。 解密。 由于加密和解密使用两个不同的密钥,所以这种算法称为非对称加密算法。 非对称加密算法实现机密信息交换的基本过程是:甲方生成一对密钥,将其中一个作为公钥公开给对方; 加密后发送给甲方; 甲方再使用自己保存的另一把私钥对加密后的信息进行解密。

非对称加密算法需要两个密钥:公钥和私钥。 公钥和私钥是一对。 如果数据是用公钥加密的,只有对应的私钥才能解密; 如果数据是用私钥加密的,那么只有对应的公钥才能解密数据。 解密。 由于加密和解密使用两个不同的密钥,所以这种算法称为非对称加密算法。 非对称加密算法实现机密信息交换的基本过程是:甲方生成一对密钥,将其中一个作为公钥公开给对方; 加密后发送给甲方; 甲方再使用自己保存的另一把私钥对加密后的信息进行解密。

我们用一张图来说明:

比特币密码学原理论文_比特币的核心原理_比特币 挖矿原理

比特币 挖矿原理_比特币的核心原理_比特币密码学原理论文

上述非对称加密部分,密钥A为公钥(简称公钥),密钥B为私钥(简称私钥)。 我明白道理,有什么有趣的问题? 非对称加密下密钥A和密钥B是如何发现和实现的? 让我们用一个例子来说明:

假设我们找到了(后面怎么找到)公钥(3233, 17)和私钥(3233, 2753)。

注意,公钥和私钥不一定只有一个数,可以有多个数,具体数数取决于非对称加密算法。

假设待加密的明文信息为数字65,我们先给出加密公式:

比特币的核心原理_比特币密码学原理论文_比特币 挖矿原理

解释一下,c代表加密后的数字,(n,e)对应我们的公钥对,m代表明文,≡表示同模运算,比如60≡4(mod 7),60取模后等于4 4. 好了,下面开始计算密文:

比特币 挖矿原理_比特币的核心原理_比特币密码学原理论文

密文为2790,如何解密,解密公式:

比特币的核心原理_比特币密码学原理论文_比特币 挖矿原理

d对应私钥的2753,其余字母与加密过程相同,所以解密操作为:

比特币密码学原理论文_比特币的核心原理_比特币 挖矿原理

比特币密码学原理论文_比特币的核心原理_比特币 挖矿原理

我们得到了原始的明文数据65。在这个例子中,我们可以看到加密和解密后的数据是不一样的。

上面我们使用的算法就是大家熟知的地球主流非对称加密算法RSA。 RSA的介绍可以参考阮一峰老师的文章。 事实上,我上面使用的数字也来自这篇文章。 实在是时间有限,无法深入讲解RSA的细节。 你可以自学。 比特币系统中实际使用的非对称算法是椭圆曲线密码学(ECC),可以在这里详细了解。

从上面的例子我们知道存在满足非对称加密的密钥对,我们也尝试过加解密。 事实上,非对称加密算法的核心取决于一个具体的数学问题。 例如,上面的 RSA 依赖于大数分解问题。 如果问题解决了,算法本身就坏了。 另外我在读研的时候也做过RSA矩阵扩展,把它的算法基础从素数扩展到矩阵,有兴趣的可以继续交流。

非对称算法通过公钥和私钥的加解密方式,给信息交换带来了巨大的变化,具体表现在:

1)在不安全的环境中传输敏感信息成为可能。 由上可知,公钥是完全公开和自由传播的。 通过公钥计算出私钥是不可能的(或极其困难的)。 没有其他人需要知道。

2) 多方通信所需的密钥数量大幅减少,密钥维护变得极其简单。 比如N个人互不信任,需要互相交流,如果采用对称加密算法,N! /2个密钥,如果使用非对称加密,只需要N个(每个人只需要维护自己的公私对,不管与多少人通信)。

3)基于非对称加密(详见下文)发展起来的数字签名技术,从数学意义上解决了自我证明的问题,使信息接收方可以确认消息发送方的身份信息,不可更改。

4)密码学问题对数学问题的依赖程度从未如此之高。 以前看似无用甚至古老的数学问题,例如数论和离散对数,在这里大放异彩。 颇有几分反映了老师在《把时间当朋友》中所表达的“技不压身”的现实。

2.哈希(hash)算法

我们在使用各种云盘和虚拟存储空间应用的时候,想必都有类似的体验。 上传大文件非常快,但有时上传小得多的文件似乎需要很长时间。 . 这种现象的一个可能的秘密就是接下来要讨论的散列算法(也叫数据摘要或散列算法,散列是HASH的音译)。

比特币密码学原理论文_比特币的核心原理_比特币 挖矿原理

事实上,云盘产品只为同一个文件保留一个真实存储,多个用户使用同一个文件只需要“索引”到这个存储位置即可。 哈希算法用于判断两个文件是否相同:

哈希算法将一个任意长度的二进制值映射为一个较短的固定长度的二进制值,这个小的二进制值称为哈希值。 哈希值是一段数据的唯一且极其紧凑的数字表示。 如果您对一段明文进行哈希处理,甚至更改其中的一个字母,则后续哈希将产生不同的值。 在计算上不可能找到散列为相同值的两个不同输入,因此数据的散列值可用于检查数据的完整性。 一般用于快速查找和加密算法。

从本质上讲,哈希算法的目的不是“加密”,而是提取“数据特征”。 你也可以将给定数据的哈希值理解为数据的“指纹信息”。 一个可靠的哈希算法 F 需要满足:

1、对于给定的数据M,很容易计算出哈希值X=F(M);

2. M不能根据X计算;

3. 很难找到满足 F(M)=F(N) 的 M 和 N。

让我解释:

对于第一点,hash值的长度通常是固定的(为什么是固定的,一个很重要的原因是方便构造通信包结构,hash的应用场景通常是不可靠的网络传输而不是本地存储),例如比特币使用的 SHA256 摘要算法对任意长度的输入给出 256bit 的输出。

对于第二点,哈希算法是不可逆的,甚至是以丢失部分原始信息为代价的,所以个人认为哈希加密算法的制定是有问题的。 加密意味着它可以被解密。 纯粹的干扰称为加密。 不合适。 或许所谓哈希加密对应的是哈希验证,也就是说两者的应用场景不同。 哈希加密的核心是破坏,哈希验证的核心是验证。

对于第三点,这是哈希函数真正的挑战。 假设找到一对(M,N)使得方程成立,则算法发现了碰撞,分析哈希算法的鲁棒性就是分析其抵抗强碰撞的能力。 可以理解,碰撞的发生会让哈希算法本身的意义消失,因为不同的人被发现有相同的指纹。

比特币使用的哈希算法是SHA256,它是安全哈希算法SHA(Secure Hash Algorithm)系列算法之一(还有SHA-1、SHA-224、SHA-384、SHA-512等变体), SHA 由美国国家安全局 (NSA) 设计,由美国国家标准与技术研究院 (NIST) 发布。 主要适用于数字签名标准(DSS)中定义的数字签名算法(DSA)。 您可以在此处了解更多信息。

比特币密码学原理论文_比特币的核心原理_比特币 挖矿原理

最后,我想解释一下二次哈希问题。 读过比特币协议的读者可能已经注意到,在工作量证明和密钥编码过程中多次使用二次哈希,例如 SHA256(SHA256(k))或 RIPEMD160(SHA256(K)),好处是这种方法是在协议不明确的情况下增加了工作量或增加了破解难度,从安全性上来说并没有明显增加(如果是暴力破解,需要增加一倍的破解时间) . 真正的secondary hash是基于salted hash,什么意思? 对于特定的待哈希数据和特定的哈希算法,可以知道哈希值是一定的。 列来保护用户密码),那么很容易使用字典攻击来逆向计算。 比如我可以计算123456的SHA256值来逆向计算。 解决办法是先做一个hash比特币的核心原理,然后再加入随机数据,hash一次,这个随机数据就叫做salt。

3.数字签名

随着非对称加密和散列算法的编写,我们现在可以进一步了解数字签名。 顾名思义,数字签名是数字世界中的身份识别解决方案。 数字签名是不可否认的,不需要接缝印章、接缝签名或手写专家。

简单地说,所谓数字签名就是附加在数据单元上的一些数据,或者说是对数据单元进行的密码变换。 该数据或转换允许数据单元的接收者确认数据单元的来源和数据单元的完整性并保护数据免于被某人(例如,接收者)伪造。 它是一种以电子形式对消息进行签名的方法,签名后的消息可以在通信网络中传输。 数字签名可以基于公钥密码体制和私钥密码体制得到,主要是基于公钥密码体制的数字签名。

上面的解释有点学术化,换个说法:所谓数字签名就是签名者用自己的私钥对签名数据的摘要进行加密得到的值,也就是签名值。 签名者在发送数据签名时,需要将待签名的数据和签名值发送给对方。

注意签名对象不是待签名数据而是待签名数据的摘要,为什么呢? 因为非对称加密的速度通常比较慢,直接对原始数据的私钥进行加密非常慢,没有必要。

如何验证签名? 接收方先用签名者的公钥解密签名值得到摘要值,然后用约定的算法对签名后的数据进行哈希处理,与解密后的摘要值进行比较验证。

这里给出一个图形化的数字签名流程,帮助理解数字签名的全过程。

从上面对数字签名整个过程的描述来看,数字签名的核心在于签名,就是证明数据是签名者发送的,不可否认。 待签名数据的保密性不是数字签名方案要考虑的问题。

4.代码可读性

严格来说,编码部分并不是密码学理论的核心内容,但为了下面的清楚,我将可读编码放在这里简单说一下。

可读性编码易于理解,即不改变信息的内容,只改变内容的表达方式。 一些编码方式还加入了容错验证功能,通常是为了保证更好的通信传输。

比如二进制的1111对应十进制的15,就是一种编码。 它使用十进制来编码二进制。 现在我有一个问题。 我得到一个编码数据。 我如何知道数据使用了哪种编码形式? 这是通过前缀来实现的,例如,比特币地址的前缀为 0(十六进制为 0x00),在对私钥进行编码时前缀为 128(十六进制为 0x80)。