区块链基础入门笔记 一

  1. 比特币用了密码学的两个功能,一个是哈希,一个是签名
  2. 哈希碰撞:例有两个数,x和y,若x != y,但h(x) == h(y),则称为哈希碰撞,哈希碰撞是无法避免的,因为输入空间是大于输出空间的
  3. 哈希函数具有的重要性质:
    1. collision resistance(抗碰撞性):即没有什么人为高效的方法去制造碰撞,只能穷举输入空间所有数
      1. 通过抗碰撞性质,即可证明可以通过hash函数判断数是否被篡改,例h(m),当m被人为篡改后,hash值理应不同
      2. 但是没有哈希函数能在数学上证明抗碰撞性,只能通过实践中的经验,例md5,之前认为很安全,但后面发现可以制造哈希碰撞的方法
    2. Hidding(隐秘性):通过x能算出h(x),但无法通过h(x)反推出x,即h(x)没有泄露x的信息
      1. 该性质成立的前提为输入空间足够的大,且没有将大部分概率分散到小部分空间,即分布较均匀,防止穷举找到x
      2. 当输入空间较小时,可通过在后面加上一个随机数,来满足数足够分布均匀和满足输入空间足够大
    3. puzzle friendly:在数m通过哈希函数函数求出h(m)之前,不能知道h(m)将会若在哪个范围
      1. 挖矿的本质为找出H(block header) <= target,block header即区块链中某个结点(区块)的块头,其中有很多域,其中nonce域是我们可以设置的,而挖矿的过程即不停的寻找随机nonce,使得其满足上面的式子,而puzzle friendly性质本质是说,挖矿的过程没有捷径,只能通过不停的尝试来的到哈希值小于等于目标值的数
      2. 由于puzzle friendly,所以挖矿过程才能做为proof of work(工作量证明),因为找到了nonce符合要求,一定是做了大量的尝试工作,虽然挖矿很难,但验证很简单,只要计算一个哈希值即可
    4. 比特币用的哈希函数为SHA-256(Secure Hash Algorithm),该函数满足哈希函数的以上三个性质
  4. Sealed envelope(密封的信封),例一个人预测第二天股票结果,则他不能将结果公开,避免他人受到影响导致股票被影响,也不能将结果保存在自己那里,避免自己去修改,他可以将结果放在密封的信封里公开保存,到第二天再打开查看预测结果,判断是否正确。而我们可以通过哈希函数的collision resistance和hidding来实现,第一天将预测结果x得到的h(x)公开,他人无法通过h(x)得到x,股票不会受到影响,第二天再把x公开,可通过比较哈希值,防止篡改预测结果x
  5. 由于比特币是去中心化,所以不能像在银行开账户一样,但可以自己开通账户,不需要任何人批准开户,即在本地创建一个公私钥对,在比特币中就代表一个账户,公私钥对概念来源于非对称加密
    1. 对称加密:加密与解密过程中用到的是同一个密钥,这样的话密钥的分发就不是很方便,当网络被窃听时,可能会导致数据信息被盗窃
    2. 非对称加密:加密与解密过程中用到的是一对密钥,在传输过程中,发送方将数据通过接受方的公钥加密后发送,再通过接受方的私钥解密,公钥是可以公开的,私钥是保存在本地,不被公开的
    3. 这个公钥相当于银行账号,发送方转账时只用知道接受方的公钥就行,私钥相当于账户密码,知道密码时,就可以把该账户的钱转走
  6. 公钥私钥的作用即用来签名,比如有a要转比特币给b,要把交易放到区块链上,别人需要知道该交易是否是a发起,是否存在冒名顶替,即验证交易真实性,需要在交易时,a用自己的私钥对交易进行签命,其他人收到这个交易时,可以通过a的公钥来验证签名的正确性
  7. 例256位哈希值情况,随机生成公私钥对与已经存在的公私钥对相同的概率可以视为0,概率极低,前提是我们假设有一个好的随机源,比特币不仅要求生成公私钥时有好的随机源,还要求每一次签命的时候都有好的随机源,否则有可能会泄露私钥。简单来说,一个良好的随机源应该包含如下特性:
    1. 不可预测:任何时间点任何个体和群体都不能预测为发布的随机数
    2. 没有偏向性:最后的输出分布完全是随机的,不能有任何的倾向性
    3. 公共可验证:在随机数生成之后,任何人都可以进行验证
    4. 去中心化:随机数的产生应当是由一群独立而且活跃的个体产生出来
    5. 可获得性:系统必须保持持续运行,总是(按照节奏)不断地输出随机结果

你可能感兴趣的:(区块链,区块链)