聊聊波卡中有趣的数字签名
doter·2020-07-31 阅读 4

友善提示:阅读本篇文章有点烧脑,但认真读下去会趣味横生。


0到1全面认知波卡——概述(一):https://www.voosay.com/scien/20595230894416996.html


0到1全面认知波卡——跨链可组合性(二):https://www.voosay.com/scien/20595231168545419.html


0到1全面认知波卡——异构分片(三):https://www.voosay.com/scien/20595231658388403.html


0到1全面认知波卡——共享安全(四):https://www.voosay.com/scien/20595313630902655.html


0到1全面认知波卡——提名权益证明(五):https://www.voosay.com/scien/20595400323116695.html


0到1全面认知波卡——一键发链(六):https://www.voosay.com/scien/20595487086694274.html


0到1全面认知波卡——平行线程(七):https://www.voosay.com/scien/20596078471343699.html


史上最详细 DOT 质押挖矿教程:https://www.voosay.com/scien/20595918290498614.html



今天聊一个有意思的东西。



假如老王声称某个有 10000 个DOT的钱包地址是他的。


那么如何证明老王就是这个钱包地址的主人呢?


有的人说,只需要让老王在一个规定的时刻向我转账 0.666 个DOT,如果我看到这个地址确实在这个规定的时刻向我转账了 0.666 DOT,那就说明老王确实是这个钱包地址的主人。


逻辑上说的过去吗?


看似说的过去,因为只有老王收到了你的指令,他才能在规定的时间向你转了 0.666 个DOT,他能操作这个钱包说明他确实是主人。


但是,有没有一种可能,在你规定的这个时刻,这个地址原本的主人恰好往你的地址转了0.666 DOT,但是他不是老王,只是碰巧?


在现实生活中,这种概率简直太低了,低到我们会认为根本不会发生。


然而,在区块链的世界里,不能说因为概率低就一定不会发生。区块链必须追求极致的确定。


概率学上有一个著名的“无限猴子定理”,无限猴子定理的大概意思是,如果让一只猴子在打字机上随机地进行按键,如果一直不停的这样按下去,只要时间达到无穷,这只猴子就几乎必然可以打出任何给定的文字,甚至是莎士比亚的全套著作也可以打出来。



所以通过指定时间转账指定数额DOT的方法验证,并不是一个绝对严谨的做法。


区块链世界中,只有私钥,才是钱包地址所有权的唯一凭证


那么如何证明老王持有私钥呢?这便是今天要学的知识——数字签名


一、零知识证明


首先我们需要了解一个叫零知识证明的概念。


假想有一个房间,这个房间只能通过钥匙开门的方式进入,那么请问老王如何证明自己持有这个房间的钥匙呢?


方法一:

老王当着你的面,使用钥匙把门打开,所以老王持有这个房间的钥匙。(是傻子都知道这样验证)


可是,老王在你面前暴露了钥匙,有被抢夺的风险。有没有办法让老王不暴露钥匙,但是却让你相信他有钥匙呢。


我们看看方法二:

你在房间里放一个苹果,并且关闭门。走出去对老王说,让他把房间里的苹果拿出来。如果老王确实拿出来了那个苹果,则说明老王持有钥匙。


 

 在这个方法中,老王并没有暴露钥匙,却证明了他有钥匙。


这就是零知识证明。


就是既要能充分证明自己是某种权益的拥有者,又不能把这个权益本身暴露出去,即向外界传达的信息为0,所以才称作零知识证明。


要老王不能暴露私钥的情况下,证明他有私钥,那如何利用零知识证明呢?


我们继续读下去。


二、非对称加密


密码学中,有个非对称加密的概念。


这个概念是:私钥可以加密一串字符,只能用公钥进行解密。


或者说公钥可以加密一串字符,只能用私钥进行解密。



加密和解密都不是使用同一个密钥,这才叫做非对称加密。


那么,结合零知识证明,就比较有意思了。


我们知道公钥是可以公开的钱包地址,我只需使用公钥(钱包地址)对一个字符串(例如是apple)进行加密,加密后得到一个签名内容,这个签名内容叫数字签名。


