技术

比特币技术笔记(7)宏观分析

  • by

1.   价值来源 比特币的价值本质上来自于公众的信任和认可。而这种认可来自于其算法设计上带来的总量有限性,和不受任何人控制的去中心化特性。比特币的有限性确保了比特币不会因为货币超发而出现通胀和贬值。此外考虑到随时可能出现的密钥遗失,比特币总量甚至是会逐渐减少的。 因此它可能成为一种比钻石或黄金更加重要的投资品。它也可能在面临经济危机或区域政治经济动荡时,成为重要的避险投资品。 2.   实际用途 由于比特币交易具有匿名性,它在实际上被大量用于非法交易。此外,由于其是一种虚拟物品,它也能够实现快速的跨境支付和财产转移。因为其便利性,它在很大程度上能够取代大额现金、黄金交易。 但是,为了避免双重支付,比特币的支付确认时间长达数小时,这意味着比特币很难用于时效性强的交易。这比目前的银行卡交易模式要慢,但从商户角度考虑,交易在银行的实际清算时间常常超过一个月,从这方面看比特币还是能够提升效率。 3.   法币 考虑到比特币的有限性,比特币一定会面临通缩的问题。但是货币通缩会给区域经济带来损害,因此比特币几乎不可能成为任何一个国家或经济体的法定货币。因此最终比特币在人类经济中的位置应当会类似钻石或者黄金。

比特币技术笔记(6)安全性

  • by

至此,一个基于大家互相遵守规则的比特币网络已经定义完毕。上文已经讨论,比特币的有效性依赖非对称加密的保障。 1.   51%攻击 1.1.   双重支付问题 在假设非对称加密难以破解的情况下,比特币的最大的风险就是双重支付的预防。但是,只要所有的计算节点都遵守既定规则,比特币网络将会非常稳定、有效的运行。那么对于故意造成双重支付的恶意攻击,比特币网络是否有足够的能力容错呢? 事实上区块链并不能100%杜绝双重支付。假设有一个攻击者希望使用比特币进行网络购物,同时利用双重支付撤回资金,需要做的是:先将自己有效的比特币支付给收款方A,收款方等待该笔交易被纳入到新的区块链中后,向攻击者寄送商品。待攻击者收货后,立即将已经使用的比特币重新支付给自己的另一个账户。这笔支付显然是无效的,因为网络中的大部分节点不会认可这笔交易。此时攻击者只能使用其他手段(网络渗透手段),控制比特币网络中超过51%的计算节点认可这笔新交易(通过创建新区块的方式认可),这就称为51%攻击。 1.2.  51%攻击与矿池 51%攻击的关键是控制比特币网络中的算力,而这并非没有可能。在比特币的挖矿网络中,有一种称为『矿池』的合作形式:大量计算节点分摊挖矿任务,共享挖矿收益。 由于成功的区块创建是小概率的随机事件,对任何一个节点而言,成功地创建区块的可能性微乎其微。为了能够获得稳定的收益,部分计算节点开展合作计算,形成『矿池』,来提高成功率,同时分摊区块激励。 当矿池形成相当的规模,聚集了比特币网络中超过51%的节点,这个矿池就会对现有的比特币网络的可靠性造成威胁。因此比特币网络中各大矿池的算力是监控其安全性的重要指标。 但需要注意的是,51%攻击只能影响未来的区块(交易),而几乎不能改变过去已经经过多次确认的区块(交易)。 1.3.  交易确认 作为比特币的收款方,为避免遭到『双重支付』和『51%攻击』的欺诈,最有效的手段是确保交易经过了多次区块确认。通常推荐等待超过6个区块之后再确认交易。   2.   高交易费与确认时间 一般一个区块需要10分钟时间产生,那么一个稳妥的交易确认需要等待近1个小时。因此在实际交易中使用比特币时,商家一般需要等待1小时来确认收款并发货。 比特币的每个区块只能包含不超过1Mb的数据,这限制了每次区块能够确认的交易数量。当未确认的交易数量远超过这一数量时,矿工会优先选择手续费更高的的交易进行确认。 随着比特币交易量逐渐增加,比特币的交易费用也在急剧增加。那些交易费过低的交易,可能很长时间都得不到确认,甚至永远也不能被验证。 如果遇到交易因为交易费过低而无法被验证的状况,可以采用的解决方案是利用『双重支付』,重新使用更高的交易费发起交易,但这一行为不被大多数比特币钱包所支持(毕竟这一行为违反规定)。另一个解决方案是收款人使用未确认的资金发起一笔给自己的交易,附带上更高的交易费用。矿工为了确认这笔高费率交易,必须连带确认其前置交易。 3.  … Read More »比特币技术笔记(6)安全性

比特币技术笔记(5)运行模式总览

