加密货币常见加密算法

加密货币常见加密算法

文/温国兵

本文由币乎社区(bihu.com)内容支持计划奖励。

这是「区块链技术指北」的第 20 篇文章。

如果对我感兴趣,想和我交流,我的微信号:Wentasy,加我时简单介绍下自己,并注明来自「区块链技术指北」。同时我会把你拉入微信群「区块链技术指北」。BTW,李笑来老师也加入了我的知识星球,文末有加入方式。

0x00 密码学


互联网世界,密码无处不在。中心化的系统存在账户,有账户就有账户名和密码,密码可以说是标识账号归属的最重要手段之一。

我们来看维基百科怎么阐释 密码学

密码学(英语:Cryptography)可分为古典密码学和现代密码学。在西欧语文中,密码学一词源于希腊语 kryptós“隐藏的”,和 gráphein“书写”。古典密码学主要关注信息的保密书写和传递,以及与其相对应的破译方法。而现代密码学不只关注信息保密问题,还同时涉及信息完整性验证(消息验证码)、信息发布的不可抵赖性(数字签名)、以及在分布式计算中产生的来源于内部和外部的攻击的所有信息安全问题。古典密码学与现代密码学的重要区别在于,古典密码学的编码和破译通常依赖于设计者和敌手的创造力与技巧,作为一种实用性艺术存在,并没有对于密码学原件的清晰定义。而现代密码学则起源于 20 世纪末出现的大量相关理论,这些理论使得现代密码学成为了一种可以系统而严格地学习的科学。[1]

使用密码学可以达到以下目的:

  • 保密性:防止用户的标识或数据被读取;
  • 数据完整性:防止数据被更改;
  • 身份验证:确保数据发自特定的一方。
题图来自: © Sabarinath / Meltdown and Spectre / techlog360.com

0x01 分类


在讲解加密算法之前,我们来看下 Base64 编码。Base64 编码可对传输中的数据进行简单处理,使之不易被辨认,它并不是一种加密算法,它只是一种编码方式。

比如读者在终端执行如下命令就可以获取到我的邮箱:

echo ZGJhcm9iaW53ZW5AZ21haWwuY29tCg== |  base64 --decode

根据密钥类型不同将现代密码技术分为两类:对称加密算法(秘密钥匙加密)非对称加密算法(公开密钥加密)。对称钥匙加密系统是加密和解密均采用同一把秘密钥匙,而且通信双方都必须获得这把钥匙,并保持钥匙的秘密。非对称密钥加密系统采用的加密钥匙(公钥)和解密钥匙(私钥)是不同的。[2]

0x02 对称加密算法


对称加密算法用来对敏感数据等信息进行加密,常用的算法包括:

  • DES(Data Encryption Standard):数据加密标准,速度较快,适用于加密大量数据的场合;
  • 3DES(Triple DES):是基于 DES,对一块数据用三个不同的密钥进行三次加密,强度更高;
  • AES(Advanced Encryption Standard):高级加密标准,是下一代的加密算法标准,速度快,安全级别高。

2.1 DES 加密算法


DES 加密算法是一种分组密码,以 64 位为分组对数据加密,它的密钥长度是 56 位,加密解密用同一算法。DES 加密算法是对密钥进行保密,而公开算法,包括加密和解密算法。这样,只有掌握了和发送方相同密钥的人才能解读由 DES 加密算法加密的密文数据。因此,破译 DES 加密算法实际上就是搜索密钥的编码。对于 56 位长度的密钥来说,如果用穷举法来进行搜索的话,其运算次数为 256。
随着计算机系统能力的不断发展,DES 的安全性比它刚出现时会弱得多,然而从非关键性质的实际出发,仍可以认为它是足够的。不过,DES 现在仅用于旧系统的鉴定,而更多地选择新的加密标准。

2.2 AES 加密算法


AES 算法基于排列和置换运算。排列是对数据重新进行安排,置换是将一个数据单元替换为另一个。AES 使用几种不同的方法来执行排列和置换运算。

AES 是一个迭代的、对称密钥分组的密码,它可以使用 128、192 和 256 位密钥,并且用 128 位(16 字节)分组加密和解密数据。与公共密钥密码使用密钥对不同,对称密钥密码使用相同的密钥加密和解密数据。通过分组密码返回的加密数据的位数与输入数据相同。迭代加密使用一个循环结构,在该循环中重复置换和替换输入数据。

2.3 3DES 加密算法


3DES 是三重数据加密,且可以逆推的一种算法方案。但由于 3DES 的算法是公开的,所以算法本身没有密钥可言,主要依靠唯一密钥来确保数据加解密的安全。到目前为止,仍没有人能破解 3DES。

