写在前面:本文作者为EOS创始人DanielLarimer。他在文章中分析了传统互联网中的数据库等基础架构和设计的缺陷并指出区块链是最好的解决方案:诸如EOSIO之类的区块链开放式框架使得开发者无需为了构建安全的应用程序而重新创建“数据库”,因为所有用户使用私钥对自己的行为签名,可追溯和查证。未来B1的一个目标是添加工具和接口,促使在区块链上部署业务的过程和传统互联网上部署业务相似。
传统的网页应用程序基础结构在设计时将安全性作为事后考虑事项,在过去的25年中,许多公司一直在试图修补一个根本不安全的架构。这种架构在设计时就预设服务器是可以被信任和保护的,但是多年的经验告诉我们,没有服务器是安全的,更不用说内部的攻击了。换句话说,服务器基本上是中心化的。
我们过去认为“问题”在于用户和服务器之间的连接,因此我们引入了SSL和HTTPS。但后来我们发现,黑客会破坏数据库并窃取密码。所以我们开始存储密码的哈希值,但后来我们发现黑客会在盗取哈希值后强行破解密码。然后,我们引入了密码切换机制,以便在暴力破解时更改密码,诸如此类的措施还有很多。
声音 | BM:如果只想交易RAM的经济价值而非效用,可发行锚定RAM的代币:10月17日,BM在Medium发文称,EOS RAM是一种有人为限制的资产,它只允许用户在付费的情况下买卖RAM。RAM可以通过在单笔交易中同时买入或卖出以实现有效转让,并产生1%的实际转让费。如果有人只是想交易RAM的经济价值,而不是RAM的效用,那么可以构建一个简单的合约发行锚定RAM的代币,而这些代币是可以免费转让的。这甚至有可能创造一个没有交易费的二级RAM市场。[2019/10/18]
为了保护服务器和数据库,企业需要花费数十亿美元,尽管付出了所有努力,但仍然没有简单的方法来审查系统并确保企业按预期运行。
Block.one正在构建区块链软件,以保持数据库和用户账户的安全,防止未经授权的访问和未予解释的修改。有了区块链,用户可以使用高度安全的私钥,这些密钥存储在安全的硬件中,用于对每个用户交互进行签名,而不是简单地进行服务器连接的身份验证。区块链创建了一个不可更改的记录,建立了接收用户输入的绝对和确定性的顺序,而智能合约提供了确定性的业务逻辑,确保了所有系统之间的一致性。
声音 | BM: RAM 不是固定的,每天都在增长:据MEET.ONE 报道,今日有社区成员在电报群提问到“为什么 EOS 链上的 RAM 总量是固定的”,对此 BM 现身回答到:RAM 不是固定的,RAM 每天都在增长。[2019/7/20]
未来的Block.one正在消除密码和昂贵的审计,为企业节省数十亿美元,防止身份盗窃,并提供更高的可靠性和可审计能力。
多年来,我一直认为每个多用户网站都可以从区块链后端中获益。和很多人的认知不同,区块链不必是缓慢、低效的数据库,也不必在抗审查、开放的基础上运行。区块链可以在安全性、审计能力、透明度和业务流程的完整性方面提供重要的改进,即使区块链完全由公司自己操作,其中的所有内容都不会公开。本文旨在揭示区块链在企业环境中的真正价值,并为区块链行业的发展指明方向。
常见的误解
在区块链行业中,许多人认为区块链只有在将互不信任的参与方连接起来时才会创造优势。他们认为,传统的数据库技术已经可以完成确保业务所需的所有工作。换句话说,他们认为传统的数据库复制和“数据完整性”保证就足够了。在这个过程中,他们要么忽视要么无视区块链所提供的完全不同的安全性和完整性保证:
1.对全局事件序列的承诺
2.业务逻辑的确定性执行
3.业务逻辑和数据完整性的紧密耦合
4.消除密码
在传统的业务应用程序架构中,业务逻辑与数据库是分离的。通常有一个应用服务器,如Node.js或J2EE,提供了修改数据库的密码。Node.js服务器的作用是通过密码或多因素认证机制对用户进行身份验证。一旦应用服务器对用户进行了身份验证,它就会发出一个会话令牌,用于对未来的用户交互进行身份验证,直到超时或会话的某些元素发生更改。
声音 | BM:当你是一个受监管的个体时,你要遵守得不仅仅只是合规,你需要承担更多:据MEET.ONE 报道,BM在电报群里发表了他对合规的看法:在BM看来,合规确实保护了人们,人们利用合规的法律效力预防竞争和管控公司。但是当你是一个受管制的个体时,你不仅仅要遵守合规,你还必须遵守一般政策或承担许可证被撤销和关闭的风险。简而言之,你基本上不是真正地拥有自己的业务。[2019/6/15]
显然,这种传统设计通过应用服务器管理的单次登录/密码执行所有数据库操作。通过最终用途,应用服务器负责部署身份认证机制。显然,通常有多个用户可以访问用户名和密码。数据库管理员可以向许多不同的应用服务器或个人分配和撤销凭据。
高级系统确保在横向扩展的系统中,每个应用服务器都有自己的用户名和密码,在某些情况下甚至可以使用公钥基础设施和硬件安全模块。但是,即使在这里,数据库也只认证应用服务器的连接。为了提供审计日志,它必须记录安全连接的整个数据流。但是,即使这个日志也只能记录应用程序服务器请求的“读写操作”,而应用程序服务器已经丢失了最初用户意图的所有信息。
审查这样一个系统的审计师无法知道应用服务器是否遵循正确的业务逻辑,是否正确地验证了最终用户的身份。Node.js进程可以将用户操作记录到数据库中,方便审计师复制同样的计算,但这样的记录并非不可篡改,而且没有独立认证验证,无法了解终端用户真的授权了某一行为。
可以尝试记录每个用户的连接,但是由于用户经常通过连接传输他们的密码,这些记录最终会成为一个泄露用户信息的蜜罐。更复杂的系统可以对这些记录进行加密,这样只有审计人员才能读取它们。
声音 | BM:EOS 最近创一天内处理超过 7000 万操作的记录 平均每秒超过 810 次:2小时前,BM 发推对 EOS 最近的表现表示赞扬,他写道 “EOS 最近创一天内处理超过 7000 万操作的记录,平均每秒超过 810 次。我们团队在进一步优化和扩展方面跨出了一大步。[2019/4/6]
假设审计日志没有被篡改,审计人员将不得不通过应用程序逻辑运行相同的操作序列,以验证最终数据库状态是否匹配。这意味着应用服务器必须以确定性的方式实现。
确定性计算很难
虽然编写确定性代码似乎很简单,但实际上所有常见的计算机语言都是非确定性的,因为它们允许开发人员获取存储在数据库以外的数据。可以是一些简单的东西,如时间戳、内存地址、环境变量、IP地址,也可以是一些更微妙的东西,如硬件上的浮点行为或哈希表的插入顺序。在许多情况下,访问长时间运行的应用程序服务器的内存变量就足以引入不确定性。启动/停止应用程序服务器的动作必须被记录和复制,否则在重放期间每个本地内存访问可能是不确定的。
事实是,编写确定性代码对于受过常见误区培训、积极寻找非确定性的最佳开发人员来说是一个挑战。典型的企业应用程序开发人员会发现以确定性的方式编写代码是困难的或不切实际的。
如果我们进一步假设应用程序代码是确定性的,应用程序如实记录用户事件,那么我们仍然面临跟踪部署的代码版本的挑战。应用程序是动态的,并且经常更新,因此应用程序代码本身也必须是数据库状态的一部分,并且其更新的管理和记录与用户操作的安全性和可审计性相同。然后,审计人员需要拥有应用服务器代码的所有版本的副本,并根据需要通过每次版本升级来重放用户输入。
声音 | BM:应用程序开发人员应仔细考虑其设计效率 否则将被取代:据引力观察消息,BM发表了最新文章《开发有效率的合约》,文章写道:EOS区块链用户面临的主要挑战之一是CPU资源的稀缺。解决这种稀缺性有两种方法:增加CPU容量或通过提高效率降低CPU需求。Block.one正在努力提高容量,但是,取决于应用程序开发人员编写更有效率的合约来减少需求。现在是应用程序开发人员开始仔细考虑其设计的效率的时候了,否则他们将被更高效和更经济的替代方案所取代。[2018/12/13]
即使单个应用程序服务器在安装和部署方面都能够以确定的方式进行操作,它仍然会遇到一个主要的可扩展性问题。只有一个应用服务器实例可以在数据库进行操作。并行访问可以通过复杂的锁实现,但是即使锁上的竞争条件也必须被记录和复制,或者两个具有不同本地变量的应用程序逻辑实例也可能产生不确定的输出。
此时人们可能会完全放弃确定性,但是确定性在缺席之后,会逐步在最终数据集累积大量的偏差。审计人员将被迫使用模糊逻辑和近似匹配,每个人都必须相信“模糊逻辑”已经够好了。
当然,要否定编写和部署确定性代码所付出的所有努力,唯一要做的就是让数据库管理员直接修改数据库而不进行跟踪。在某些情况下,对用户输入日志和状态的仔细更新可能会创建两个不同的数据库状态,每个状态都通过了确定性测试,但仍然具有不同的和不可调和的输出。例如,假设一个教授向系统提交了一个学生的成绩为F,然后这个学生可以通过黑客或贿赂的方式进入数据库来更改他的成绩和教授提交的记录。
消除密码
任何重视完整性的多用户系统的最终目标都是确保不能伪造用户输入。用户名/密码或其他主观的多因素认证的使用依赖于服务器来判断密码是否匹配,或者是否输入了正确的SMS代码/电子邮件链接/验证码。很明显,这对系统的完整性来说是一个巨大的问题,我将提供一个真实的例子来说明这些系统有多糟糕。
2016年,我在一家加密货币交易所开设了一个账户,后来这家遭到黑客攻击,黑客窃取了价值数万美元的比特币。我当时一共收到了4封邮件,第一封是“密码重置”邮件,然后是另一封表明我的密码已成功重置的邮件。然后我收到一封要求确认我的比特币提取的邮件。然后我收到了一个通知,说我的提币手续已经办完了。
乍一看,我的邮箱似乎被黑了,但这是不可能的,因为我采用了多因素认证。我的邮箱安全页面显示,没有未经授权的访问。我也能看出来,因为谷歌会记录并显示所有访问我邮箱的IP和设备。
事实上,攻击者在邮件到达我的邮箱之前就截获了邮件。应用服务器无法知道邮件被截获,因此就算攻击者只有应用服务器生成的一次性代码,其还是能获得密码重置和提币的授权。
同样的漏洞也可用于SMS或依赖于用户控制的私钥以外的其他技术。真正安全的用户账户是为所有用户采用基于硬件的私钥作为他们的登录凭证,在硬件密钥丢失的情况下,采用一个稳健的和费时的过程来促进安全复位。
此时,多用户业务应用程序可以使用用户的私钥对每个用户请求签名,将这个签名的请求记录到数据库中,并使用确定性代码处理它。即使这样也不能提供人们所期望的完整性,因为用户请求仍然可能被删除,同时还会产生副作用。想象一下,当一名警官提交了你的罚单,然后所有的州都产出了这个请求,你就可以入侵警察数据库并删除他签署的请求。
此时,精明的工程师会宣称,我提出的每个问题都可以通过更改应用程序逻辑来解决。他是对的,一个成熟的应用程序开发人员可以使用传统的数据库、传统的应用程序服务器和常见的密码原语来构建一个相对安全且可审计的系统。根据同样的逻辑,一个精明的工程师可以声称数据库是完全不必要的,所有的东西都应该直接构建在文件系统上。也有工程师可能会指出,我们可以从头开始编写代码,不再依赖于Node.js和J2EE等应用服务器框架,这样就能提高性能。这就好像所有的东西都是由低水平的技术制造出来的,我们也可以设计出性能最佳的晶体管。
我之所以指出这个极端,是因为它强调了了高级框架在加速和保护新应用程序开发方面的真正效用。很少有人编写自己的密码库或算法,而编写这些库或算法的人要么是专家,要么在自己的系统遭到黑客攻击时成为了反面教材。从头开始开发/重新开发所有东西的成本可能会使每个应用程序都比在经过验证的框架上构建更昂贵。
区块链应用和数据服务器的优势
区块链和EOSIO这样的开发框架之所以存在,是为了让应用程序开发人员不必为了构建安全的应用程序而重新创建“数据库”。安全性和确定性很难实现,这就是为什么技术构建在抽象细节的层中。EOSIO在同一过程中将确定性执行环境与快速数据库相结合。所有的用户操作都由他们自己的私钥签名,并记录在一个复制和分布式的数据库中,该数据库具有对区块头进行公开承诺的能力。
EOSIO这样的框架变得与传统的不安全系统一样强大且易于开发,只是时间问题。在许多方面,EOSIO的架构已经比传统系统具有更高的性能,这是因为它将应用程序逻辑放在与内存数据库相同的进程空间中。这就创建了确定性存储过程。
在未来的几年里,Block.one的目标是添加工具和接口,使在区块链上部署企业应用程序就像在传统企业应用架构上部署同类应用一样容易。
很明显,采用区块链技术应该成为政府机构、上市公司和有责任防止欺诈或进行财务报告的企业的优先事项。在我看来,未来几年不采用区块链技术就像银行不采用SSL,一旦该技术得到广泛使用,不使用区块链技术就会被认为是疏忽。
是时候开始行动了。如果应用程序的构建方式没有根本性的改变,你的企业和用户就不会安全。每耽搁一天,你的生意就会面临欺诈或黑客攻击的风险。
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。