美文网首页
戏说R语言系列9

戏说R语言系列9

作者: eryesanye | 来源:发表于2018-06-14 09:03 被阅读0次

讲一下如何用R语言构建区块链。

区块链是年初以来被炒得最火、也最“莫名其妙”火起来的技术。得益于大佬们的集体发声,区块链最终在业界达成了共识,“无区块链,无未来!”。这样的共识,在历史上,也同样出现在很多成功或失败的技术上。

下面的内容,部分参考(主要是代码)Johannes Mueller的一篇博客。Johannes Mueller说他受另外一个用Python写区块链的博客启发,于是写了一个R语言版本的区块链。

我看了下Johannes Mueller的博客,里面并没有涉及太复杂的细节,讲的是在实现区块链的两个非常重要的环节,即Hash(哈希)和 Proof-of-Work-Algorithms(工作量证明)。

Hash是加密算法的一部分。Johannes Mueller举了一个例子来说明什么是Hash。

Johannes Mueller问他的朋友:“你猜猜,在R语言和Stata语言中,哪一个是我的最爱?”,接着他又告诉朋友:“我可以告诉你答案,但是我只能给你这个答案的Hash值,而且是用SHA256算法得到的Hash值”。

这个Hash值是:
“71ec0b920622cf4358bbc21d6a8b41f903584808db53ec07a8aa79119304ce86”

如果不借助工具,估计大家都猜不出这段Hash值到底代表的是什么。但是,这个问题的答案很明确,要么是Stata,要么是R,而且我们还知道产生这个Hash值的算法是SHA256算法。

于是,Johannes Mueller的朋友使用R语言的digest工具来寻找答案,首先,他用digest工具得到Stata的Hash值,代码如下:

Stata的Hash值

很明显,Stata的Hash值与Johannes Mueller提供的Hash值并不相同,所以,这位朋友基本上可以判断Johannes Mueller喜欢的是R语言。我们看一下R的Hash值是多少?

R的Hash值

R的Hash值确实和Johannes Mueller提供的Hash值是一样的。

Johannes Mueller问的是一个很简单的问题,而且给出了潜在的答案。可是现实情况要复杂的多,没那么容易就能得到答案,要通过秘钥才能知道Hash值所表达的真实内容。

我们再回到区块链上。字面上区块链是由一个个区块连接成的一条链条(这么解释有点多余)。区块里都装了些什么呢?如图所示:

区块里都有些什么呢?

index(索引)、timestamp(时间戳)、data(数据),如果仅仅是这三样东西,那么这个区块和普通数据库没什么区别。

可是,当我们加上 previous_hash(之前的Hash值)、proof(证明)、new_hash(新的Hash值)之后,区块就不再是传统数据库了。

我们举个银行的例子,来说明传统数据库的内在风险。主要体现在以下两点:

  • 获得超级权限的人,可以对数据库进行篡改。这个技术风险始终存在。

  • 银行内部人员串通,通过“合法”手段窃取客户财产。这个道德风险始终存在。

我们再看一下区块。

一个区块

index(索引)、timestamp(时间戳)、data(数据),这三样东西是传统数据库存储的信息,如果hacker攻入数据库只看到这些信息,当然很开心了,赚它一个亿的事情就在眼前。

可是,当hacker看到 previous_hash(之前的Hash值)、proof(证明)、new_hash(新的Hash值)这三样东西,估计就没那么开心了。因为new_hash是根据index、timestamp、data、previous_hash这四项生成的。如果hacker想“偷走一个亿”,必然要改这个new_hash,可是这个区块的new_hash,是下一个区块的 previous_hash,hacker必须设法把这个区块之后所有区块内的hash全部进行篡改。这就不符合hacker“悄悄干活”的初衷,反而变成了一场大规模的网络攻击,hacker要是有这本事,去“割韭菜”好过抢银行。

我们看一下 new_hash 是怎么产生的。

相当于把 index、timestamp、data、previous_hash 这四项打包加密了。

这好比把数据库中的数据之间进行了关联,有点类似中国古代的“保甲制”或“连坐制”,单独改一条数据肯定是不行的,差不多要“牵一发而动全身”。

