戏说R语言系列9

讲一下如何用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密码算法。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容

  • 区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。所谓共识机制是区块链系统中实现不...
    dtdh阅读 543评论 0 0
  • 启动和停止MongoDB 从命令行启动: 停止MongoDB: 如果服务器是作为前台经常运行在终端的,就直接按“C...
    艾尔温阅读 709评论 0 50
  • 来不及,习惯 风,已把温暖吹散 拾起的红叶 留在了哪一页 字里行间 什么让愁情若现 两个人就是两个世界 至今从词里...
    我不是嫂子我是姑娘阅读 262评论 5 7
  • 要能坚持到底才有意义 事情往往知易行难,实行起来好不容易。也正因为这样,如果原理原则无法以坚强意志去贯彻,那就失去...
    七尕阅读 146评论 0 1