在前一篇中,我们探讨了区块链钱包软件的角色与功能,如今我们将深入探讨其背后的技术细节。本文将分为两部分进行阐述,本文将首先介绍以下关键功能。
1. 生成私钥和地址 2. 信息传递在此,我们将暂时跳过这两个功能的具体需求和目的,直接探讨它们背后的技术原理。当然,如果您需要更深入的理解,不妨回顾一下上一篇文章。
### 创建私钥与地址的流程 从创建地址的角度来看,这个过程可以概括为一个流程,涉及三个关键产物:私钥、公钥和地址。本人原创,引用时请注明出处。
[1] 通过密码学中的SHA-256算法随机生成一个随机数,这个随机数作为密码,被称为私钥(Private Key)。 [2] 将私钥通过椭圆曲线密码学生成对应的公钥(Public Key)。 [3] 接着,将公钥通过SHA-256散列等编码过程生成地址(Address)。这个生成过程是一个单向运算,是不可逆的。公钥无法反推出私钥,地址也无法反推出公钥。这种特性使得钱包软件生成的公钥和地址可以在区块链上公开使用,即便任何人获得某个公钥或地址,也无法推算出其私钥。
您可能已经熟悉了私钥和地址的作用,那么公钥又是做什么的呢?这将在后续内容中详细说明。
### 视觉化地址生成器访问视觉化地址生成器,您将看到不同的地址生成方式。
从区块链的角度来看,不同的区块链或同一区块链的不同版本,可能会有不同的地址协议。因此,钱包软件需要针对这些差异进行特定的设计,以支持不同的地址生成方式。
例如,比特币与以太坊的地址协议就有所不同。比特币地址:1Bn3YxHMpQod86v1kUKQDtgzqJSoWqNpax;以太坊地址:0x9f8b6c492cb8e97c77fbdb6cb2e31d6c808148a2。当某个区块链在节点软件更新时,如果新版本采用了与旧版本不同的地址协议,但新旧版本能够互相兼容(新版本向后兼容/软分叉),就会导致同一个主链存在不同的地址协议。比特币就有三种地址协议:Legacy(以1开头):1Bn3YxHMpQod86v1kUKQDtgzqJSoWqNpax;Nested SegWit(以3开头):3FnuwRTns9VMBD3JQwVJyGRLEosGKY8tqn;Native SegWit(以bc1开头):bc1qlaf8k2xqj64dxszgzmh8x7uqzawe0x5va6ykvl。
对于钱包软件来说,一个私钥只能生成一个公钥,而公钥在生成地址时,可以使用同一个公钥,对应不同的地址协议,从而生成不同的地址。
接下来,我们将探讨信息传递的问题。
### 传递讯息要理解钱包软件与区块链之间的信息沟通机制,我们首先需要了解区块链的工作原理。
### 开放的点对点网络区块链是一个开放的点对点(P2P)信息交换网络体系,任何参与者都可以发送交易信息,也可以自由处理链上的任何交易需求。由于网络环境的开放性,需要一个可靠且安全的验证信息机制。
### 密码哈希函数密码哈希函数(Cryptographic Hash Function)用于确保收到的交易信息是正确且完整的。
我将先说明验证流程。假设A端要向B端发送一条信息:
本人原创,引用时请注明出处。
❶ A端将信息Message通过哈希函数Hash( )运算出信息摘要Message Digest。 ❷ A端将信息与信息摘要一同发送给B端。 ❸ B端接收到信息后,将信息通过哈希函数运算出信息摘要。 ❹ B端比对收到的信息摘要与自己运算出的信息摘要是否一致。哈希函数计算出的信息摘要具有一个特性:无论原始信息发生多么微小的变化,只要有变化,就会运算出不同的信息摘要。以下是一个示例:
原始信息:王小明转100元给谢小美 信息摘要:3009980c55ae9a33b175612866c0a7b0bfe01298aeea0ca4631bf3007d38caac
如果将“王小明”与“谢小美”之间增加空格,修改后的信息:王小明转100元给谢小美 信息摘要:6203d40e264b1d24a4b03c0f5e6c26e0dbdbf4692d8bfea5b2de6411f6fcd24b
因此,通过比对信息摘要,我们可以识别收到的信息是否在传输层中被修改过,或者信息是否不完整。然而,这只能保证信息的完整性,并不能确认信息来源是否为假冒身份者,例如,谢小美可以发出“王小明转100元给谢小美”的交易信息,并附上可成功比对的摘要。
### 数字签名来源端在传递信息时,会一并提供自己的数字签名,以便接收端通过数字签名确认信息是来源端授权发出的,而非假冒身份者。
对应上述的验证流程,实际上就是在传输层中,使用数字签名代替信息摘要。如下:
本人原创,引用时请注明出处。
❶ A端先将自己的公钥Public Key提供给B端。 ❷ A端将运算出的信息摘要通过自己的私钥Private Key执行签名运算Sign( ),生成数字签名Signature。 ❸ A端将信息与数字签名一同发送给B端。(上图省略了信息的传输示意) ❹ B端利用收到的数字签名与A端的公钥,解密出信息摘要。通过A端私钥运算出的数字签名,只有A端的公钥才能解开,反之,A端的公钥无法解开其他人的数字签名。因此,B端可以确保签名来源是A端发出的,非假冒身份者。当然,最后的解密运算步骤无法计算出A端的私钥,从而保护了A端不会泄露私钥。
### 整合上述两个流程简而言之,A端发送信息、自己的公钥以及自己的数字签名(私钥加密),B端接收后,用A端的公钥解密数字签名,如果解开了,表示信息是A端授权发出的,非假冒身份者。然后,再验证信息摘要,如果一致,就可以确保信息是正确且完整的。
回到钱包软件的部分,假设A端是钱包软件,就必须具备执行哈希函数和数字签名的能力!
标签: 数字货币