而且,hacker 改 new_hash 也不是那么容易的事情。hacker还得获得 proof,proof 有点类似公司的公章,光有数据不行,还得加盖公司的公章。很多人终其一生,排排队也好,宫廷内斗也好,都是为了一枚枚公章,有了公章,就有了权利,就有了“钱途”。

可是,区块链中的“公章” proof 偏偏不是掌握在少数人手里的,而是通过 Proof-of-Work-Algorithms(工作量证明)来进行分配的,在比特币世界里,只有那些付出足够多“心水”的矿主们,才有可能获得足够的“公章” proof ,进而获得比特币,而且获得“公章” proof的难度越来越大,收益却越来越少。

所以,hacker要想篡改区块中的数据,得设法获得每个区块的“公章” proof,这对hacker来讲,几乎是“不可能完成的任务”。对于银行而言,由于“公章” proof 不掌握在少数人手中,“监守自盗”的道德风险得以缓解。

我们看一下“公章” proof 是怎么产生的。

“公章” proof

Johannes Mueller 用了一个“比较水”的Proof-of-Work-Algorithms(工作量证明),现实中区块链的Proof-of-Work-Algorithms(工作量证明)要复杂很多。这里假设每个人都有一个编号,只有能被99整除且能被前一个proof整除的编号,才可以作为下一个proof。

到这里,我们可以看到区块链的两个基本特征。一个是数据的捆绑加密,一个是产生“公章” proof的独特设计。

我们看一下 Johannes Mueller 举的例子。他做了一条六个区块的区块链。

一个不那么“好看”的区块链

每个区块里的data都是一样的:赚他一个亿。我们看一下第四个和第五个区块差异。

第4个区块 第5个区块

虽然两个区块的data是一样的,但index、timestamp、data、previous_hash、new_hash不同,且第4个区块的new_hash是第5个区块的previous_hash。这种关联加密以及Proof-of-Work-Algorithms(工作量证明)的机制,在确保数据安全上,确实有很大的进步。

昨晚,雷锋网报道A站数据泄露,客户的账户和密码被hacker挂在网上。如果使用区块链这种关联加密技术,恐怕是没那么容易被攻击吧。

另外一个细节是,报道中提到“目前市面上最常见的加密算法是 MD5”。如果此事属实,那么数据安全市场的规模就太大了。毕竟,2004~2005年,山东大学的王小云教授带领团队先后破解了MD5、HAVAL-128、MD4、RIPEMD、SHA-1密码算法。

相关文章

  • 戏说R语言系列9

    讲一下如何用R语言构建区块链。 区块链是年初以来被炒得最火、也最“莫名其妙”火起来的技术。得益于大佬们的集体发声,...

  • 戏说R语言系列8

    Dirk Eddelbuettel的网站上有很多“EXTENDING R”的内容。 翻译过来是“扩张R”。“扩张”...

  • 戏说R语言系列6

    讲一点R语言的高性能计算。 R语言有自己的官网,https://cran.r-project.org/,页面很“简...

  • 戏说R语言系列 5

    统计之都对 Hadley Wickham的访谈里,提出了一个“社会化编程”的说法,类似Github这样的平台,正在...

  • 戏说R语言系列11

    讲一下有关 R 语言的数据库操作。要想成为一名数据分析师、数据科学家、BI 系统开发人员,或者更加高大上的算法工程...

  • 戏说R语言系列10

    我问过两位以前的同事,如果我想学python,要怎么学?一位说,编程语言相通的地方很多,如果有一些其他语言的基础,...

  • 戏说R语言系列2

    统计之都有一篇对Rstudio公司创始人J.J. Allaire的专访。感兴趣的同学可以抽空看看。 https:/...

  • 戏说R语言系列3

    R是一门很“古老”的语言,可以追溯到20世纪70年代的贝尔实验室。那时候数值计算的主要语言是Fortran,这种语...

  • 戏说R语言系列4

    上一集讲到 R语言是 S语言的一支方言。其实呢, R语言还受另外一款语言的影响,就是Scheme。 Scheme是...

  • 戏说R语言系列1

    我一直想写点有关R语言的事儿,可每到落笔的时候,又觉着没什么可写的。 不过写点东西也不算是坏事,权当吃饱了消耗10...

网友评论

      本文标题:戏说R语言系列9

      本文链接:https://www.haomeiwen.com/subject/sfdeeftx.html