主页 > imtoken转账手续费 > 比特币所有权和隐私问题——非对称加密应用

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

imtoken转账手续费 2023-02-21 06:11:13

主站会更新最新内容,用通俗易懂的语言讲解区块链社区

原文链接:比特币所有权和隐私问题——非对称加密应用

比特币系统如何确定账户中的比特币属于谁?谁可以用比特币支付这个账户?

如果你不是很了解这个问题,我们来看看。

银行系统

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

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

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

匿名账本

如何确定我有比特币

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

其实比特币账户是用地址来表示的,个人信息是不会显示在账本上的。转账是将比特币从一个地址转移到另一个地址。

转账记录如下:

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

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

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

地址和私钥

如何确定我有比特币

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

比特币地址和私钥具有非对称关系。私钥经过一系列操作后(有两个hash),可以得到地址如何确定我有比特币,但是无法从地址中得到私钥。

地址: 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 字节的随机数组成。公钥可以从私钥计算出来。公钥通过一系列哈希算法和编码算法获得比特币地址。 ,地址也可以理解为公钥的摘要。

区块链通俗讲——系统学习区块链,打造最好的区块链技术博客