1.Lava是源码如何对poc进行改进的?
2.什么是lava和java相同吗?
3.扒一扒随机数(Random Number)的诞生历史
Lava是如何对poc进行改进的?
Lava开源丨开启PoC生态发展新时代
年,比特币(Bitcoin)的源码出世,中本聪想要开发一种崭新的源码去中心化现金支付体系,不再需要一个中心来记账,源码每个人都有记账的源码权利,整个账本完全公开透明,源码约吧源码去中心化的源码概念也由此而生。中本聪也将比特币的源码项目代码公布于社区,比特币由此成为了历史上第一个开源的源码区块链项目。
在那之后,源码比特币和PoW(工作量证明)慢慢走进了大众的源码视野,但由于PoW机制存在资源浪费、源码算力集中等问题,源码越来越不适宜当前的源码大环境。伴随着众多区块链从业者的源码不断探索,以PoC机制为核心的项目逐渐涌现出来。
年,Burst开创了PoC(容量证明)共识机制,其共识优势是设备成本低、利用空闲资源,实现了人人皆可锻造的可能性。Burst遵循去中心化和共享的精神,将项目源代码进行共享。虽然由于经济模型的问题,Burst项目并没有获得传统意义上的成功,但其源代码的分享为后来者提供许多启发。
年月日,为了能够让更多的源码之家会员人参与到项目当中来,推动PoC领域乃至整个区块链的发展,Lava正式在拥有超过万的全球开发者用户的平台——Github 上实现开源,致力于建立一个开源的、开放的去中心化生态。
什么是lava和java相同吗?
LAVA就是Lee(开发者的笔名)和JAVA的简称.
LAVA是一种伪编译的语言(这一点与JAVA相同,除此之外在语法上没有任何关系).
LAVA的语法极其类似c(但还是有一些不同).
LAVA程序在电脑端伪编译后,生成由一系列伪指令(伪指令长度一般为1~5字节)组成的lav文件.
lav文件通过文曲星端的LAVA解释器执行.
优点:
1.跨平台
由源代码编译的lav文件不做任何修改即可直接在任何有LAVA解释器的文曲星上执行,无须再次编译.
这一点c做不到,gvbasic也做不到(由于大量gvbasic使用了peek,poke,call等机器相关的语句,造成各机型的basic程序都有不同程度的不兼容).
好处:由于文曲星机型众多,程序员没有时间为每一种机型编写软件,大量软件由用户自己编写.而用户编写的程序一般只适用其拥有的机型,越是新机型,软件越短缺,这也是网上用户抱怨较多的一种原因.而LAVA是跨平台的,新机型可直接使用老机型的lav软件,解决了软件短枪问题.
2.与其他语言的比较
速度:比gvbasic快多了。当然要比c慢,比汇编更慢。但是更快的速度已经不是必要,LAVA有其他特性来弥补这一点。
目标代码的大小:完成同样的任务,目标代码比gvbasic大一些,但要比汇编小,比c小许多。
支持的最大目标文件长度:M。basic是K以下,c有k的限制(超过k函数调用很麻烦)。
内部函数:basic的函数极其简陋,汇编需要自己写函数,c的函数较丰富,但仍有不足。LAVA的函数库将十分丰富,尤其具有强大高效的绘图函数。lava的绘图函数库,相当于windows的directx。
结构化:basic和汇编都不是结构化语言,c和lava是结构化语言。结构化编程能够减少错误出现的物理 动画 源码概率。
编程效率:汇编效率很低,basic,c,lava由于是高级语言,效率较高。
用户友好:汇编,c,basic都要求用户对硬件有一定程度的了解。lava通过解释器屏蔽了硬件相关性,用户不需要知道硬件底层(这些工作交给解释器就行了)。
资料来源:LEE.lava8.com
另:LAVA是LAVA-LAVA的简称。一种聊天通讯工具。
Lava-Lava是一个简单有趣又高效实用的互联网通讯软件。它不仅具有传统即时聊天工具的所有功能,还能够支持5人同时进行语音对话或者视频会议,提供离线文件传输。该软件是免费的,下载和安装都很容易方便。最新推出的部落版可以建立多达人的部落,并且具有不限容量的文件共享能力。
Lava-Lava,用以表达收获、友谊、团结、热情、欢乐、活力,编辑android源码来源于南太平洋岛国萨摩亚,是部落族人在聚会欢庆时所高呼的语言。
在南太平洋岛国萨摩亚的部落中,族人们在椰子树下、花香弥漫的草地上快乐地舞蹈,高呼欢快的“Lava-Lava”,共庆收获的快乐。
Lava,是通过火山或地表裂缝喷发到地球表面(陆地表面或海洋底部)的一种熔岩。同时,其凝固成的火成岩也可以称为Lava。
lava, molten rock that erupts on the earth's surface, either on land or under the ocean, by a volcano or through a fissure. It solidifies into igneous rock that is also called lava.
扒一扒随机数(Random Number)的诞生历史
在所有的产生随机数的事物中,我认为没有什么能够超越骰子了”,这是统计学家 Francis Galton 在 年的《自然》杂志中写道。它们在容器中不断地翻滚、互相撞击,以各种形式和角度与容器壁发生碰撞,在容器中的位置和形态在外界看来都是那么不可预知,容器哪怕只发生一次晃动,外界都不可能知道里面到底是什么形态。古已有之的随机数
到底如何才能生成均匀的随机数列呢?自然界中随机性大量而近乎完美的存在,人类并不能准确地预知和量化这种随机性。迄今为止发现最早的骰子(4 个面)是来自中东的一座公元前 世纪的坟墓里。再近一些的历史是在公元前 年的中国,利用火烧龟壳产生的随机龟裂现象,一些“先知”会根据龟裂情况来对未来做判断。又过了几个世纪,pdfcpu源码解读在中国诞生了易经占卜法,利用 蓍草法进行占卜,其操作的分裂过程很类似于抛硬币。
机器生成随机数的第一次触碰
时间到了 世纪 年代中期,现代世界需要更多的随机数,不再是骰子或者蓍草可以满足的了。RAND 公司发明了一种机器,通过随机脉冲发生器可以生成大量的随机数。他们将这个机器运行所产生的数字聚合起来并发布成图书 “A Million Random Digits with , Normal Deviates”。这在现在看来是十分荒谬的,但是在当时却是一个突破。这是人类第一次产生如此大量的、高质量的随机数,并且对公众是开放的。这本书 RAND 公司一直印刷到了 年,现在在 亚马逊上也可以看得到。
于此类似的机器:摇奖机,是由著名的 Bletchley Park WWII 破译小组在 世纪 年代发明的,当时被用来生成英国保险债券**所使用的随机数。为了平息公众对摇奖机的公平性和准确性的质疑和担心,官方斥资制作了当时的巨型纪录片:“摇奖机的重要性(The Importance of Being E.R.N.I.E.)”。下面给出视频,很值得一看。
年随机性终于被正式规范化并且整合到了计算机 Ferranti Mark 1 号中。Ferranti Mark 1 号内置了随机数生成指令,利用电气噪声可以一次性生成 个随机比特位。这一特性是由阿兰·图灵设计的。Christopher Strachey 利用这一特点,编写了一套随机情书生成器。下面这是情书例子,利用这个程序生成的 David Link 的 复合计划:
JEWEL LOVE MY LIKING HUNGERS FOR YOUR ADORABLE INFATUATION. YOU ARE MY EROTIC ARDOUR.: MY FOND RAPTURE. MY THIRST SIGHS FOR YOUR INFATUATION. MY HEART SEDUCTIVELY WISHES YOUR BREATHLESS LONGING.YOURS CURIOUSLYM. U. C.
(由于上面文字过于漏骨,译者尝试引申出译文如下)
我对你的可爱迷恋至极。你勾起了我所有对情爱的幻想。我为你而狂热。你的魅力使我对你充满了渴望。我的心随你在而让我无法呼吸。你的追求者M.U.C
但是图灵的随机数指令几乎是当时的开发人员崩溃的,因为这种随机在本身就已经很不稳定的开发环境下又引入了不确定性。人们希望在软件中得到一致性的结果,但是用这种指令的软件永远不可能得到可重复的一致性结果,这也使得软件测试几乎变的不可行。
那么如果随机数生成器可以由一个确定性的函数来替代会怎样呢?如果在给定一个确定的初始条件,每次可以生成同样的随机序列会怎样呢?这就是伪随机数生成器(PRNG)。
伪随机数生成器(PRNG)
伪随机数生成器是由冯诺依曼在 年创造的。他的基本思想是从一个随机数种子开始,对其平方,然后取中间值。接下来重复对得到的数取平方并取中间值的过程,就会得到一个具有统计意义属性的随机数序列了。这也就是广为人知的 平方取中法。
然而,冯诺依曼的方法并没有经得住时间的考验,因为不论从什么随机种子开始,序列最终都会落入某个短循环序列,比如:,,,,,……。
序列中的数字是依赖于前一个数字的这种生成函数,上面的重复循环问题是不可避免的。但是如果说这个循环间隔非常非常大,对实际应用并不会产生影响,那会怎样呢?
年,数学家 D.H.Lehmer 利用 线性同余生成器(LCG)实现了这一思路。下面给出的是基于 Lehmer 的方法所实现的一种朴素 PRNG,叫做 中央随机数生成器,使用 JavaScript 在 年写的。
注意代码中的魔法数字(如 等),这些数字(通常是质数)是用来最大化重复区间的——上面所提到的自我重复的循环区间。这种 PRNG 使用当前时间作为种子值,重复区间可以达到 2 的 次方。
这种中央随机生成器发明之初非常流行,因为那时的 JavaScript 1.0 还没有内置 Math.random() 函数,当时的 Web 1.0 环境下,大家都想让自己的 banner 广告随机旋转。一个开发者 Paul Houle 说道:“它在很多情况下已经很好用了,但是不能使用它来做保密使用”。
对 PRNG 的更高要求
互联网确实需要保密。SSL 诞生在 年,它的加密方案需要高质量的 PRNG。它的发展也直接导致了一段时间的 PRNG 野蛮创新时期。如果你回头看一下 所有的随机数生成器的专利,你可能会感受到就像现代版的第一次制造飞机的浪潮一样。
世纪 年代中期的 CPU 是没有内置随机数生成指令的,这使得那时候好的随机种子特别难得。本来这问题也不大,不过当飞利浦的 Hallam-Baker 发现 Netscape(当时市场上的巨头)的 SSL web 服务器使用了“当前时间 + 一组特殊 ID”组合作为种子的时候,这个问题变成了一个切身体会到的安全问题了。Hallam-Baker 展示了一个攻击者很容易猜到种子值,并且对他们所拿到的服务器流量进行解密的过程。猜种子值是一个非常常规的攻击手段,尽管这种手法现在变得越来越困难。这里给出 年在 Hacker News 上的一段非常经典的攻击演练。
到了 年,计算机科学家们厌倦了生成随机数所受限的条件,来自 SGI 的一个团队发明了 LavaRand,它是用一个网络摄像头来对着熔岩灯拍照。从摄像头中过来的数据是一个真实的熵源——像图灵那样的真实随机数生成器(TRNG)——可以以 kb/s 的速率生成随机数。一如当时硅谷的风格,熔岩灯平台很快拿到了 专利。
AutoDesk 的创始人 John Walker 在全世界范围内推广他的 HotBits,这是一种“随机数即服务”的应用,背后原理是盖革计数器来保证其量子随机性。 年成立的 Random.org 为互联网提供真正的随机数。他们提供的服务包括真正的抛硬币随机、骰子随机和卡牌洗牌随机等。
上面所提到的大多数算法后来都无人问津了,但是一个叫做梅森旋转随机数生成器(The Mersenne Twister)的软件 PRNG 鹤立鸡群,它是由松本真(Makoto Matsumoto)和西村 拓士(Takuji Nishimura)在 年发明的。它完美地平衡了性能和随机数的质量,并且经受住了时间的考验。其基本思想是基于 线性反馈移位寄存器(LFSR),产生一个循环周期非常长的确定性序列,循环周期能够达到 2¹⁹⁹³⁷− 1。在当前的编程语言中,这种算法依旧是默认的 PRNG。
在 年,随机数市场发生了一个巨大的变化,Intel 在其 i 芯片组上集成了芯片级的随机数生成器。这样使得新的服务器都自带热噪声的本地源随机数生成能力——真正的随机数生成器(TRNG)。这很伟大,但是它始终没有软件 PRNG 快,所以加密软件依旧不得不依赖于伪随机数生成器(PRNG)。
这就把我们带到了“密码安全 PRNG”(CSPRNG)(这些讨厌的缩写!难怪很多人认为计算机科学很烦人)。CSPRNG 对于 SSL 特别重要。那么 CSPRNG 的原理是什么呢?这里有一份 页的论文来介绍 CSPRNG。祝你在里面阅读愉快。
不言而喻,CSPRNG 是一个强需求。梅森旋转随机数生成器并不是一种 CSPRNG,因为如果可以给定大量的先前序列样本,后面的数字是可以预计的出来。
时间再拉近一些, 年,Intel 为 TRNG 增加了 RDRAND 和 RDSEED 指令,具有 MB/s 的生产效率。但是 RDRAND 的完整性一直被质疑,里面是不是有某些缺陷?或者是为美国国家安全局内置了什么东西?没人确切地知道这个问题的答案,我猜某些地方的某些人一定知道,可是他们也一定不会公开。
开源硬件随机数生成器
(由一种硬件随机数生成器 PEDOUBLER 生成的随机数据)
近些年开源硬件 TRNG 也逐渐显露头角。它们广受欢迎得益于其设计的透明化:你可以自己构建线路,也可以用现有的组件搭建。完全的透明化使得对硬件随机数生成没有任何的担心和疑虑。 REDOUBLER和 无限噪声 TRNG是两个开源硬件随机数生成器,链接中给出他们的 Github 源码地址。
结尾
今天依旧有关于对随机数生成方法选择的争论,在操作系统内核、编程语言和安全包(如 OpenSSL 或者 OpenSSH)方面均未停止。有许多不同的算法聚焦于不同的特点上,如速度、占用空间、安全性等方面,也有一些安全专家依旧在寻找攻破已有算法的方法。但是对于我们日常的使用来讲,在大多数的操作系统中你可以放心地使用/dev/random,或者编程语言中你可以随心地使用 rand() 函数,都能给你带来很好的使用体验,并且你这么做,阿兰·图灵也会很开心。