如何在空白服务器上搭建网站,wordpress 添加图片不显示,二手网站需求建设分析,如何提升seo作者 | 曹严明如果说比特币是对传统货币的一种颠覆#xff0c;那么比特币的基础技术——区块链则是对传统编程范式的一种颠覆。区块链技术被看作是一次Paradigm Shift。也许很多人对 “颠覆”这种说法不以为然#xff0c;因为现在这个词已经被用滥了#xff08;如今哪个好一… 作者 | 曹严明如果说比特币是对传统货币的一种颠覆那么比特币的基础技术——区块链则是对传统编程范式的一种颠覆。 区块链技术被看作是一次Paradigm Shift。也许很多人对 “颠覆”这种说法不以为然因为现在这个词已经被用滥了如今哪个好一点儿的词没有被用滥呢但是明眼人在匆忙做出“这又是个噱头”这样的结论之前会谨慎地去了解它背后的东西。 这篇文章的目的就是为程序员介绍区块链的独特技术以及这些技术如何运用到项目或者产品的开发过程中。 即使你不想进入全新的区块链应用开发大潮你也会发现其底层技术对平日的应用开发有不少启发和借鉴作用。 一个新技术的诞生有它顺应时代的合理性黑格尔语“存在就是合理的”。作为程序员我们应该去了解它的合理性所在之处取而用之。我们不一定非要用新技术去颠覆一个老应用但可以用新技术去重塑一个老应用。 本篇主要讨论区块链在三个方面的独特性去中心和去中介、隐私保护、时间戳。去中心和去中介1994年凯文 · 凯利国内称KK出版了一本预言式的巨著《失控》书中充满了关于智慧生命及其社会进化机制的真知灼见。书中提到的很多概念比如云计算、物联网、网络社区等在二十多年后的今天已经成为普遍事实。“去中心化”是凯文 · 凯利在书中提出的“九律”中的一条。一个去中心化的系统没有一个中央的、至上而下的控制主体而完全是由大量相互联结看似无组织的小个体构成这些个体有一定的独立性可以相互作用它们自发地形成一个整体以后由量变引起质变结果整体的能力、智慧、适应性和灵活性都大大超过了个体的简单相加。这样的去中心化系统生命力极强遭到破坏可以自我修复因而很难被完全摧毁。互联网就是一个典型去中心化的例子极强的适应性和抗破坏性是互联网的根本。不过如今的互联网却有了中心化的趋势。中心化的后果见仁见智对崇尚多种选择的人来说中心化代表着选择自由的丧失服务质量的下降活力的倒退和创新的萎缩。微博做为新一代互联网媒体的翘楚它的兴起、没落以及再次复兴从内容的产生和传播来说就是一个从一开始的去中心化到由大V们控制的中心化再到去中心化的历程。总之只有那些赋予其中每个个体充分发展的自由的系统那些抗拒中心化趋势的系统才是生机勃勃、有创新力、能够不断进化的系统。 站在2016-2017年之交智能机器时代似乎离我们不远了。芯片、存储、网络、移动、物联网技术都极大增强了各种网络终端edge的能力无论这些终端是人、手机、汽车、机器人或是其他设备。以前由于存储、网络或者计算能力等限制而选择中心化的应用程序设计现在的程序员则有更大的自由去选择一种去中心化的设计。去中心化的系统更加灵活更具适应性更有活力。 另一方面现实社会中的各种交易活动由于交易双方缺乏信任、信息不对称、搜寻成本、匹配效率、交易费用等因素需要有交易双方共同信任的中介参与。比如银行间的跨境支付中间需要通过SWIFT网络和代理银行而不能直接进行点对点交易。中介的产生源自于降低交易成本的目的但是随着新技术的出现和普及双方直接交易成为可能而且成本更低。在这样的情况下中介变得多余了交易双方通过去中介化来降低交易成本。 去中心和去中介有多种不同层次可以体现在业务模式、业务数据的产生和传播、应用系统的架构、应用系统的开发、运行、维护、升级等方面。比特币和区块链是一种比较彻底的去中心和去中介应用它包含以下几种去中心和去中介技术1. 点对点网络P2P network点对点网络并不是什么新概念网上的很多文件共享和视频直播服务就是用P2P网络协议实现的。P2P是对等网络网络中每个节点的地位相当没有任何节点处于中央控制的地位也没有任何节点扮演交易中介的角色每个节点既是Server又是Client节点可以选择随时加入随时退出节点可以选择运行所有的功能Full node也可以选择运行部分的功能节点越多整个系统的运算能力越强数据安全性越高抗破坏能力越强。 2. 去中心化数据库例如Bitcoin的分布式总帐。 3. 去中心化应用 (Decentralized App简称 DApp)例如在Ethereum上运行的智能合约应用。 4. 共识算法无中心、无中介、无需相互信任的对等网络的节点间需要协调一种共识算法以便共同维护一个统一的分布式数据库以及协同工作以保障整个系统的安全性和适应性。有多种共识算法包括 PoW–Proof of Work工作量证明 PoS – Proof of Stake权益证明 DPoS–Delegated Proof of Stake授权权益证明 PBFT–Practical Byzantine FaultTolerance实用拜占庭容错 PoET–Proof of Elapsed Time流逝时间量证明等。 作为一个程序员或者架构师这些思路和技术有什么帮助呢你的应用需要去中心或者去中介吗你的下一个应用需要采用去中心化的架构吗设计去中心化的架构需要作哪些改变需要哪些基础设施在时下这股区块链的淘金热里已经有很多创业公司准备颠覆传统的中心化应用。几乎所有的应用都开始有相应的基于区块链技术的去中心化版本。如果你认为目前没有必要或者不可能去中心化未雨绸缪总是不会错的。 隐私保护个人隐私信息泄露在中国是一个非常严重的现象。盗取、贩卖个人信息已经有完整的黑市产业链部分互联网征信和数据公司从黑市上购买数据甚至雇佣黑客盗取数据。互联网用户普遍意识到个人隐私信息的重要对隐私保护的要求会更高。程序员有责任从技术上加强个人隐私的保护。 在传统的应用架构设计中隐私保护或者安全性设计的优先级并不是很高现在这种情况必须有所改变架构师需要提升隐私保护设计的优先级。 区块链应用领域采用了很多密码学的技术例如哈希算法、加密算法、公钥密码学、默克尔树、和零身份证明。 Bitcoin在保护用户身份方面使用哈希过的公钥作为个人账号这样在交易时隐藏了个人信息。另外个人账号可以设计成一次性的每次交易都使用新账号这样就很难通过追踪某个账号的交易来推测用户身份。Bitcoin的总帐是公开的上面每笔交易记录包含付费账号、收费账号以及转账金额。 如果觉得这样的隐私保护还不够另一个数字货币Zcash在Bitcoin之上增加了一些协议将付费账号、收费账号以及转账金额都隐藏了起来采用的方法仍然是加密、哈希、默克尔树和零知识证明。 尽管比特币出自于一群无政府主义者之手但他们秉承的一些诸如保护个人隐私的信念在这个信息泛滥的互联网时代还是非常可取的。 你的应用是否收集了超越应用需要的个人信息保护隐私的最好办法就是不收集它们在处理交易时是否可以传递尽可能少的个人身份信息或者使用一次性账号在日志中是否可以记录尽可能少的个人身份信息或者完全不需记录缓存数据库中的个人信息是否安全消息传递时不仅采用Session Key加密是否还可以采用Message Key如今哈希算法、公钥加密默克尔树这些加密技术唾手可得。程序员应该养成新的习惯在应用设计中采用各种加密技术保护个人隐私信息包括个人账户、交易、浏览、日志信息等。时间戳传统关系型数据库在设计表时一般会有一个或多个时间戳timestamp字段用来标记一行记录添加或修改时的时间。基本上这些时间戳是给应用内部使用的。当数据被共享给其他应用时这些时间戳并没有多大意义因为时间戳可以伪造。 在数据黑市上一个数据掮客可以将一份银行VIP客户数据进行注水掺入一半的假数据。 一家保险公司为了搅乱市场上竞争对手的视线故意污染数据将高净值用户放入骗保用户黑名单将骗保用户放入高净值用户名单然后让污染后的数据故意泄露出去。 如果每条数据都带有一个真实可信的时间戳这条数据产生的真实时间点这样的造假行为就比较难奏效因为假数据的时间戳一般都是最近的。 以前我们很少关心数据的时间戳很少去了解时间戳对数据的意义一个原因也许是我们不知道如何用技术去实现这样的时间戳。 如果技术实现完全可行那么这个时间戳对我们来说就有了全新的意义。首先我们有了真正可以信任的历史数据。第二这些数据因为可信变得更有价值可以在应用之外被其他应用或者分析工具使用。第三我们可以基于这些可信的历史记录生成信用。最后我们真正进入一个信用社会。 想象一下如果我们想在未来某天证明自己的数据是在今天产生的可以在今天对今天的所有数据进行某种形式的哈希比如默克尔树最终得到一个哈希值然后在第二天的《参考消息》上登一个广告把哈希值发布出去。明天的《参考消息》就成了我们的时间戳。如果明天我们想做同样的事可以如法炮制另外有一个关键点那就是要记得把今天的哈希值也给哈希进去。这样每天的哈希值就包含了以前所有数据的哈希信息。 区块链在P2P网络上通过节点间的共识算法实现了一个分布式的时间戳服务。 区块链是在时间上有序的、由记录块区块组成的一根链条。一个区块包含两个部分区块头Block Header和记录部分。区块中的所有记录通过默克尔树Merkle Tree组织起来默克尔树根Root的哈希值做为本区块里所有记录的数字指纹被放入区块头。区块头还包含以下字段前一个区块头的哈希值这是前一个区块的数字指纹也可以看做是指向前一个区块的哈希指针本区块的时间戳、高度Hight即从第一个区块开始数本区块是第几个块以及一些其他信息。系统的共识算法保证了每过固定的一段时间Bitcoin是大约10分钟参与整个系统记账的节点会达成共识在区块链上添加下一个新的区块。 时间戳的这种设计使得更改一条记录的困难程度按时间的指数倍增加越老的记录越难更改。这是因为如果改动某个区块里的一条记录意味着该区块原来的默克尔树根失效了需要改动区块头该区块的数字指纹随之失效。又由于下一个区块的区块头包含这个哈希指针这就意味着下一个区块也需要改动。如此直到最新的那个区块。 可见要想改动一个区块必须同时改动该区块后面的所有区块。因为将一个区块放入区块链中需要消耗非常多的资源资源种类依共识算法的不同而不同可以是计算力流逝的时间拥有的权益等随着后面添加的区块越来越多要想改动某个区块几乎是不可能的。 对一个普通应用来说如何实现这样一个时间戳服务呢我们需要自己创建一个区块链吗其实没必要Bitcoin就是一个很好的时间戳服务我们可以把哈希值写到Bitcoin的区块链中。这是一种存在证明Proof of Existence。Factom也提供类似的服务它收集所有的哈希每隔10分钟生成一个哈希值写到Bitcoin的区块链中。 哪些数据需要有时间戳必须是不能变更的数据特别适合存档文件。需要现在就考虑实施时间戳吗这个跟你的数据战略相关。在大数据时代拥有高质量的数据就是拥有了价值。时间戳可以一定程度上保证数据的可信度至少这些数据是经过“时间考验”的。总结2009年1月Bitcoin发布2015年7月Ethereum发布到今年区块链开始大热。对于程序员和架构师来说区块链带来了新的思维新的程序设计范式它所基于的技术也是一般程序员不太熟悉的。它号称要颠覆传统应用要构造一个“价值互联网”。 本文讨论了区块链三个有意思的方面去中心和去中介、隐私保护、时间戳。程序员有必要了解这些有益的思路和技术审视自己的应用和产品看看是否可以借鉴是否可以提升用户体验增加数据价值降低运营成本或者是否有新的业务场景也许还可以开创一条全新的业务模式。作者简介曹严明SAP咨询服务部架构师专注于保险业核心系统、电子商务、企业移动应用等解决方案。曾就职于微软和HCL参与过SQL Server、SharePoint、Visual Studio等产品的研发。扫码加入「CSDN 区块链技术交流群」