如何证明***是***?聊聊波卡中有趣的数字签名。
友善提示:阅读本篇文章有点烧脑,但认真读下去会趣味横生。
今天聊一个有意思的东西。
假如老王声称某个有 10000 个 DOT 的钱包地址是他的。
那么如何证明老王就是这个钱包地址的主人呢?
有的人说,只需要让老王在一个规定的时刻向我转账 0.666 个 DOT,如果我看到这个地址确实在这个规定的时刻向我转账了 0.666DOT,那就说明老王确实是这个钱包地址的主人。
逻辑上说的过去吗?
看似说的过去,因为只有老王收到了你的指令,他才能在规定的时间向你转了 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 标识啦,并且你的社交信息都是在链上公开的。
是不是很酷呢,想玩的可以去玩一玩,鸭哥觉得有趣,因为从此以后鸭哥也是有链上身份的男人了~
来源链接:mp.weixin.qq.com
来源:鸭说区块链
- 免责声明
- 世链财经作为开放的信息发布平台,所有资讯仅代表作者个人观点,与世链财经无关。如文章、图片、音频或视频出现侵权、违规及其他不当言论,请提供相关材料,发送到:2785592653@qq.com。
- 风险提示:本站所提供的资讯不代表任何投资暗示。投资有风险,入市须谨慎。
- 世链粉丝群:提供最新热点新闻,空投糖果、红包等福利,微信:juu3644。