zoukankan      html  css  js  c++  java
  • [比特币]比特币中的密码学原理

    比特币又称加密货币,但其实加密货币并没有加密:区块链中的所有信息都是公开的,包括交易的内容、交易的金额以及交易账户的地址。之所以称之为加密货币,主要是因为交易的双方在不与真实世界发生关联的情况下,双方的身份是无法获知的。

    比特币中主要用到了密码学中的“哈希”和“签名”。

    密码学中用的哈希被称作Cryptographic Hash Function,它有两个重要的性质:

    • Collision resistance:抗碰撞性。哈希碰撞是指给定(x eq y),但经过哈希运算后,(H(x) = H(y)),这种情况被称为“哈希碰撞”。哈希碰撞是不可避免的,输出空间是有限的,但输入空间是无限的。假如一个256位的哈希值,那么它的输出空间为(2^{256}),即它的输出有(2^{256})种可能,但它的输入空间是无限大的。按照“鸽笼原理”(又称抽屉原理),必然会出现不同输入映射到同一输出的情况。Collision resistance并不是说不会出现哈希碰撞,而是说没有高效的方法来人为地制造哈希碰撞,即给定一个(x),没有高效的方法找到一个(y),使(H(x) = H(y))。这一性质可以防止消息被篡改。
    • Hiding:隐匿。即哈希函数的计算过程是单向、不可逆的。给定一个(x),可以计算出(H(x)),但无法从(H(x))逆推出(x)。其成立的条件是输入空间必须足够大且均匀分布的。与Collision resistance性质结合,可以实现digital commitment(数字承诺)。

    鸽笼原理:如果有5只鸽子笼,养鸽人养了6只鸽子,那么当鸽子飞回笼中后,至少有一个笼子中有2只鸽子。

    除了上述的两个性质之外,比特币中的哈希函数还要求:

    • Puzzle friendly:即哈希值的计算是不可预知。Difficult to solve, but easy to verify.

    BTC中用的哈希函数:SHA-256

    BTC中账户的创建与现实中创建银行账户不同。在BTC中,任何人都可以随时随地地创建账户,用户只需在本地创建一个公私钥对,即一个公私钥对即为一个账户。公私钥对是非对称加密算法中的概念。公钥加密,私钥解密是常见的公私钥加密用法。私钥加密,公钥解密就是“签名”的过程。

    在BTC系统中,用户的公钥即为其地址,发布交易时,用户需要用其私钥对交易进行签名,其他用户可以用其公钥对该交易进行验证。生成公私钥时需要有个好的随机源,否则容易造成私钥泄露。


    声明:本作品采用署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)进行许可,使用时请注明出处。


  • 相关阅读:
    DS博客作业03--树
    DS博客作业02--栈和队列
    DS博客作业02--线性表
    c博客06-2019-结构体&文件
    C博客作业05--2019-指针
    C语言博客作业04--数组
    c语言博客作业03--函数
    C语言博客作业02--循环结构
    深入理解Java线程池原理
    Offer快到碗里来——聊聊线程池
  • 原文地址:https://www.cnblogs.com/lianshuiwuyi/p/13575983.html
Copyright © 2011-2022 走看看