3DES 和 AES 有什么区别呢?AES 加密算法使用的对称 block 密码,密钥长度有 128、192 和 256 位密码,加密速度快,解密时间(假设机器每秒尝试 255 个密钥)大约需要 1490000 亿年,资源消耗低;而 3DES 加密算法使用的是对称 feistel 密码,密钥长度有 112 位或 168 位,加密速度慢,同等条件下解密时间大约需要 46 亿年,资源消耗中等。

0x03 非对称加密算法


常见的非对称加密算法如下:

  • RSA:由 RSA 公司发明,是一个支持变长密钥的公共密钥算法,需要加密的文件块的长度也是可变的;
  • DSA(Digital Signature Algorithm):数字签名算法,是一种标准的 DSS(数字签名标准);
  • ECC(Elliptic Curves Cryptography):椭圆曲线密码编码学。

3.1 RSA 加密算法


RSA 加密算法 是一种非对称加密算法。在公开密钥加密和电子商业中 RSA 被广泛使用。RSA 是 1977 年由罗纳德 · 李维斯特(Ron Rivest)、阿迪 · 萨莫尔(Adi Shamir)和伦纳德 · 阿德曼(Leonard Adleman)一起提出的。当时他们三人都在麻省理工学院工作。RSA 就是他们三人姓氏开头字母拼在一起组成的。

对极大整数做因数分解的难度决定了 RSA 算法的可靠性。换言之,对一极大整数做因数分解愈困难,RSA 算法愈可靠。假如有人找到一种快速因数分解的算法的话,那么用 RSA 加密的信息的可靠性就肯定会极度下降。但找到这样的算法的可能性是非常小的。今天只有短的 RSA 钥匙才可能被强力方式解破。到目前为止,世界上还没有任何可靠的攻击 RSA 算法的方式。只要其钥匙的长度足够长,用 RSA 加密的信息实际上是不能被解破的。[3]

3.2 ECC 加密算法


椭圆曲线密码学(英语:Elliptic curve cryptography,缩写为 ECC),一种建立公开密钥加密的算法,基于 椭圆曲线数学。椭圆曲线在密码学中的使用是在 1985 年由 Neal Koblitz 和 Victor Miller 分别独立提出的。

ECC 的主要优势是在某些情况下它比其他的方法使用更小的密钥——比如 RSA 加密算法——提供相当的或更高等级的安全。ECC 的另一个优势是可以定义群之间的双线性映射,基于 Weil 对或是 Tate 对;双线性映射已经在密码学中发现了大量的应用,例如基于身份的加密。不过一个缺点是加密和解密操作的实现比其他机制花费的时间长。[4]

3.3 ECC 与 RSA 比较


ECC 和 RSA 相比,在许多方面都有对绝对的优势,主要体现在以下方面:

  • 抗攻击性强。相同的密钥长度,其抗攻击性要强很多倍。
  • 计算量小,处理速度快。ECC 总的速度比 RSA、DSA 要快得多。
  • 存储空间占用小。ECC 的密钥尺寸和系统参数与 RSA、DSA 相比要小得多,意味着它所占的存贮空间要小得多。这对于加密算法在 IC 卡上的应用具有特别重要的意义。
  • 带宽要求低。当对长消息进行加解密时,三类密码系统有相同的带宽要求,但应用于短消息时 ECC 带宽要求却低得多。带宽要求低使 ECC 在无线网络领域具有广泛的应用前景。

关于 ECC 与 RSA 的测试和分析,可以参考 公钥加密算法那些事|RSA 与 ECC 系统对比.

0x04 散列算法


散列是信息的提炼,通常其长度要比信息小得多,且为一个固定长度。加密性强的散列一定是不可逆的,这就意味着通过散列结果,无法推出任何部分的原始信息。任何输入信息的变化,哪怕仅一位,都将导致散列结果的明显变化,这称之为雪崩效应。散列还应该是防冲突的,即找不出具有相同散列结果的两条信息。具有这些特性的散列结果就可以用于验证信息是否被修改。

单向散列函数一般用于产生消息摘要,密钥加密等,常见的有:

  • MD5(Message Digest Algorithm 5):是 RSA 数据安全公司开发的一种单向散列算法;
  • SHA(Secure Hash Algorithm):可以对任意长度的数据运算生成一个 160 位的数值。

4.1 MD5


MD5 为计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护。对 MD5 加密算法简要的叙述可以为:MD5 以 512 位分组来处理输入的信息,且每一分组又被划分为 16 个 32 位子分组,经过了一系列的处理后,算法的输出由四个 32 位分组组成,将这四个 32 位分组级联后将生成—个 128 位散列值。

