专栏名称: 程序人生
十年漫漫程序人生,打过各种杂,也做过让我骄傲的软件;管理过数十人的团队,还带领一班兄弟姐妹创过业,目前在硅谷一家创业公司担任 VP。关注程序人生,了解程序猿,学做程序猿,做好程序猿,让我们的程序人生精彩满满。
目录
相关文章推荐
蚂蚁技术AntTech  ·  报名开启 | ... ·  7 小时前  
程序员技术  ·  某程序员:感觉身边35岁后月薪稳定在40k以 ... ·  7 小时前  
大淘宝技术  ·  大模型微调知识与实践分享 ·  9 小时前  
伯乐在线  ·  HR ... ·  15 小时前  
伯乐在线  ·  HR ... ·  15 小时前  
码农翻身  ·  投诉领导被光速开除,和烂人说再见啦~ ·  昨天  
51好读  ›  专栏  ›  程序人生

诚者,天之道也

程序人生  · 公众号  · 程序员  · 2019-03-04 08:17

正文

请到「今天看啥」查看全文


是的,我们使用的一切数据库系统,无论是 postgres 还是 riak,不管是 aurora 还是 dynamodb,只要撰写数据的用户拥有写的权限,他可以写任意真实的或者虚假的数据。

换言之,数据的可信并不是建立在数据可信本身,而是建立在数据所赖以生存的环境是安全的。因为我们信任数据所处的环境,所以我们信任数据本身 —— 多么完美的逻辑!这让我想起了某集 Mission Impossible 里,阿汤叔跳入一个藏匿在大坝底下的数据中心,替换了数据卡而成功帮助 Benji 篡改身份的场景。

有没有办法,在数据输入的时刻,我们就可以保证数据的完整性和不可篡改性?

答案很简单 —— 数字签名

为了行文方便,我们假设有一个人人都可以访问的数据库 Cyberbase —— 任何人都可以往里面写入和自己相关的数据,而无需批准。数据库只接受那些签名正确的数据,并且按照一定的规则更新数据库。

比如我要把我的微信年龄修改成 18 岁。在目前的系统里,我告诉微信:「拜托请把我的年龄改成 18 岁」,然后微信告诉数据库

update user set age = 18 where id = 'a008374856...'; 

而在 Cyberbase 里,我用我的私钥签名一个事实(fact): Tyr 今年 18 岁 。对于这个 fact,我们更新数据库的规则是:如果发起人 (sender) 的签名正确无误,那么我们执行 sender.age = 18 。这样,关于 Tyr 的 fact,只能由 Tyr 来陈述,如果一个第三方 —— Alice 想改 Tyr 的年龄,因为她没有 Tyr 的私钥,无法正确签名,所以无法伪造有关 Tyr 的 fact。







请到「今天看啥」查看全文