主页 > imtoken苹果手机不能下载 > 比特币所有权和隐私问题 - 非对称加密应用

比特币所有权和隐私问题 - 非对称加密应用

imtoken苹果手机不能下载 2023-08-15 05:07:44

比特币系统如何确定一个账户的比特币属于谁?谁可以用比特币支付这个账户?如果你不是很了解这个问题,我们来看看。

银行系统

让我们先回顾一下真实的银行系统:

首先,我们需要将我们的个人信息(如身份证)提供给银行,银行会为我们开立相应的账户,开户时银行会建立账户的所有权。付款时,银行完成向交易双方的转账(银行在开户时已经知道我们对应的账户)。

同时,银行会对账户信息进行保密(不保证)。

匿名账本

那么比特币如何在不涉及第三方银行的情况下,在确保隐私的同时确定账户所有权呢?

事实上,比特币账户是由地址表示的,个人信息不会显示在账本上。转移是将比特币从一个地址转移到另一个地址。转账记录如下:

{
   "付款地址":"2A39CBa2390FDe"
   "收款地址":"AAC9CBa239aFcc"
   "金额":"0.2btc"
}

那么问题就变成了谁有权在某个地址付款。

支付和所有权其实是同一个问题,只要我能用这个比特币支付,我就有了所有权

地址和私钥

比特币的解决方案是,谁拥有某个地址的私钥(如果完全没有加密概念的人一个私钥可以存多少个比特币,可以简单地将私钥用作密码),就可以使用该地址进行支付。(所以私钥一定要妥善保管,如果私钥泄露,比特币可能会丢失)

比特币地址和私钥具有非对称关系。私钥经过一系列操作(包括两次哈希)后,可以得到地址,但无法从地址推导出私钥。

地址: 2A39CBa2390FDe
私钥: sdgHsdniNIhdsgaKIhkgnakgaihNKHIskdgal
Hash(Hash(fun(sdgHsdniNIhdsgaKIhkgnakgaihNKHIskdgal)))  -> 2A39CBa2390FDe

银行系统的银行账号和密码是完全独立的,不能相互派生。转出时需要同时验证账号和密码。

或者上面交易的例子:

{
   "付款地址":"2A39CBa2390FDe",
   "收款地址":"AAC9CBa239aFcc",
   "金额":"0.2btc"
}

只能使用地址 2A39CBa2390FDe 的私钥进行支付。

非对称加密技术

此时,问题就变成了,如何证明你拥有一个地址的私钥(不泄露私钥)。

签署交易信息

实际上,在签名之前,会对交易信息进行哈希处理,得到摘要信息一个私钥可以存多少个比特币,然后再对摘要信息进行签名。过程大概是这样的:1.对交易进行哈希运算得到一个摘要信息(哈希值)

hash('
   {"付款地址":"2A39CBa2390FDe",
   "收款地址":"AAC9CBa239aFcc",
   "金额":"0.2btc"
   }') -> 8aDB23CDEA6

2.用私钥对交易摘要进行签名(付款人在安全的环境中进行,以避免私钥泄露),代码中可能就是这种情况。

#参数1为交易摘要
#参数2为私钥
#返回签名信息
sign("8aDB23CDEA6", "J78sknJhidhLIqdngalket") -> "3cdferdadgadg"

播送

签名操作后,支付节点开始全网广播:我向AAC9CBa239aFcc支付了0.2btc,签名信息为3cdferdadgadg,请确认。

广播过程其实就是向其他连接节点发送信息,其他节点通过验证后再转发给连接节点,这样的扩散过程。

广播信息包含原始交易信息和签名信息

核实

其他节点收到广播信息后,会验证签名信息是否是付款人生成的,使用私钥对原始交易信息进行签名。如果验证通过,则说明该笔交易确实是付款人自己发送的,说明该笔交易是有效的,然后才会记入账本。(其实也会验证支付账户是否有足够的余额,这点我们暂时忽略)验证过程其实就是签名过程的逆运算,大概的过程用代码表示为如下:

#参数1为签名信息
#参数2为付款方地址
#返回交易摘要
verify("3cdferdadgadg", "2A39CBa2390FDe") -> "8aDB23CDEA6"

如果验证输出的信息与原始交易信息的hash一致,则验证通过,记账。代码大致是这样的:

if(verify("3cdferdadgadg", "2A39CBa2390FDe")
   == hash('{"付款地址":"2A39CBa2390FDe",
             "收款地址":"AAC9CBa239aFcc",
             "金额":"0.2btc"}')) :
   # 写入账本 
   # 广播
else:
  # donothing

可以理解为支付地址是公钥,签名过程是用私钥对交易摘要进行加密的过程,验证过程是用公钥解密的过程(为了方便大家理解,严格说,这是不准确的)。

补充说明

上面,我简化了一些信息以便更好地理解。

比特币系统使用椭圆曲线签名算法。该算法的私钥由 32 字节的随机数组成。公钥可以从私钥计算出来。公钥通过一系列哈希算法和编码算法获得比特币地址。可以理解为公钥的摘要。

通晓区块链——系统学习区块链,打造最好的区块链技术博客我的知识星球为你解答区块链技术问题,欢迎加入讨论。