

为什么每当数字资产发生转移,收币的钱包都要生成了一个新的地址呢?面对如此众多的地址,又该如何保证使用上的便利性?
公钥与私钥,是通过一种算法得到的一个密钥对,公钥是密钥对中公开的部分,而私钥是非公开的部分。私钥可以用来进行签名,用对应的公钥来进行验证。
但为什么每当数字资产发生转移,收币的钱包都要生成了一个新的地址呢?面对如此众多的地址,又该如何保证使用上的便利性?
本期《晓说区块链》,陈晓东先生(维基链首席技术官)将围绕这个话题,为大家解读。
网友:比特币的私匙和公匙是唯一互相配对的数字,公匙当作收钱地址,但为什么很多比特币钱包,收钱地址可以自己每次生成一个,而最后又都能进入到相应的那个帐号呢?
陈晓东:其实这个问题可以拆成以下几个问题:
1.钱包和地址是一个概念吗?如果不是,到底是什么关系?
2.那么账户和钱包是一个概念吗?如果不是,到底是什么关系?
3.为啥每次收钱需要生成和使用一个不同的地址呢?
为了回答这些问题,笔者做了下面一个脑图来帮助理解数字货币钱包有关的概念:

一个典型的数字货币钱包包含了图中的三种基本功能:1)密钥管理;2)交易处理;3)网络数据同步。可见,钱包和地址是两个概念。地址是和私钥一一对应的一个字符串。比特币的私钥长度为256比特位或者是32个字节长度,而大部分比特币的地址长度为34,少数为26。一个比特币钱包可以有一个或者多个私钥和对应的地址。每个地址对应了0到若干个比特币的余额。
然而大家说所的账号通常是指钱包使用者拥有数字货币资产的一个抽象概念。如果钱包里面还没有导入用户的私钥,那么这时候用户是有钱包但没有账号。可以说账号是用户的地址集合存放到用户管理的钱包时候的一个抽象概念。
那么为啥用户使用钱包来收币的时候通常会使用一个由钱包生成的新地址呢?这是出于加强隐私保护目的的一种做法。虽然数字货币收钱地址是34位的随机字符串,如果每次使用都不变,那么还是可以和现实生活中的场景所关联起来,比如说发红包或者一次奖励行为,那么可以让其他人相对容易地猜测出对应地址的持币者人社会身份。相反,如果经常变更地址,甚至是在每次收币的时候变更地址,这让非交易参与者无法猜测出收币者的真实社会身份,从而保护了用户隐私。
一个用户的钱包可能会拥有许许多多的地址,这听上去备份起来会比较麻烦。其实现在通常都使用一种技术叫做:结构化的确定性钱包(Hierarchical Deterministic Wallet)。这个钱包可以让用户只需要记录一组12个不同的单词来生成无数个私钥和对应地址。这样既解决了隐私性问题,又解决了多地址私钥的备份和恢复的便利性问题。