公钥和私钥
公钥和私钥都是属于密码学的概念。在现代密码学体系中,加密和解密采用了不同的密钥,也就是非对称密钥加密系统,每个通信方都需要两个密钥,这两个密钥就是公钥和私钥 。 公钥是公开的,不需要保密,而私钥是私有的,对其需要保管和隐蔽,以防别人知道 。
公钥和私钥都是属于密码学的概念。在现代密码学体系中,加密和解密采用了不同的密钥,也就是非对称密钥加密系统,每个通信方都需要两个密钥,这两个密钥就是公钥和私钥 。 公钥是公开的,不需要保密,而私钥是私有的,对其需要保管和隐蔽,以防别人知道 。
为了让读者更容易理解什么是公钥加密,先来看一个简单的例子 。 若有两个用户 Jack和 Michael, Jack 想把一段文字通过公钥加密技术发送给 Michael ,而 Michael 有一对公钥和私钥,那么这个加密和解密过程如下:首先, Michael 将他的公钥发送给 Jack ,接着 Jack就用他收到的公钥对文字进行加密,将加密后的结果发送给 Michael ,最后 Michael 用他的私钥解密 Jack 发送给他的消息 。 整体过程如图 2-4 所示:
公钥认证即通过鉴别一个用户的私钥是否正确来鉴别这个用户的真伪 。 列举一个简单的例子, Michael 想让 Jack 知道自己是真实的 Michael ,而不是其他人假 冒的,所以
Michael 使用私钥对文件进行签名,发送给 Jack, Jack 再用 Michael 的公钥解密文件,从而验证签名是否来自真实的 M ichael 。 整体流程如图 2-5 所示
从上述两个例子可以看出,公钥加密是发送者先用公钥加密,接收者再用私钥解密,而公钥认证则是发送者先用私钥加密,接收者再用公钥解密以验证。
以太坊中每个外部账户都由一对密匙定义,即一个私钥和一个公钥 。 每对密钥都编码在一个钥匙文件里 。 钥匙文件是 JSON 文本文件,可以用任何文本编辑器打开和浏览 。 钥
匙文件的关键部分一一账户私钥,通常使用创建账户时设置的密码进行加密 。 目前最新的密钥文件格式是: UTC--<created at UTC IS08601>-<address hex> 。 钥匙文件可以在以太坊
节点数据目录的 keystore 子目录下找到 。 打个比方,你在某个银行开了一个账户,可能还开通了电子网银以绑定到这个账户,而公钥就是你在申请电子账户时设置的 ID ,表示账户
地址,私钥就是你在申请账户时设置的密码,通过这个密码可以打开你的账户,实现转账 、取现等一系列操作 。
假如 Jack 在以太坊上创建了一个外部账户,那么他就有一个公钥和一个私钥 。 他可以使用他的私钥创建数字签名,而以太坊上另一个账户 Michael 可以使用 Jack 的公钥来验证
这个签名是否是用 Jack 的私钥创建的,即该签名是否来自真实的 iack。 当你创建一个以太坊钱包的时候,那个由 一长串字符和数字构成的地址其实就是这个账户的公钥 。 一些钱包
软件可以帮助保管私钥,你也可以自己保管 。 尤其重要的一点是,如果你弄丢了存有资金的钱包私钥,那么这个钱包中的资金也就无法转出,等同于丢失 。 所以一定要记得对私钥
进行备份 。
目前常见的私钥有三种形态: Private k町、 Keystore & Password 以及 Memonic code 。
1 ) Private key 就是一份随机生成的 256 位二进制数字,用户甚至可以用纸笔来随机地生成一个私钥,即随机写下一串 256 位的仅包含“。”或“ l ”的字符串 。 该 256 位二进制数字就是私钥最初始的状态 。
2 )而在以太坊官方钱包θ 中,私钥和公钥将会以加密的方式保存一份 JSON 文件,存储在 keystore 子目录下 。 这份 JSON 文件就是 Keystore ,所以用户需要同时备份 Keystore
和对应的 Password (创建钱包时设置的密码) 。
3 )最后一种 Memonic code 是由 BIP 39 方案提出的,目的是随机生成 12 ~ 24 个比较容易记住的单词,该单词序列通过 PBKDF2 与 HMAC-SHA512 函数创建出随机种子,该种子通过 BIP-0032 提案的方式生成确定性钱包 。