然后把这个数字签名给老王,让老王使用自己的私钥进行解密,只要老王能告诉你,解密后的字符串是apple,那么就证明了老王确实持有私钥。


就好像,公钥就是公开看得见的房间,字符串就是苹果,公钥加密字符串就如房间锁住了这个苹果,而数字签名就是整个锁着苹果的房间。


老王使用使用私钥解密数字签名就如使用钥匙开门,老王能拿出苹果,就如老王能知道这个字符串是apple。


整个过程中老王没有泄露私钥,但是证明了他有私钥。


数字签名技术被广泛应用于身份验证领域,未来我们公民的身份信息、公钥信息一定是上链的,那么如何判断你妈是你妈,就有了解决的方案。


验证的时候,只需给你妈一个字符串,让你妈使用自己的私钥对其加密,得到一个数字签名,只需要把这个数字签名提供给验证者,验证者在政府区块链上用你妈的身份信息查找到的公钥,对这个数字签名进行解密,解密后如果得到的还是之前给你妈的字符串,那么就证明了你妈是你妈。


三、波卡如何操作签名


同理,如果让老王使用私钥对apple加密,加密后的数字签名给我,我只需用公钥进行解密,如果能解出确实是apple,则说明老王持有私钥。


公钥先加密还是私钥先加密,这个不重要,重要的是非对称加密这个算法,只要保证加密和解密不是同一个密钥即可。


那么波卡中如何操作签名呢,如果鸭哥我是被验证人,我需要证明这个钱包地址是我的,就进行如下操作


首先,打开波卡官方JS地址(不知道如何导入钱包的,先看如何质押挖矿):

https://polkadot.js.org/apps/#/toolbox/sign


点击Sign message,即进入到使用私钥加密的页面。



输入你要加密的字符串,比如apple,然后点击 Sign message,输入钱包密码进行签名。


签名后,加密了apple得到了一个数字签名,这个数字签名也是一串字符串,把它复制下来。(signature of supplied data)


复制后,把这个数字签名给验证人。


验证人拿到这个数字签名后,同样打开官方JS页面,点击Verify signature

进入到验证签名的页面。


输入之前说好的字符串apple,输入数字签名。



如果这个时候,发现左边出现了绿色的勾勾,则说明这个数字签名用公钥解密后确实是apple,说明鸭哥确实是这个钱包的主人。


四、波卡链上认证


很多人会发现鸭哥的钱包地址有个绿色勾勾的标识,好像尊贵的VIP一样散发着迷人的贵族(绿油油)光芒。



这是怎么做到的呢?


还是打开官方JS页面:

https://polkadot.js.org/apps/#/accounts


在自己的账户右边有个竖着的三个点的菜单栏,点开后点击

Set on-chain identity



接着把想要认证的社交信息的右边按钮点开。


输入你想要公开的个人社交信息,最后点Set Identity,输入密码。



如果你的地址左边出现减号这个标识,说明你成功录入了个人信息。


但是,需要机构去帮忙认证,整个认证过程需要扣除0.38个DOT作为手续费,所以如果你不打算花费这么多钱的话,最好不必去开通这个VIP。


想要认证,则需要在 Riot 中找 @chevdor:matrix.org,这个人是认证商,可以做身份认证。


在 Riot 中和他聊天,他会分别在 Riot、邮箱、Twitter中发送一个字符串。

你需要做的是,把这个字符串用私钥进行加密,得到一个数字签名,然后把数字签名分别在 Riot、邮箱、Twitter上发送给他。


他会使用鸭哥在上面教大家的方法进行验证,验证通过后,你的链上地址就会有尊贵的VIP标识啦,并且你的社交信息都是在链上公开的。


是不是很酷呢,想玩的可以去玩一玩,鸭哥觉得有趣,因为从此以后鸭哥也是有链上身份的男人了~(部分内容由Acala开放贡献者姜总提供指导)。






Defi波卡DOT
本文仅代表作者观点,不代表本站立场,若侵犯了您的合法权益,请点击联系我们。