主页 > imtoken苹果版官网下载 > 比特币的加密算法

比特币的加密算法

imtoken苹果版官网下载 2023-07-01 15:16:23

比特币的加密算法有两种:非对称加密算法(椭圆曲线加密算法)和哈希算法(SHA256、RIMPED160算法)。

比特币私钥(private key)、公钥(public key)、公钥哈希值(pubkeyhash)、比特币地址(address)

公钥和私钥由椭圆曲线加密算法生成。 私钥可以用来推导出公钥,反之则不行。 这也是本文后半部分要介绍的部分。

使用您的私钥,您可以签署文本。 如果别人拿了你的公钥,他们就可以根据签名来验证你是否有私钥。 这就是你证明你有存款的方式。

为了安全起见,应该隐藏公钥。 于是对公钥进行哈希处理,生成公钥的哈希值并计算出该哈希值的比特币地址:

公钥散列 = RIMPED160(SHA256(公钥))

比特币地址=*1*+Base58(0+公钥哈希值+校验码)

校验码=前四个字节(SHA256(SHA256(0+公钥哈希值)))

可见地址和公钥的哈希值是等价的(可以相互推导),但是公钥的哈希值只能由公钥计算得出(不可逆)。

验证时需要提供签名和公钥,计算出公钥哈希值并与比特币支付脚本的公钥哈希值进行比较,最后验证签名。 这样可以确保公钥不会出现在支出脚本中。

(损益表提供签名,支出表提供公钥,或者损益表提供签名和公钥,支出表提供公钥的哈希值。这两种验证方式是比特币的标准脚本)

哈希算法

哈希算法(也称散列算法)不是加解密算法,因为加密过程是不可逆的(只能加密不能解密),没有所谓公钥和私钥的概念。

哈希算法的原理是将一段信息转换成定长的字符串。 这个字符串有两个特点:

1. 如果两条信息相同,则字符串也相同。

2、即使两条信息很相似,只要不一样,字符串就会很乱很随机,两个字符串之间没有任何关联。

信息可以是一串数字、一个文件或一本书。 . . . . . 只要能编码成一串数字即可。

显然,信息的种类是无数的,字符串的种类是有限的(因为是定长的),所以这种加密是不可逆的。

哈希算法的用途

比特币有可能被破解吗_比特币为什么破解不了_比特币不可破解

1. 验证两条信息是否相同。

A用QQ给B发了一个文件,这个文件会保存在QQ服务器上。 如果C也把这个文件传给D,QQ会比较这个文件的hash值和A发给B的文件的hash值是否相同,如果相同就说明是同一个文件,C不需要再次上传文件到服务器。 这就是所谓的即时传输。

压缩包在传输过程中可能会损坏。 压缩前计算原始文件的哈希值并放入压缩包中,解压后再次计算解压文件的哈希值。 通过比较压缩包中的哈希值可以知道文件是否损坏。 BT和迅雷下载中所谓的哈希校验也是一样的。

2.核实是否为信息持有人。

在论坛注册一个账号,如果论坛保存了密码,因为没有一个论坛是安全的比特币不可破解,有可能被破解,所以总是有密码被泄露的可能。

如果不保存密码但保存了密码的散列加密值。 下次登录论坛时,将输入的密码哈希值与注册时密码的哈希值进行比较。 如果相同,则可以证明您是密码持有者。 这样既保证了密码泄露的可能性,又保证了验证持有人的功能。

哈希算法破解

如果论坛被破解,黑客获得了哈希值,但是黑客仅凭哈希值仍然无法登录论坛,他就必须破解用户的密码。

他可以随机生成密码,一个一个地尝试。 如果计算出的哈希值与这个哈希值完全相同,则说明密码可用。 这称为密码猜测。

显然,密码越长越复杂,被猜到的可能性就越小。 如果有办法将猜测的概率提高到一个可容忍的大范围,哈希算法就被破解了。

比如原来的猜测概率是1/10000000000000,现在增加到1/1000。 如果猜一个密码需要1秒,按照之前猜太阳毁灭的概率,你可能会错过,但后者只要1小时就够了。

另外,由于信息的种类不限,你猜到的密码可能不是原来的密码,它们可能恰好哈希值相同,这就叫碰撞。

就像增加猜测的概率一样,如果能增加碰撞的概率,你也可以轻松登陆论坛(因为论坛不知道原来的密码是多少,所以猜的密码不一样也无所谓来自原始密码,只要散列值相同)。

一旦容易发生碰撞,哈希算法就被破坏了。 前几年闹得沸沸扬扬的哈希算法破解就是如此。 数学家通过某些方法增加了碰撞的概率。

哈希算法粗加密过程

1.对原文进行补充分割(一般分为多个512位的文本,进一步分为16个32位的整数)。

2、初始化哈希值(一般分为多个32位整数,例如SHA256就是一个256位的哈希值分解成8个32位整数)。

比特币有可能被破解吗_比特币不可破解_比特币为什么破解不了

3、计算哈希值(根据不同的算法进行不同轮次的计算,每个512位的文本都要经过这几轮计算)。

经过这样的处理,哈希值显得非常杂乱和随机。

非对称加密算法

非对称加密算法是世界上最重要的加密和解密算法。

所谓非对称,就是加密和解密使用的公钥和私钥不同。

