区块链常被比喻是一个分布式的公开账本,账本记录了每个账户拥有那些加密货币资产,以及交易的纪录。 有几个名词会常看到:
l 公钥(Public Key):又称钱包地址(Wallet Address)或是账户(Account)。
就像银行账户,可以拥有加密货币资产。 把地址告诉别人,对方就能转账进来,所以是可以公开的。
Pi的公钥是以“G”开头的、56个字符字符串。
(严格讲起来,在比特币中的公钥与钱包地址是不同的,钱包地址是由公钥单向推导而来,无法由钱包地址反推回公钥。 但在Pi当中我们就当成是相同的吧。 )
l 私钥(Private Key):又称密钥(Secret key)、钱包密码(Wallet Password)。
可以想象成银行账户的密码,有了密码就可以控制账户内的资产,所以千万不能让其他人知道。
私钥跟公钥是成对的,私钥是随机产生的一串英文和数字,然后通过密码学算法从私钥生成公钥(但这个过程不可逆,无法由公钥反推出私钥)。 所以是没有「改密码」这件事的,换一个私钥,表示对应的公钥也变了,但是可以建立许多对「私钥+公钥」的组合。
Pi的私钥也是56个字符,但它以字母“S”开头。
l 助记词(Mnemonic Phrase):又称助记码、助忆词、种子短语(seed phrase)、密语(secret phrase)、恢复密码(Recovery Passphrase)。
因为私钥实在太难记忆了,为了拯救人类可怜的脑袋,所以BIP39(Bitcoin Improvement Proposal: 39)登场了,简单的说:助记词 à 种子 à 私钥 à 公钥。 没错,是先有助记词才推导出私钥,不是把私钥转换成助记词的格式。
助记词为若干个常见的英文单词(例如Pi是24个单字),容易阅读与记忆,它的重要性等同于私钥。
但对于Pi钱包来讲,根本就不显示私钥给用户看,只有显示助记词(只有Developer App Wallet是用私钥解锁与签署)。 所以在Pi的世界中,助记词常被视为私钥,就连APP接口也是写「助记词(私钥)」。
u BIP32
区块链是匿名的(KYC之后就难讲了),但却是透明的,一旦有人知道你的钱包地址,就能知道你所有的交易内容。 所以你可能会想要有好几个地址,不同的交易使用不同的地址。 但如果要使用不同的地址,就需要不同的私钥,也就产生了管理的麻烦。
BIP32就在这种情况下出现了,它定义了分层确定性钱包(Hierarchical Deterministic Wallets, HD Wallet)。 概念是用一个随机的种子(Seed)产生第一把私钥,称为Master Key,利用Master Key又可以继续往下一层产生更多子Keys,而子Keys也都可以再往下产生多个孙Keys。 其架构如下图所示:
一个系统可以从单一个种子产生一树状结构储存多组keypairs(私钥和公钥)。 好处是可以方便的备份、转移到其他兼容装置(因为都只需要种子),以及分层的权限控制等。
u BIP39
即使有了种子可以管理多个私钥,但仍然不方便记忆,所以BIP39提出使用随机算法生成的多个单词,采用PBKDF2(Password-Based Key Derivation Function)方法推导出二进制种子,用生成的种子来推导私钥。
助记词生成的过程是这样的:先产生一个128位随机数,再加上对随机数做的校验和4位,得到一个132位的数,然后按每11位做切分,这样就有了12个二进制数字,然后用每个数去查BIP39定义的单词表,这样就得到12个助记词。 也可以用更长的随机数,就能产生更多助记词,被暴力解码的难度就更大,更安全。 如Pi就是用256位随机数产生24个助记词。
助记词推导出种子:这个过程使用PBKDF2密钥延伸(Key stretching)函数,来增强弱密钥的安全性。 基本原理是通过一个随机函数(例如HMAC函数),把助记词明文和“盐”作为输入参数,然后重复进行运算最终产生生成一个更长的(512位)密钥种子。
“盐”是由字符串“mnemonic”及一个可选的密码组成,可以提高暴力破解的难度,注意使用不同密码,则延伸函数在使用同一个助记词的情况下会产生一个不同的种子。
u BIP44
因为Master Key底下可以生成出无限多的子密钥、孙密钥、...。 所以BIP规范了这些分层路径的定义,也扩展了对多币种的支持。 这里有完整的币种列表,Pi Network是Coin type 314159。
有个观念要澄清,钱包并没有真正储存加密货币资产,这些资产是在区块链上,钱包只是提供与区块链互动工具。 基本上可以协助用户管理私钥的服务,都可以称作钱包。 那管理私钥大致可分成三种功能:生成私钥,储存私钥,使用私钥。 所以钱包有各种的形式,包含纸钱包(就是把私钥印在纸上,这也算储存私钥)、硬件钱包、软件钱包、网页钱包、托管式钱包等等。 若钱包能连上区块链网络,就能做为参与区块链网络的入口,比如发起交易、进行资产的转移。
聪明的你有没有发现一件事? 私钥与公钥是可以离线生成的,只要在本地执行一个非对称加密算法即可,与是否连网无关。 而且因为Pi有「最低余额」的限制,光是有一对密钥对,并不代表帐户已经建立,必须由其他帐户提供资金来建立。
最后谈谈私钥储存在手机的安全,这里的「储存」并不是指将助记词截图或文字储存在手机,而是当你使用助记词解锁钱包后,可以选择启用生物辨识功能,以后就能用脸部辨识或指纹辨识来解锁,因为Pi钱包就将你的助记词加密后储存在手机上。
这样安全吗? 大家该有的观念是,世界上没有什么系统是100%安全的,这一切都只是成本考量。 使用助记词也有可能被侧录、被钓鱼骗走。 也可以参考这篇对 Face ID 的报道。
本站(Picn.cc)文章与教程皆为网络搜集和个人分享,并非代表Pi Network官方言论。如有误,望广大Pi友指正。
发表评论