1.   网络运行模式 综合前文的讨论,整个比特币网络的总体运行模式如下: 新的交易向全网进行广播(使用类似BT下载的P2P通讯协议); 每一个节点都将收到的交易信息纳入一个新区块中; 每个节点都尝试在自己的新区块中找到一个满足规则的工作量证明; 当任何一个节点找到了一个工作量证明,它就向全网进行广播新发现的区块; 当且仅当包含在该区块中的所有交易都是有效的且之前未存在过的,其他节点才认同该区块的有效性; 其他节点表示他们接受该区块,而表示接受的方法,则是在跟随该区块的末尾,制造新的区块以延长该链条,而将被接受区块的随机散列值视为先于新区快的随机散列值。 网络中的节点大致分为两类:存储节点和计算节点。存储节点主要功能是存储区块链网络中的数据;而计算节点主要功能是开展『工作量证明』计算,获取区块奖励,因此也称为矿工。 2.   矿池 事实上对于任一单独的『矿工』,成功找到一个『工作量证明』的概率是微乎其微的。因此以赚取比特币为目的运行计算节点往往得不偿失。 但是一旦成功找到一个『工作量证明』,带来的回报(区块激励)也是巨大的。为了平摊风险、共享收益,部分『矿工』会形成联盟,即『矿池』。『矿池』中的所有矿工共同寻找有效的『工作量证明』,同时也共同分摊区块激励。这样就有效的分摊了『挖矿』的风险。

比特币技术笔记(4)区块链&公共账簿

  • by

1.   双重支付问题 根据电子签名定义的比特币存在一个致命问题:货币的重复使用。即发生如下情况: 收款人B的bitcoin =发送者私钥加密(付款人A的货币bitcoin,收款人B公钥) 收款人C的bitcoin =发送者私钥加密(付款人A的货币bitcoin,收款人C公钥) 此时,按照上文定义的验证方法,收款人B与收款人C所收到的货币均有效。一种直观的解决方案就是比较交易时间:如有双重交易问题,那么先发生的交易有效,后发生的交易无效。但是在互联网中,每台电脑的时间都可能不一样,利用时间的先后来验证不太可行。 比特币的解决方案是,维护一个公共账簿来确保每一笔交易的有效性。为了保证账簿是去中心化的(防止任何个人篡改),这个账簿并不是存储在某个中心服务器上,而是存储在网络中的每一个节点中。 这样的公共账簿通过称为『区块链』的数据结构来实现。 2.   作为公共账簿的区块链 『区块链』(Block Chain)由多个『区块』(Block)形成的链式结构所组成,每一个『区块』包含了若干条有效的交易记录。『区块链』上的第t个区块的数据内容如下: block(t) = { 前一个区块block(t-1) 的散列值,即hash( block(t-1) ) 本区块所包含的交易信息 } 凡是记录在有效『区块』中的交易,均视为有效交易。那么只要证明一笔交易的资金存在于有效『区块』中,且未被有效使用,则可认为这笔支付是有效的。 但请注意,由于『区块链』的去中心化特征,这个『区块链』结构储存于比特币网络的任意节点中。那么任一网络节点都有资格生成完全不一样的『区块链』数据库。这个问题通过工作量证明(Proof-of-Work)机制来解决。… Read More »比特币技术笔记(4)区块链&公共账簿

比特币技术笔记(3)比特币

  • by

1.   比特币的定义 了解了数字签名后,我们终于可以开始介绍比特币的技术定义。 由于任何货币的价值都体现在连接付款方与收款方,即交易/转账(Transaction)。因此比特币被定义为包含了付款信息和收款信息的一条记录,即: 一枚电子货币(an electronic coin)是一串付款人的数字签名。 中本聪的比特币白皮书仅用这一句话就定义了比特币,可见这个的抽象定义非常简洁。接下来将具体解释其含义。举例来说,我们假设由B向A转账了0.5BTC,那么A所收到的比特币的定义为: A的BitCoin = ( B的比特币,A的身份,金额) 为了避免第三方伪造交易,冒用B的身份转账,则需要使用上文提到的『数字签名』技术来 证明货币的确由付款者B发出。同时收款人A的身份则通过A的公钥来指定,则有: A的BitCoin = B的私钥加密(B的BitCoin,A的公钥,金额0.5) 因此货币转移即为公开发布一个字符串,这个字符串按照以下规则生成: 收款人的BitCoin = 付款人的私钥加密(付款人的BitCoin,收款人的公钥,金额) 可以发现,比特币的定义是递归的。即一个有效的比特币,来自其付款人拥有的有效比特币。这就产生一个问题:那么第一个比特币如何定义?该问题会在后文的区块链中解释。 2.   交易验证: 收款人收到比特币之后,为验证其有效性,需要证明以下3个问题:… Read More »比特币技术笔记(3)比特币

比特币技术笔记(2)密码学基础:非对称加密与哈希函数

  • by

