八、附录 a:加密货币基础知识
比特币和其他替代币是数字现金,一种在互联网上买卖东西的方式。第一步是建立一个数字钱包,要么通过基于浏览器的网络钱包,要么通过从 Blockchain.info、菌丝体、比特币基地、Electrum 或其他比特币钱包提供商下载桌面或智能手机钱包。你的比特币地址以及你的公钥和私钥是在你设置钱包时自动生成的。你的比特币地址通常是一个由 26 到 34 个字母数字字符组成的标识符,以数字 1 或 3 开头,代表比特币支付的可能目的地——例如,1JDQ5KSqUTBo5M3GUPx8vm9134eJRosLoH
,用这串字符或二维码来表示。(这个比特币地址的例子是一个名为“让我们谈谈比特币”的区块链科技资讯播客的小贴士。)你的比特币地址就像你的邮箱地址;拥有您电子邮件地址的人可以向您发送电子邮件;拥有你公钥钱包地址的人可以给你发送比特币。
因为比特币是数字现金,你的钱包并不包含实际的现金(因此,钱包这个术语有点用词不当)。你的钱包里有你的地址、公钥和私钥,以及你在区块链账本上控制的比特币数量的记录,但没有任何实际的现金。你的钱包应该像任何传统的钱包一样安全,以保护你的私人钥匙;任何能接触到它们的人都可以控制、使用或转移你的比特币。你不应该把你的私钥给任何其他人,或者存放在交易所(糟糕的私钥安全性是比特币相关盗窃和诈骗的促成因素之一)。
有了你的地址,任何人都可以给你发比特币(就像任何人都可以用你的邮箱地址给你发邮件一样)。要给别人发送比特币,你需要他的地址和你钱包里的私钥部分,软件会在那里检查你对你想要消费或转移的比特币的控制权。要给某人发送比特币,你需要扫描他的钱包地址二维码,或者获取他的地址字符或二维码(例如,通过电子邮件或短信)。发送方扫描接收方钱包的 QR 码地址,并使用钱包应用程序输入有关交易的附加信息,如金额、交易费用(通常确认钱包软件预先指定的金额)和任何其他参数,以向接收方发送比特币。当发送者提交交易时,发送地址的所有者向网络广播一条消息,表明来自该地址的 x 个货币现在属于新地址。该操作由发送者的私钥授权;如果该钱包没有对应于这些货币的私钥,则这些货币不能被花费。接收者的钱包应用程序几乎会立即收到真实交易,并显示“未确认”状态。然后,大约需要 10 分钟的时间来确认交易,并将其记录在区块链矿工的区块链中。因此,对于汽车或房地产等大宗购买,您可能希望等待交易确认,但对于购买咖啡,您可能不会这么做。
公钥/私钥密码术 101
第一次初始化或设置 钱包时,会自动生成地址、公钥和私钥。比特币基于公钥加密,这意味着你可以自由分发公钥,但必须保留私钥。
比特币地址是由软件挑选一个随机数并创建一个数学上相关的公钥/私钥对(根据当前标准,椭圆曲线数字签名算法,或 ECDSA)来创建的,并在花费比特币时得到确认。这个启动操作生成私钥,但是需要额外的步骤来生成比特币地址。比特币地址不仅仅是公钥;相反,公钥被进一步转换以更有效地使用。它通过额外的加密协议(如 SHA-256 和 RIPEMD-160)、散列操作(将一串字符转换成更短的固定长度值或代表原始字符串的密钥)和管理操作(删除看起来相似的字符,如小写的 L 和大写的 I ,以及 0 和 O )进行循环;在末尾添加校验和;并在地址开头添加一个识别号——对于大多数比特币地址来说,这是 1,表示是公共的比特币网络地址)。
两个不同的人可以生成同一个比特币地址,这在技术上是可能的,但却是不可行的。在这种情况下,双方都可以在那个特定的地址花费货币。然而,这种情况发生的几率非常小,几乎有 99.9999999999%的可能性。一个比特币钱包可以包含多个地址(一个安全程序是为每次交易使用或生成一个新地址),以及一个或多个保存在钱包文件中的私钥。私钥在数学上与为钱包生成的所有比特币地址相关。
在比特币中,私钥通常是一个 256 位的数字(尽管一些钱包可能会使用 128 到 512 位之间的数字),可以用几种方式来表示。以下是十六进制格式的私钥的一个示例(十六进制的 256 位是 32 个字节,或 0–9 或 A–F 范围内的 64 个字符):
E9 87 3D 79 C6 D8 7D C0 FB 6A 57 78 63 33 89 F4
45 32 13 30 3D A6 1F 20 BD 67 FC 23 3A A3 32 62
下面是私钥及其对应的公共地址的另一个示例:
Private key:
79186670301299046436858412936420417076660923359050732094116068951337164773779
Public address:
1EE8rpFCSSaBmG19sLdgQLEWuDaiYVFT9J
进行某种反向计算以从公钥导出私钥要么是不可能的(根据哈希运算,这只是单向的,或者其他技术),要么是极其昂贵的(巨大的计算能力在比确认交易所需的时间更长的时间上运行)。接收比特币只需要地址,而发送比特币需要公钥/私钥对。