比特币的密码学原理

比特币本质:加密货币 crypto-currency

比特币用到密码学的两个功能

1.哈希:cryptographic hash function    2.签名:非对称加密

一、哈希(特指Bitcoin中用到的相关密码学原理)

1、collision resistancewog

collision即哈希碰撞。“输入x不等于y,输出H(x)=H(y)",不同输入映射哈希表中同一位置。从浅显意义上讲,许多初等函数只要不满足单调递增递减,都被认为是不具有抗哈希碰撞性质的。然而,密码学中许多算法,collision是较难以人工创造的。倘若给定算法,我们要证明其是具有抗碰撞性是比较繁浩的工程,然而要证明它不具有抗碰撞性,只需要举出反例即可,即找出x,x'映射到同一H(x);MD5曾是一个很流行的Has(据说流行反正我知道的时候已经不用了),但已被证实可制造collision,人工制造的collision使得在Hash(x)不变的情况下,对x改变,使得x不再安全。

例如:上传文件只cloud,再次下载时如何验证该文件是否被篡改。上传文件时对该文件取哈希Hash(up),将哈希值存在local,当从cloud下载该文件时,再取一次哈希Hash(down),由于抗碰撞性,若up和down文件不同,他们的哈希值必定不同,因此可以比较两次的哈希值来判定文件是否被篡改。

2.hiding(一定范围内)

给定哈希函数,我们可以对任意一个x计算得到Hash(x),但给出Hash值,却难以计算出其原本的初始值。

前提条件是输出空间要足够大,倘若已知输出空间为x和y两个值,对x和y分别取哈希,一次比较就可以得到初值。而且输入应相对分布均匀,若输入集中在某一小范围内,仍然容易枚举计算。

当然brute-force仍是解hash的有效手段,输出空间为256时,输入2256+1必然发生碰撞。


实现digital equipment of a sealed envelope (预测问题)

预测可能存在的两个问题:1,提前预告:发出预测结果后,由于预测事件还未发生,该事件可能因预测而人为地导致偏离它原本的发展趋势。例如原本A股会暴跌,结果巴菲特预测明天A股会涨,然后许多人蜂拥而上抢购A股,迫使其改变原来的趋势。2,延后预告:待事件发生后公布预测结果,就是马后炮,没人会信的。

先公布H(x),待真实结果出来后,再公布x。H(x)包括哈希函数和哈希值两部分。

 由于抗碰撞性,因此仅有一个初始值经计算后与给定的哈希值相等;由于hiding的特性,公布哈希值后,他人仍不可能知道原本的预测结果是什么(除非你闲的慌去暴力枚举),因此不会人为地对事件造成干扰。待事件发生后,将后公布的预测结果取哈希值,验证是否与先前的哈希值相等,若匹配可以证明公布的预测结果就是真正的预测结果。如果本来可预测地输入空间就较小时,例如仅仅预测yes/no两个选项时,可以通过 预测结果||nonce 在结果后面加上一个随机值地方式来间接扩大输入空间,增大暴力枚举的难度。


3, puzzle friendly

哈希值是难以预测的,无规律可循,只能死算。若想让哈希值落在某个范围内,不能投机取巧,只能用笨方法暴力枚举。这也是挖矿的基础,不断尝试随机数,使得nonce的哈希值落在预期的target内。hash的特性为:Difficult to solve, but easy to verify. 即找nonce的过程是困难的,需要大量的计算,但是一旦找到后,他人只需计算找到的nonce即一次计算来验证该nonce是否落在目标target内。

二,签名(public/private key)

 开户需要创建公钥私钥地址,具体的创建过程用到的加密算法以及公钥私钥的关系在此不做讨论,包括椭圆曲线加密算法等,他们都具有哈希函数的特性。

用户可以暴露公钥和地址(相当于银行卡号),但是不能公开私钥,(?)是二维码形式,一旦暴露,账户会被窃取。在比特币区块链中,私钥代表了对比特币的控制权,交易发起方用私钥对交易(包括转账金额以及转账地址)进行签名,并将签名后的内容和公钥广播,各节点收到内容后用公钥进行验证发起方身份以及交易是否合法。在整个发布验证的过程中,发起方无需暴露自己的私钥,从而实现保密的目的。

原文地址:https://www.cnblogs.com/faded828x/p/13052651.html