前言
对称加密,顾名思义就是公钥和私钥都是同一个,只有一把密钥,那么密钥的共享就需要特别注意,容易泄露。但是由于它的加密效率高(速度快、占用空间小),主要用在大量数据的加密,往往需要提前分发密钥。
对称密码从实现上可以分为两种:分组密码和序列密码。前者将明文切分为定长数据块作为基本加密单位,应用最为广泛。后者则每次只对一个字节或字符进行加密处理,且密码不断变化,只用在一些特定领域,如数字媒介的加密等。
分组密码其中代表算法有DES、AES等。AES目前尚未出现有效的破解手段。
比特币中的对称加密
比特币中使用的对称加密算法为AES算法,具体来说是AES256。用于比特币钱包的私钥加密。采用用户设置的密码通过AES对钱包私钥进行加密,确保客户端私钥的安全。下面从源码使用来看看,地址为:https://github.com/1261385937/AES256
secret_key是用来加密的密钥,比特币使用的非对称加密的私钥,为了方便,上面是我随意写的。
public_key_hash_first_half是用来混合加密的,比特币中使用的是Serialize后的公钥,经过sha256后,取前128位。
上面的代码是对 msg 加密,加密结果保存在vchCiphertext。 下面来看看如何解密:
解密时,同样需要传入secret_key和public_key_hash_first_half。对vchCiphertext进行解密,揭秘结果放在quondam_msg中。显而易见,quondam_msg的内容为1,2,3。
总结
至此,AES256如何加密解密使用介绍完毕。密码学这块,是无数“密码朋克”的心血结晶,密码学这块比较特殊,极其严谨,需要经过大量使用验证的。即使知道原理,也不见得可以对它进行修改,因为你无法保证“你捣鼓出来的”安全性如何。所以笔者觉得,如果你不是专门研究密码学的高手,知道核心细节和不知道核心细节区别不大。密码学这块还是选用出名的、成熟的加密算法为上上策。以太坊和EOS也是选用了和比特币一样的secp256k1。原因恐怕也是如此。