因为通常在区块链中做交易时,签名(类似于输入密码)是钱包的客户端帮我们完成的,这样便要求客户端同时存储着我们的公钥和私钥。等会儿,同时存储公钥和私钥?这个听上去不安全啊!!!的确不是那么安全,这样才轮到本期的主角——冷钱包出场了。
在介绍冷钱包之前,首先来看一下区块链中交易是如何实现的。
首先是生成交易信息,如:从地址A(地址也就是公钥,转账时习惯称地址)转账一个币到地址B。然后再将这个交易信息通过hash算法转换成256位的二进制数,这个二进制数使用地址A的私钥进行加密就得到了签名。最后再将交易信息和签名同时广播给区块链里所有参与者。其中,矿工在验证无误后(如地址A是否有足够余额,签名是否有效等)写入区块链便完成了交易。
其他人能看到的只是地址A地址B,但并不知道他们分别属于哪个人,所以在一定程度上保障了隐私的安全。
客户端要做的就是生成交易信息签名并广播出去。签名需要用到私钥,而广播这个过程是需要联网的,这就给黑客攻击提供了可能。黑客只需要盗走私钥就能盗走账户里所有余额。就算提前断网,手动输入私钥做签名,再联网广播也还是有被木马攻击的可能。有一种做法是每次转账以后将钱包里剩余的钱转到新的地址中,这个我们暂不考虑。
与后面提到的冷钱包相对应,我们将能够做签名且会被用于联网广播的钱包客户端称为热钱包。热钱包的“原罪”在于它会联网。那不联网行么?但不联网似乎就不能广播了?
我们可以想办法弄一台不能联网的设备(或者一台拔掉网线,关闭蓝牙WiFi,设置完成以后永远不再联网的电脑)用于生成私钥签名,再将签名后的信息交由联网的设备,比如一个热钱包,来广播出去,这样问题就解决了。这个不能联网的设备称为冷钱包。
现在交易就变成了这样:冷钱包生成一对公、私钥,将公钥录入到热钱包用以查询余额和接收别人的转账;而私钥(永远不会出现在互联网上)则存储在冷钱包中,当需要给别人转账时,先由热钱包生成交易信息,再将交易信息录入到冷钱包中做签名,最后把签名录入到热钱包里和交易信息一起广播出去。