本篇将重点介绍比特币的密码学基础:非对称加密、数字签名与哈希函数。 1.   非对称加密 信息加密的过程相信大多数人都理解:即信息发送者使用某个密码或者秘密的规则,将信息转化为第三方难以解读的乱码,即『密文』。然后将『密文』发送给接收者;接收者再通过对应的规则进行解密,得到信息原文。 最初的加密方法都是对称的:加密与解密都是用相同的密码(也称为『密钥』)。这就意味着当需要进行加密通讯时,通讯双方需要使用一个更加安全的方式来传递这个共用的『密钥』,而且双方需要互相信任对方不会将『密钥』泄露给第三方。事实上这给加密通讯带来了很大的风险,因为『密钥』很可能被有意或无意地披露给第三方,或被第三方暴力破解。 为了解决这个问题,『非对称加密』算法被提出。它使用两套密码来处理加密通讯,这两套密码分别称为『私钥』和『公钥』,可以分别用于加密和解密信息:如果一个信息用『私钥』加密,那么这个信息仅能被『公钥』解密;反之如果一条信息被『公钥』加密,那么该信息只能被『私钥』解密。 在实际应用中『私钥』和『公钥』通过程序配对生成。『私钥』掌握在个人手中,『公钥』则公开发布给所有人。当其他人需要给此人发送加密信息时,只需要获取其『公钥』并利用它加密该信息即可。除了信息接收者外任何人都无法解密『公钥』加密后的信息。这便安全地实现了加密通讯。 具体的加密过程可以通过以下过程描述: A端(发送端):加密信息 <- B公钥(信息) B端(接收端):信息原文 <- B私钥(加密信息) 任何人可以公开自己的公钥,并将私钥安全保管,即可实现更加安全的『非对称加密』。 2.   数字签名[1] 此外,非对称加密的公私钥也可反过来使用,即:信息发送者使用自己的『私钥』将信息加密,并发送给其他人。任何人都可以使用其『公钥』解密该信息并查看其内容。 需要注意的是,只有信息发送者持有其『私钥』。如果该信息能够被其『公钥』解密,则证明了该信息是由其对应的『私钥』所加密。换言之,证明了该信息来自于『公钥』对应的持有者本人。 这实现了一个新的功能:数字签名。即信息发送者通过『私钥』加密信息,来担保该信息的确来自于发送者自己。任何人收到有数字签名的信息,都可以通过信息发布者的『公钥』解密,来验证信息发送者的真实身份。 具体的签名过程可以通过以下过程描述: A端(发送端): 数字签名 = A加密私钥(信息… Read More »比特币技术笔记(2)密码学基础:非对称加密与哈希函数

比特币技术笔记(1)简介

  • by

比特币及其所基于的区块链在诸多领域产生了较大的影响,其意义已经被很多文章所介绍。而比特币背后的技术原理则很少有中文文章提及。因此,本文将在技术细节方面介绍比特币 。 在开始前,需要见简单介绍一下比特币的基本信息。比特币被认为是由『中本聪』所发明,但其身份尚未可知。它是基于密码学原理,运行在P2P网络上的一种电子货币。其主要特点包括:匿名性、有限性、去中心化。 整个比特币网络共同约定了一套数学规则,以保证新产生的比特币将逐年递减,且比特币总量有限。而产生新比特币的过程则被称为『挖矿』。 比特币的去中心化保证了没有任何个人能够篡改比特币账簿中的信息。比特币网络中的交易记录储存于网络中的所有计算机上,只有被大多数节点所认可的交易,才被视作有效交易。这种模式比现有的银行更能够有效的杜绝欺诈行为。 此外,比特币的交易通过数字签名来进行,只需要使用交易双方的『公钥』、『私钥』即可完成交易,而将公私钥对应到具体的个人是极为困难的。这在一定程度上实现了交易的匿名性,使得比特币有如同现金一样的特性。

克里金(Kriging)插值的原理与公式推导

学过空间插值的人都知道克里金插值,但是它的变种繁多、公式复杂,还有个半方差函数让人不知所云

本文讲简单介绍基本克里金插值的原理,及其推理过程,全文分为九个部分:

0.引言-从反距离插值说起
1.克里金插值的定义
2.假设条件
3.无偏约束条件
4.优化目标/代价函数
5.代价函数的最优解
6.半方差函数
7.普通克里金与简单克里金
8.小结

Read More »克里金(Kriging)插值的原理与公式推导

用WRF模型进行气象模拟入门(1)——简介以及代码编译

WRF全称Weather Research and Forecasting Model, 是一个天气研究与预报模型.可以用来进行精细尺度的天气模拟与预报。本文将从一个初学者的角度从零开始介绍WRF的使用方法。打算写一个系列,这篇先写WRF程序的编译安装。

注意:不同版本的WRF之间会有细微差异,本文使用的 WRF 版本是 3.6.1

Read More »用WRF模型进行气象模拟入门(1)——简介以及代码编译