注册
关闭
区块链大帝

区块链大帝

发布于 2020-08-12 阅读数 3442

聊一聊波卡中有趣的数字签名

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

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

假如老王声称某个有 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开放贡献者姜总提供指导)。

本文链接:https://www.8btc.com/media/634160
转载请注明文章出处

  • 0
区块链大帝
区块链大帝

0 条评论