非对称加密算法依赖于解决一个数学问题的难度和验证一个数学问题的简单性。

RSA算法

著名的RSA加密算法是利用大整数难因式分解的原理编写的,而大整数由因式组成很容易验证。

具体来说,比如求143的因数,可能需要进行11次除法,才能得到143=11*13的结果。 但是要验证11*13=143,只需要一次乘法就够了。

如果你想破解RSA,你只需要能够快速分解大整数。 显然,这是破解 RSA 的最简单、最快速的方法。 但是分解一个大整数是极其困难的(数学上称为NP-Hard问题),这也是RSA可以保证无法破解的原因。

反之,如果有一天人类找到了一种快速分解大整数的方法(比如使用量子计算机进行计算),RSA算法就会立刻被破解。

RSA算法的一般原理

生成公钥和私钥:

1、生成一对大素数p、q,求n=p*q和f=(p-1)*(q-1)。

2、生成一个满足e3的随机数e,求e关于f的模逆d,即求e*d=1 mod f。

令明文为m比特币不可破解,密文为g。

用公钥n加密,e:m^e=g mod n

比特币不可破解_比特币为什么破解不了_比特币有可能被破解吗

用私钥n,d解密:g^d=m mod n

证明解密后的明文就是原来的明文:

根据加解密规则,将g=m^e mod n代入g^d=m mod n后,发现足以证明m^(e*d)=m mod n(原理同余运算)。

由于e*d=1 mod f,只需要证明m^(f+1)=m mod n。 根据欧拉定理,f是欧拉函数,故得证。 (具体的数学原理这里不再赘述)

显然,如果知道f,就可以根据公钥n,e计算出d来破解明文。 要知道 f,就必须知道 p 和 q。 要知道 p 和 q,必须分解 n。 所以RSA破解依赖于整数分解。

如果你对RSA算法感兴趣,可以看看这两篇文章。

椭圆曲线密码算法

设想一种乘法,已知a和b可以计算出c=a*b,但是已知c和a就不能计算出b。

我们可以使用这个乘法来进行加密和解密。

假设明文m,密文g1,g2。

用公钥 a,c=a*b,r(随机数)加密:

g1=m+r*c

g2=r*a

用私钥a,b解密:m=g1-b*g2

证明:

g1-b*g2

=m+r*cb*r*a

比特币有可能被破解吗_比特币不可破解_比特币为什么破解不了

=m+r*cr*c

=米

我们还可以利用这种乘法来进行签名认证。

假设原文m,签名g1,g2。

使用私钥 a、b、r(随机数)签名:

x=r*a

g1=SHA(m,x)

g2=r-g1*b

使用公钥进行身份验证:

g2*a+g1*c

=(r-g1*b)*a+g1*c

=r*a-g1*b*a+g1*c

=r*a-g1*c+g1*c

=r*a

=x

计算SHA(m,x)是否等于g1。

这就是加解密级别的椭圆曲线加密算法。

比特币为什么破解不了_比特币不可破解_比特币有可能被破解吗

椭圆曲线密码算法的点乘运算

如何找到这样的乘法是椭圆曲线加密算法的关键。 通常的整数乘法不能满足这样的要求。 乘法来源于加法,我们必须定义新的运算规则。

比如定义a!+b=a*b,a!*b=b^a,其中!+和!*是新定义的加法和乘法,所以我们得到如下结论:

加法交换律:a!+b=b!+a

加法结合律:(a!+b!)+c=a!+(b!+c)

存在加法零元素:a!+1=a*1=a,其中1相当于普通加法中的0。

加性负元素存在:a!+b=a!+(1/a)=a*(1/a)=1

数量乘法单元元素存在:1!*b=b^1=b

量乘结合律:(a*b)!*c=c^(a*b)=c^(b*a)=c^b^a=a!*(c^b)=a!*( b!*c)

加乘分配率:(k+l)!*a=k!*a+l!*a

加乘分配率:k!*(a!+b)=k!*a!+k!*b

这种加法和乘法在普通的加法和乘法中满足了很多性质,但是满足了一些特定的条件。 比如根据a和c=a!*b=a^b求b比原来的乘法更难(需要对数运算)。

我们的目标是找到满足上述条件的加法和乘法。 数学家通过研究椭圆曲线得出了这个结论:

假设平面上有两点P(x1,y1)和Q(x2,y2),则P+Q=R(x3,y3),满足x3=k^2-2x1,y3=k(x1-x3)- y1 , k=(3*x1)/(2y1)。 定义 k*P=P+P+P+....+P。

这样的一套算术规则(加法和点乘法)(关于平面上的点)就满足了这样的要求。

这与椭圆曲线有什么关系? 其实如果P和Q都是y^2=x^3+7曲线上的点,那么P+Q=R也是y^2=x^3+7椭圆曲线上的一个点,这三个点在一条直线上。

这不是巧合,而是颠倒过来的。 即当P、Q为曲线上的点时,则直线PQ与曲线的交点为R,计算R的坐标为(x3,y3)。

使用椭圆曲线加密算法是因为它比RSA算法速度更快,并且可以实现与RSA算法类似的功能。

在实际使用中,还需要对曲线和点进行离散化,扩展坐标系。 这里涉及到更多的数学知识,有兴趣的可以参考这篇文章:

比特币中椭圆曲线使用的参数,可以参考这个: