公钥加密算法
在区块链中,一般使用两种主要的加密算法:
- 公钥/私钥加密算法:这种加密算法使用一对公钥和私钥。公钥可以公开分发,而私钥需要保密。只有拥有私钥的人才能解密使用公钥加密的数据。这种加密方法被广泛用于数字签名和身份验证,因为它可以确认数据的来源和完整性。在区块链中,私钥用于确认交易者的身份,而公钥则被广播给网络中的其他节点以验证交易的有效性。
- RSA算法:这是一种常用的公钥/私钥加密算法,由Ron Rivest、Adi Shamir 和 Leonard Adleman于1978年发明。它是一种非对称加密算法,也就是说,用于加密的密钥和用于解密的密钥是不同的。
- ECDSA(椭圆曲线数字签名算法):这是一种基于RSA算法的改进版,使用椭圆曲线密码学,使得签名过程更快速且更安全。在区块链中,ECDSA被用于验证交易的数字签名。
拓展知识:
哈希函数是一种将任意长度的数据(如文本、数字等)转换为固定长度(通常为256位或512位)的摘要的方法。它们非常快且非常安全,因为改变数据中的一小部分(即使是微小的改变)会导致哈希结果的变化非常大,甚至不可逆。这种特性使得哈希函数在区块链中被广泛使用,如区块的merkle树结构、交易的数字签名以及密码学钱包的存储等。
比特币区块链主要使用SHA-256作为其哈希函数,这是由David Chaum和Mayra P. Chilomchik在1997年引入的一种算法。SHA-256提供了一种非常安全的方式来创建区块链并确保交易的安全性。此外,区块链中的Merkle树结构也是基于SHA-256的哈希函数来创建的。
以上两种加密算法和哈希函数在区块链中都扮演着非常重要的角色,它们保证了交易的安全性、完整性和匿名性,同时也确保了区块链网络的去中心化和不可篡改性。
同时,由于区块链中的数据是以区块的形式不断增长的,这些加密算法还被用于创建区块头和区块间的链接,进一步提高了区块链的性能和安全性。
B. 图文彻底搞懂非对称加密(公钥密钥)
前文详细讲解了对称加密及算法原理。那么是不是对称加密就万无一失了呢?对称加密有一个天然的缺点,就是加密方和解密方都要持有同样的密钥。你可以能会提出疑问:既然要加、解密,当然双方都要持有密钥,这有什么问题呢?别急,我们继续往下看。
我们先看一个例子,小明和小红要进行通信,但是不想被其他人知道通信的内容,所以双方决定采用对称加密的方式。他们做了下面的事情:
1、双方商定了加密和解密的算法
2、双方确定密钥
3、通信过程中采用这个密钥进行加密和解密
这是不是一个看似完美的方案?但其中有一个步骤存在漏洞!
问题出在步骤2:双方确定密钥!
你肯定会问,双方不确定密钥,后面的加、解密怎么做?
问题在于确定下来的密钥如何让双方都知道。密钥在传递过程中也是可能被盗取的!这里引出了一个经典问题:密钥配送问题。
小明和小红在商定密钥的过程中肯定会多次沟通密钥是什么。即使单方一次确定下来,也要发给对方。加密是为了保证信息传输的安全,但密钥本身也是信息,密钥的传输安全又该如何保证呢?难不成还要为密钥的传输再做一次加密?这样不就陷入了死循环?
你是不是在想,密钥即使被盗取,不还有加密算法保证信息安全吗?如果你真的有这个想法,那么赶紧复习一下上一篇文章讲的杜绝隐蔽式安全性。任何算法最终都会被破译,所以不能依赖算法的复杂度来保证安全。
小明和小红现在左右为难,想加密就要给对方发密钥,但发密钥又不能保证密钥的安全。他们应该怎么办呢?
有如下几种解决密钥配送问题的方案:
非对称加密也称为公钥密码。我更愿意用非对称加密这种叫法。因为可以体现出加密和解密使用不同的密钥。
对称加密中,我们只需要一个密钥,通信双方同时持有。而非对称加密需要4个密钥。通信双方各自准备一对公钥和私钥。其中公钥是公开的,由信息接受方提供给信息发送方。公钥用来对信息加密。私钥由信息接受方保留,用来解密。既然公钥是公开的,就不存在保密问题。也就是说非对称加密完全不存在密钥配送问题!你看,是不是完美解决了密钥配送问题?
回到刚才的例子,小明和下红经过研究发现非对称加密能解决他们通信的安全问题,于是做了下面的事情:
1、小明确定了自己的私钥 mPrivateKey,公钥 mPublicKey。自己保留私钥,将公钥mPublicKey发给了小红
2、小红确定了自己的私钥 hPrivateKey,公钥 hPublicKey。自己保留私钥,将公钥 hPublicKey 发给了小明
3、小明发送信息 “周六早10点soho T1楼下见”,并且用小红的公钥 hPublicKey 进行加密。
4、小红收到信息后用自己的私钥 hPrivateKey 进行解密。然后回复 “收到,不要迟到” 并用小明的公钥mPublicKey加密。
5、小明收到信息后用自己的私钥 mPrivateKey 进行解密。读取信息后心里暗想:还提醒我不迟到?每次迟到的都是你吧?
以上过程是一次完整的request和response。通过这个例子我们梳理出一次信息传输的非对称加、解密过程:
1、消息接收方准备好公钥和私钥
2、私钥接收方自己留存、公钥发布给消息发送方
3、消息发送方使用接收方公钥对消息进行加密
4、消息接收方用自己的私钥对消息解密
公钥只能用做数据加密。公钥加密的数据,只能用对应的私钥才能解密。这是非对称加密的核心概念。
下面我用一个更为形象的例子来帮助大家理解。
我有下图这样一个信箱。
由于我只想接收我期望与之通信的朋友信件。于是我在投递口加了一把锁,这把锁的钥匙(公钥)我可以复制n份,发给我想接受其信件的人。只有这些人可以用这把钥匙打开寄信口,把信件投入。
相信通过这个例子,可以帮助大家彻底理解公钥和私钥的概念。
RSA 是现在使用最为广泛的非对称加密算法,本节我们来简单介绍 RSA 加解密的过程。
RSA 加解密算法其实很简单:
密文=明文^E mod N
明文=密文^D mod N
RSA 算法并不会像对称加密一样,用玩魔方的方式来打乱原始信息。RSA 加、解密中使用了是同样的数 N。公钥是公开的,意味着 N 也是公开的。所以私钥也可以认为只是 D。
我们接下来看一看 N、E、D 是如何计算的。
1、求 N
首先需要准备两个很大质数 a 和 b。太小容易破解,太大计算成本太高。我们可以用 512 bit 的数字,安全性要求高的可以使用 1024,2048 bit。
N=a*b
2、求 L
L 只是生成密钥对过程中产生的数,并不参与加解密。L 是 (a-1) 和 (b-1) 的最小公倍数
3、求 E(公钥)
E 有两个限制:
1<E<
E和L的最大公约数为1
第一个条件限制了 E 的取值范围,第二个条件是为了保证有与 E 对应的解密时用到的 D。
4、求 D(私钥)
D 也有两个限制条件:
1<D<L
E*D mod L = 1
第二个条件确保密文解密时能够成功得到原来的明文。
由于原理涉及很多数学知识,这里就不展开细讲,我们只需要了解这个过程中用到这几个数字及公式。这是理解RSA 安全性的基础。
由于 N 在公钥中是公开的,那么只需要破解 D,就可以解密得到明文。
在实际使用场景中,质数 a,b 一般至少1024 bit,那么 N 的长度在 2048 bit 以上。D 的长度和 N 接近。以现在计算机的算力,暴力破解 D 是非常困难的。
公钥是公开的,也就是说 E 和 N 是公开的,那么是否可以通过 E 和 N 推断出 D 呢?
E*D mod L = 1
想要推算出 D 就需要先推算出 L。L 是 (a-1) 和 (b-1) 的最小公倍数。想知道 L 就需要知道质数 a 和 b。破解者并不知道这两个质数,想要破解也只能通过暴力破解。这和直接破解 D 的难度是一样的。
等等,N 是公开的,而 N = a*b。那么是否可以对 N 进行质因数分解求得 a 和 b 呢?好在人类还未发现高效进行质因数分解的方法,因此可以认为做质因数分解非常困难。
但是一旦某一天发现了快速做质因数分解的算法,那么 RSA 就不再安全
我们可以看出大质数 a 和 b 在 RSA 算法中的重要性。保证 a 和 b 的安全也就确保了 RSA 算法的安全性。a 和 b 是通过伪随机生成器生成的。一旦伪随机数生成器的算法有问题,导致随机性很差或者可以被推断出来。那么 RSA 的安全性将被彻底破坏。
中间人攻击指的是在通信双方的通道上,混入攻击者。他对接收方伪装成发送者,对放送放伪装成接收者。
他监听到双方发送公钥时,偷偷将消息篡改,发送自己的公钥给双方。然后自己则保存下来双方的公钥。
如此操作后,双方加密使用的都是攻击者的公钥,那么后面所有的通信,攻击者都可以在拦截后进行解密,并且篡改信息内容再用接收方公钥加密。而接收方拿到的将会是篡改后的信息。实际上,发送和接收方都是在和中间人通信。
要防范中间人,我们需要使用公钥证书。这部分内容在下一篇文章里会做介绍。
和对称加密相比较,非对称加密有如下特点:
1、非对称加密解决了密码配送问题
2、非对称加密的处理速度只有对称加密的几百分之一。不适合对很长的消息做加密。
3、1024 bit 的 RSA不应该在被新的应用使用。至少要 2048 bit 的 RSA。
RSA 解决了密码配送问题,但是效率更低。所以有些时候,根据需求可能会配合使用对称和非对称加密,形成混合密码系统,各取所长。
最后提醒大家,RSA 还可以用于签名,但要注意是私钥签名,公钥验签。发信方用自己的私钥签名,收信方用对方公钥验签。关于签名,后面的文章会再详细讲解。
C. 公开密钥密码体系公开密钥算法
公开密钥密码体系是密码学领域中的一种重要技术,它基于数学难题来确保安全。该体系由迪菲和赫尔曼于1976年首次提出,但最流行的RSA算法则由Rivest、Shamir和Adleman在1977年共同开发。RSA算法使用一对密钥:一个公共密钥和一个专用密钥。用户需保护专用密钥的安全,而公共密钥则可公开发布。这一特性使得公钥加密算法无需联机密钥服务器,简化了密钥管理。
公钥加密算法也称非对称密钥算法,与传统的对称密钥密码体制不同,它要求密钥成对出现,一个用于加密,另一个用于解密,且从一个无法推导出另一个。多数公钥算法的安全基础基于一些数学难题,如因子分解问题,专家们认为短期内无法解决。由于这些难题的存在,使得公钥算法具有较高的安全性。
RSA公钥加密算法是最广泛使用的公钥算法之一,它使用两个密钥进行加密和解密,其中一个是公共密钥,另一个是专用密钥。RSA算法的安全性取决于密钥的长度,通常密钥长度从40位到2048位不等。随着密钥长度的增加,加密效果越好,但加密解密的开销也更大。因此,在安全性和性能之间需要做出折衷考虑。例如,SSL(Secure Socket Layer)协议就广泛使用了RSA算法,尤其在美国和加拿大使用128位RSA算法,而在中国等其他地区则使用40位版本。
RSA算法的最初目标是解决DES(Data Encryption Standard)算法在秘密密钥分发过程中的难题,同时提供了数字签名功能,用于保护数据信息的完整性、防止对数据的否认与抵赖。数字签名还能够帮助识别攻击者对数据的非法篡改,确保数据的可控性。
公钥加密技术在Web商务、信用卡购物等场景中具有重要应用价值,允许在服务器认为可信的认证机构(CA)存在的情况下,进行安全通信。然而,目前全球范围内尚缺乏被广泛信赖的CA。RSA算法通过数字签名提供了一种有效的方式来保护数据信息的完整性,以及实现数据的保密性、可用性和可控性,成为解决信息安全问题的核心技术之一。
在实际应用中,公钥加密技术与专用密钥技术结合使用,以实现最佳性能。通常,使用公钥加密技术在通信双方之间传输专用密钥,然后使用专用密钥对实际传输的数据进行加密和解密。此外,公钥加密技术还用于对专用密钥进行加密。在众多公开密钥密码算法中,RSA算法因其在数字签名、数据完整性和可控性方面的应用而广受欢迎,被PGP(Pretty Good Privacy)加密系统等工具软件采用,显示出其强大的应用潜力。
(3)公钥加密算法扩展阅读
公开密钥密码体制是现代密码学的最重要的发明和进展。一般理解密码学(Cryptography)就是保护信息传递的机密性。
D. 常见的公钥密码算法有rsa算法
常见的公钥密码算法有rsa算法。常见的公钥加密算法有:RSA、ElGamal、背包算法、Rabin(RSA的特例)、迪菲-赫尔曼密钥交换协议中的公钥加密算法、椭圆曲线加密算法(EllipticCurveCryptography,ECC),DSA数字签名(又称公钥数字签名),将摘要信息用发送者的私钥加密,接收者用发送者的公钥才能解密被加密的摘要信息,也属于公开密钥加密算法。
E. 公钥加密常见的公钥加密算法有
在公钥加密的世界中,几种常见的算法为我们提供了安全的信息传输保障。首先,我们有RSA,由Rivest、Shamir和Adleman三位科学家的姓氏首字母命名,它是最广为人知的公开密钥加密算法,因其高效和安全性深受信赖。
接着是ElGamal算法,作为非对称加密的一种,它同样具有独特的加密机制,被广泛应用在数据加密和密钥交换中。不同于RSA,ElGamal在加密过程中涉及更多的步骤,但这也为它提供了额外的安全层。
背包算法和Rabin算法也值得一提,Rabin算法可以看作是RSA的一种简化版本,特别适用于轻量级的加密需求。而Diffie-Hellman (D-H) 密钥交换协议,虽然不是直接的加密算法,但它的公钥加密机制在保证安全通信中发挥着重要作用。
最后,我们有椭圆曲线加密算法(ECC),这是一种基于数学中椭圆曲线理论的加密方法,尤其在资源有限的设备上,由于其高效的计算性能,ECC展现出了强大的竞争力。
总的来说,这些公钥加密算法各具特色,RSA、ElGamal以及ECC凭借其独特的设计和广泛应用,构成了现代加密技术的重要组成部分。它们在保护数据隐私和网络通信安全方面发挥着至关重要的作用。
(5)公钥加密算法扩展阅读
中文名称:公钥加密