MD5 被广泛用于各种软件的密码认证和钥匙识别上。MD5 用的是哈希函数,它的典型应用是对一段信息产生信息摘要,以防止被篡改。MD5 的典型应用是对一段 Message 产生 fingerprint 指纹,以防止被 “篡改”。如果再有—个第三方的认证机构,用 MD5 还可以防止文件作者的 “抵赖”,这就是所谓的数字签名应用。MD5 还广泛用于操作系统的登陆认证上,如 UNIX、各类 BSD 系统登录密码、数字签名等诸多方。

4.2 SHA-1


SHA-1 是一种数据加密算法,该算法的思想是接收一段明文,然后以一种不可逆的方式将它转换成一段(通常更小)密文,也可以简单的理解为取一串输入码(称为预映射或信息),并把它们转化为长度较短、位数固定的输出序列即散列值(也称为信息摘要或信息认证代码)的过程。

单向散列函数的安全性在于其产生散列值的操作过程具有较强的单向性。如果在输入序列中嵌入密码,那么任何人在不知道密码的情况下都不能产生正确的散列值,从而保证了其安全性。SHA 将输入流按照每块 512 位(64 个字节)进行分块,并产生 20 个字节的被称为信息认证代码或信息摘要的输出。

该算法输入报文的最大长度不超过 264 位,产生的输出是一个 160 位的报文摘要。输入是按 512 位的分组进行处理的。SHA-1 是不可逆的、防冲突,并具有良好的雪崩效应。

通过散列算法可实现数字签名实现,数字签名的原理是将要传送的明文通过一种函数运算(Hash)转换成报文摘要(不同的明文对应不同的报文摘要),报文摘要加密后与明文一起传送给接受方,接受方将接受的明文产生新的报文摘要与发送方的发来报文摘要解密比较,比较结果一致表示明文未被改动,如果不一致表示明文已被篡改。

4.3 SHA-1 与 MD5 的比较

因为二者均由 MD4 导出,SHA-1 和 MD5 彼此很相似。相应的,他们的强度和其他特性也是相似,但还有以下几点不同:

  • 对强行供给的安全性:最显著和最重要的区别是 SHA-1 摘要比 MD5 摘要长 32 位。使用强行技术,产生任何一个报文使其摘要等于给定报摘要的难度对 MD5 是 2128 数量级的操作,而对 SHA-1 则是 2160 数量级的操作。这样,SHA-1 对强行攻击有更大的强度;
  • 对密码分析的安全性:由于 MD5 的设计,易受密码分析的攻击,SHA-1 显得不易受这样的攻击;
  • 速度:在相同的硬件上,SHA-1 的运行速度比 MD5 慢。

0x05 加密货币加密算法


笔者根据 加密电子货币列表 整理了如下的加密算法:

  • SHA-256:Bitcoins、Peercoin、Namecoin
  • scrypt:Litecoins、Feathercoin、Novacoin、Dogecoin
  • scrypt-cacha:Yacoin、Ethereum Classic
  • ETHASH:Ethereum
  • ECDSA:Ripple
  • X11:DASH

5.1 SHA-256


安全散列算法(英语:Secure Hash Algorithm,缩写为 SHA)是一个密码散列函数家族,是 FIPS 所认证的安全散列算法。能计算出一个数字消息所对应到的,长度固定的字符串(又称消息摘要)的算法。且若输入的消息不同,它们对应到不同字符串的机率很高。[5]

SHA 家族包含 SHA-0、SHA-1、SHA-2、SHA-3,由于比特币白皮书 2008 年才发布,彼时 SHA-3 还未问世,所以比特币采用的是 SHA-2 家族的 SHA-256 加密算法

SHA-256 算法使用了一组 6 个逻辑函数及一组常数 KT , 采用 512 比特的消息块,每一个消息块 Xi 分成 16 个 32 比特的字 M0, M1...M15。Hash 函数的安全性很大程度上取决于抗强碰撞的能力,即攻击者找出两个涓息 M 和 MtM≠Mt,使得 H(M)=HMt , 因此,评价一个 Hash 函数的安全性,就是看攻击者在现有的条件下,是否可以找到该函数的一对碰撞。目前已有的对 Hash 函数攻击的方法包括生日攻击、彩虹表攻击、差分攻击等。[6]

5.2 scrypt


scrypt 是由著名的 FreeBSD 黑客 Colin Percival 为他的备份服务 Tarsnap 开发的。刚开始只是用于防止网络攻击用的,但是后来逐渐延用到虚拟货币的技术上。

scrypt 加密算法不仅计算所需时间长,而且占用的内存也多,使得并行计算多个摘要异常困难,因此利用 rainbow table 进行暴力攻击更加困难。scrypt 没有在生产环境中大规模应用,并且缺乏仔细的审察和广泛的函数库支持。但是,scrypt 在算法层面只要没有破绽,它的安全性应该高于 PBKDF2 和 bcrypt。并且以特币将 scrypt 算法用于挖矿算法中,将 scrypt 算法的优势充分发挥出来。[7]

