3.2 加密和解密算法
哈希算法只是一种单向密码体制,即它是一个从消息到摘要的不可逆映射,只有正向过程,没有逆向过程。在区块链系统中,区块链账户地址的生成、数据传输还会用到支持加密和解密的密码体制。密码体制分为对称密码体制和非对称密码体制。传统的密码学主要研究对称加密,即在加密和解密的过程中使用相同的密钥或规则,其优势在于算法公开、计算量小、加密速度快。然而,对称加密需要发送方和接收方共享同一把密钥,因而难以实现有效的密钥分发和安全存储是其最大的缺点。同时,每一对发送方和接收方都需要使用同一把密钥,这在大规模通信中将会产生大量密钥,从而增加用户在密钥管理方面的负担。
3.2.1 对称密码体制
对称加密是对明文的数据按某种算法处理,让数据转换为不可读的数据(称为“密文”),从而达到数据不被窃取和阅读的目的。解密则相反,是将密文转化为明文的过程。
一个密码系统由密码算法和密钥两个基本组件构成。密钥是隐私数据,由用户自行保管,而算法是公开的,任何人都使用同一种算法。对称加密的原理如图3-1所示。对称加密是一种变换,用户A向用户B发送一份经过加密的消息,传输给用户B,用户B收到消息并逆向解密出原始的信息。
图3-1
在对称密码算法早期的实际应用中,其密钥分发曾经是一个难题。1976年,惠特菲尔德·迪菲(Whitfield Diffie)和马丁·赫尔曼(Martin Hellman)的论文《密码学的新方向》(New Directions in Cryptography)提出了Diffie-Hellman密钥交换算法,解决了对称密码算法密钥分发的问题。该论文同时指出,加密和解密可以使用不同的密钥和规则,从而第一次使没有共享密钥的双方能够安全地通信。这项划时代的工作奠定了非对称密码体制的基础。密码学的研究热潮使得利用密码学来保护个人隐私和自由的观念深入人心。同时,数字加密货币的初期研究也借势蓬勃发展,诞生了密码学匿名现金系统eCash、分布式电子加密货币B-money、哈希现金HashCash等数字加密货币的雏形,为后期比特币的诞生提供了实践上的指导。
3.2.2 非对称密码体制
非对称密码体制的密钥成对出现,分为公钥和私钥两个部分,公钥PK用于加密或验证签名,私钥SK用于解密或签名,只有解密者知道。两个密钥之间不能从公钥推算出私钥,用公钥加密的数据只能使用对应的私钥解密,用私钥签名的数据只能使用对应的公钥验证。非对称加密的原理如图3-2所示。用户A使用用户B的公钥PK对明文P进行加密得到密文C,用户B用自己的私钥SK对密文C解密得到明文P。非对称密码系统与对称密码系统相比,不仅具有保密功能,同时也能实现密钥分发和身份认证。基于数字签名的身份认证是非对称密码系统的典型应用。在这个过程中,用户A先用自己的私钥SK对消息M进行签名得到S,随后用户B使用用户A的公钥PK对M、S进行验证,来判断S是否为用户A对M的签名。在一个典型的通信系统中,消息M是用户B发给用户A的一个随机数,如果用户A能够用M和自己的私钥SK计算出正确的签名S,并通过用户B的验证,则用户B可以确认用户A的身份,否则用户B将拒绝与用户A进行后续的通信。
图3-2
非对称密码体制将加密和解密能力分开:多用户加密的结果由一个用户解密,可用于在公共网络中实现保密通信;单用户签名的信息可由多用户验证,可用于实现对用户的身份认证。
3.2.3 ED25519算法
ED25519算法是由科学家、密码学家丹尼尔·朱利叶斯·伯恩斯坦(Daniel Julius Bernstein)在2006年设计的与现有的任何椭圆曲线算法都完全不同的椭圆曲线签名算法,可用于区块链签名。签名过程不依赖随机数生成器,不依赖哈希函数的抗碰撞性,没有时间通道攻击的问题。
ED25519算法属于EDDSA算法家族,使用Curve25519椭圆曲线参数,其签名和验证的性能都极高。在比特币和以太坊系统中,签名算法使用的是ECDSA家族的Secp256k1椭圆曲线参数,表3-2为这两个椭圆曲线算法的特点对比。
表3-2
从表3-2基本数据的对比中可以看出,使用Secp256k1实现的ECDSA算法和使用Curve25519实现的ED25519算法的差别比较小。不同之处在于,ED25519算法的重点放在了安全性上,其签名的过程不依赖随机函数,具备防哈希碰撞特性,也没有时间通道攻击的危险。