密码学
Please read Substrate to Polkadot SDK page first.
密码学为共识系统、数据完整性和用户安全提供了数学可验证性。虽然了解与区块链相关的密码学的根本性总体应用对于普通开发人员来说至关重要,但底层的数学过程本身并不一定相关。本页提供了 Parity 和更广泛的生态系统中各种密码学实现的基础上下文。
哈希函数
哈希是一种数学过程,它使用 2 个介于零和 255 次方之间的随机且唯一的数字输入,在任何数据片段和 32 字节引用之间创建一对一映射。使用哈希函数,任何数据(包括简单文本、图像或任何其他形式的文件)都会获得一个独特且完全唯一的标识符。哈希用于验证数据完整性、创建数字签名以及提供一种安全的方式来存储密码。这种形式的映射被称为“鸽巢原理”,它主要用于有效且可验证地从大型集合中识别数据。
这些函数是确定性的,这意味着相同的输入始终会产生相同的输出。这对于确保两台不同的计算机能够就相同的数据达成一致至关重要。它们可以设计为快速或慢速,具体取决于目的。快速哈希函数在速度至关重要时使用,而慢速哈希函数在安全是优先事项时使用。慢速哈希函数还用于通过增加找到数据的所需工作量来减轻暴力攻击的成功率。
抗碰撞性
在区块链中,哈希函数还用于提供抗碰撞性。这些由攻击者执行,攻击者计算或控制两个数字输入,试图找到两个相同的值以获取对加密对象的访问权限。对于部分碰撞,应用类似的方法,但只试图找到两个值,这两个值共享前几位,而不是全部。
虽然只实现部分抗碰撞性在计算上更轻量级,并且提供了相当强的保护,以防止发生碰撞,但在面对资源丰富的对手(如国家)时,它是一个安全性较低的选择,因为使用大量的计算能力,暴力破解前几位要容易得多。也就是说,对于平均攻击向量(即恶意行为者)来说,它是可以接受的。
Blake2
在设计新的区块链协议或生态系统时,重要的是要考虑所使用的密码学方法的计算成本。为了优先考虑效率和处理器负载,Substrate 使用 Blake2。
Blake2 是一种相对较新的哈希方法,它提供了与 SHA2 相同或更高的安全性,同时比其他可比算法快得多。虽然确定其相对于其他哈希方法的速度改进的精确基准高度依赖于硬件规格,但对 Substrate 最大的积极影响是它极大地减少了新节点与链同步所需的时间和资源,并在较小程度上降低了验证所需的验证时间。
有关 Blake2 的全面视图,请参阅其官方文档。
密码学类型
密码学算法有两种不同的实现方式:对称密码学和非对称密码学。
对称密码学
对称加密是密码学的一个分支,它不像非对称密码学那样基于单向函数。它使用相同的加密密钥来加密明文和解密结果密文。
对称密码学是历史上一直使用的加密类型,例如 Enigma 密码和凯撒密码。它在今天仍然被广泛使用,并且可以在 Web2 和 Web3 应用程序中找到。只有一个密钥,并且需要接收者也能够访问它才能访问包含的信息。
非对称密码学
非对称加密是一种密码学类型,它使用两个不同的密钥,称为密钥对:一个公钥,用于加密明文,以及一个私钥,用于解密密文。
公钥用于加密只能使用接收者的私钥(有时还需要一个设置的密码)解密的固定长度消息。公钥可用于以密码方式验证相应的私钥是否用于创建数据片段,而不会泄露私钥本身,例如使用数字签名。这对身份、所有权和属性具有明显的意义,并且在 Web2 和 Web3 中的许多不同协议中使用。
权衡和折衷
对称密码学更快,并且需要更少的密钥位数才能达到与非对称密码学相同的安全级别。但是,它需要在通信开始之前共享一个秘密,这会对其完整性构成问题,并可能成为一个潜在的妥协点。另一方面,非对称密码学不需要提前共享秘密,从而可以提供更好的最终用户安全性。
混合对称和非对称密码学通常用于克服非对称密码学的工程问题,因为它速度较慢,并且需要更多的密钥位数才能达到相同的安全级别。它用于加密密钥,然后使用相对轻量级的对称密码来对消息进行“繁重处理”。
数字签名
数字签名是一种使用非对称密钥对验证文档或消息真实性的方法。它们用于确保发送者或签署者的文档或消息在传输过程中未被篡改,以及让接收者验证所述数据是否准确且来自预期发送者。
签署数字签名只需要对数学和密码学有低级别的了解。举一个概念性的例子——签署支票时,预计支票不能多次兑现。这不是签名系统的功能,而是支票序列化系统。银行会检查支票上的序列号是否已被使用。数字签名本质上将这两个概念结合起来,允许签名本身通过一个无法复制的独特加密指纹来提供序列化。
与笔迹签名不同,数字签名的知识不能用来创建其他签名。数字签名通常用于官僚流程,因为它们比简单地扫描签名并将其粘贴到文档上更安全。
Substrate 提供多种不同的加密方案,并且是通用的,因此它可以支持任何实现Pair
特性的方案。
椭圆曲线
区块链技术需要能够让多个密钥为区块提议和验证创建签名。为此,椭圆曲线数字签名算法 (ECDSA) 和 Schnorr 签名是最常用的两种方法。虽然 ECDSA 的实现要简单得多,但 Schnorr 签名在多重签名方面效率更高。
Schnorr 签名相对于ECDSA/EdDSA 方案具有一些显著的特征:
- 它更适合分层确定性密钥派生。
- 它允许通过签名聚合进行原生多重签名。
- 它通常更能抵抗误用。
使用 Schnorr 签名而不是 ECDSA 时所做出的一个牺牲是,两者都需要 64 字节,但只有 ECDSA 签名会传达其公钥。
各种实现
ECDSA
Substrate 提供使用secp256k1 曲线的ECDSA 签名方案。 这与用于保护比特币和以太坊的加密算法相同。
Ed25519
Ed25519 是使用Curve25519 的 EdDSA 签名方案。 它在设计和实现的多个级别上经过精心设计,以实现非常高的速度,而不会影响安全性。
SR25519
SR25519 基于与Ed25519 相同的底层曲线。 但是,它使用 Schnorr 签名而不是 EdDSA 方案。
下一步去哪里
- Polkadot 上的密码学。
- W3F 的研究:密码学。
Hash
特性,用于实现新的哈希算法。Pair
特性,用于实现新的加密方案。