5.3 ETHASH


Ethash(之前被称为 Dagger-Hashimoto),是基于一个大的、瞬时的、任意生成的、形成 DAG(Dagger-part)的资料组规定,尝试解决它一个特定的约束,部分通过区块标题散列来决定。

它被设计用于在一个只有慢 CPU 的环境中来散列快速验证时间,但在被提供大量高带宽内存时,为挖矿提供大量的加速。大量内存需求意味着大规模矿工获得相对少的超线性利益。高带宽需求意味着从堆在很多超速处理单元、分享同样内存的加速在每个单独的单元给出很少的利益。[8]

5.4 ECDSA


椭圆曲线数字签名算法(ECDSA)是使用椭圆曲线密码(ECC)对数字签名算法(DSA)的模拟。ECDSA 于 1999 年成为 ANSI 标准,并于 2000 年成为 IEEE 和 NIST 标准。它在 1998 年既已为 ISO 所接受,并且包含它的其他一些标准亦在 ISO 的考虑之中。与普通的离散对数问题(discrete logarithm problem DLP)和大数分解问题(integer factorization problem IFP)不同,椭圆曲线离散对数问题(elliptic curve discrete logarithm problem ECDLP)没有亚指数时间的解决方法。因此椭圆曲线密码的单位比特强度要高于其他公钥体制。[9]

5.5 X11


X11 是由达世币核心研发者 Evan Duffield 发明,并得到广泛应用的哈希算法。它的链式哈希算法运用了一系列共 11 个科学哈希算法,作为工作量证明。这样不仅确保了信息处理分配的公正,还保留了比特币原有的特性。不过,与之适配的专用集成电路的制造难度更大,生产时间甚至长达数年。[10]

借助链式哈希,高端 CPU 的平均转速达到了与 GPU 相似的水平。此外,这种算法的另一个好处是,与 Scrypt 相比,链式哈希算法下的 GPU 耗电量减少了 30%,温度降低了 30-50%。

X11 是一种链式工作量证明 (PoW) 算法。2014 年 1 月 18 日,它被首次应用在暗黑币上。这种算法受到 Quark 链式哈希算法的启发,在其基础上进行了深度和复杂度的拓展。此外,它与 Quark 算法的不同点在于:X11 哈希算法的回合数量是预先确定的,而不是像 Quark 那样随机选定。

X11 采用了 11 轮哈希算法,包括 blake, bmw, groestl, jh, keccak, skein, luffa, cubehash, shavite, simd 和 echo。这使得它成为现代加密数字货币中最安全和最复杂的算法之一。

X11 的优势在于:

  • 增强货币的隐秘性和安全性
  • 专用集成电路阻力
  • 机枪池阻力
  • 均衡发展的 CPU 和 GPU 挖矿
  • 减少图形处理器能耗和热量输出

0x06 小结


加密技术是加密货币的核心支撑。本文首先介绍了密码学,然后介绍加密算法的分类,接着列举了常见的对称加密算法和非对称加密算法,然后讲解了加密货币使用的加密算法。我们可以看到,加密货币使用的加密算法有别于传统的加密算法,基本上会在传统的加密算法基础上做改进。

对于个人而言,需要了解的是,密码越复杂,被破解的难度越高,概率越低。之前笔者所写的 区块链资产安全攻略 一文中提到,需要设置访问密码的钱包,建议设置至少 64 位的密码,笔者设置了 128 位,并且包含大写字母、小写字母、数字和特殊符号。笔者使用 Python 编写了一个生成随机密码的脚本,本地运行,生成密码的数据字典是 abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!#$%&’()*+,-./:;<=>?@[]^_`{|}~。此条密码策略,重要交易所账号同样适用。

理解加密技术对理解加密数字货币会有很大的帮助,后续笔者再根据不同的加密算法做深入探讨。

0x07 参考


「区块链技术指北」同名 知识星球,二维码如下,欢迎加入。BTW,李笑来老师也加入了

「区块链技术指北」同名 Telegram Channel:t.me/BlockchainAge,欢迎订阅。

同时,本系列文章会在以下渠道同步更新,欢迎关注:

原创不易,读者可以通过如下途径打赏,虚拟货币、美元、法币均支持。

  • BTC: 3QboL2k5HfKjKDrEYtQAKubWCjx9CX7i8f
  • ERC20 Token: 0x8907B2ed72A1E2D283c04613536Fac4270C9F0b3
  • PayPal: paypal.me/robinwen
  • 微信打赏二维码

–EOF–

版权声明:自由转载-非商用-非衍生-保持署名(创意共享4.0许可证)

文章被以下专栏收录

    ChainONE, Empower Blockchain. 区块链技术指北,构建优质社区,传播和分享区块链技术,探讨潜在价值,连接技术和商业。