今天聊一个有意思的东西。
假如老王声称某个有 10000 个DOT的钱包地址是他的。
那么如何证明老王就是这个钱包地址的主人呢?
有的人说,只需要让老王在一个规定的时刻向我转账 0.666 个DOT,如果我看到这个地址确实在这个规定的时刻向我转账了 0.666 DOT,那就说明老王确实是这个钱包地址的主人。
逻辑上说的过去吗?
看似说的过去,因为只有老王收到了你的指令,他才能在规定的时间向你转了 0.666 个DOT,他能操作这个钱包说明他确实是主人。
但是,有没有一种可能,在你规定的这个时刻,这个地址原本的主人恰好往你的地址转了0.666 DOT,但是他不是老王,只是碰巧?
在现实生活中,这种概率简直太低了,低到我们会认为根本不会发生。
然而,在区块链的世界里,不能说因为概率低就一定不会发生。区块链必须追求极致的确定。
概率学上有一个著名的“无限猴子定理”,无限猴子定理的大概意思是,如果让一只猴子在打字机上随机地进行按键,如果一直不停的这样按下去,只要时间达到无穷,这只猴子就几乎必然可以打出任何给定的文字,甚至是莎士比亚的全套著作也可以打出来。
所以通过指定时间转账指定数额DOT的方法验证,并不是一个绝对严谨的做法。
区块链世界中,只有私钥,才是钱包地址所有权的唯一凭证。
那么如何证明老王持有私钥呢?这便是今天要学的知识——数字签名。
一、零知识证明
首先我们需要了解一个叫零知识证明的概念。
假想有一个房间,这个房间只能通过钥匙开门的方式进入,那么请问老王如何证明自己持有这个房间的钥匙呢?
方法一:
老王当着你的面,使用钥匙把门打开,所以老王持有这个房间的钥匙。(是傻子都知道这样验证)
可是,老王在你面前暴露了钥匙,有被抢夺的风险。有没有办法让老王不暴露钥匙,但是却让你相信他有钥匙呢。
我们看看方法二:
你在房间里放一个苹果,并且关闭门。走出去对老王说,让他把房间里的苹果拿出来。如果老王确实拿出来了那个苹果,则说明老王持有钥匙。
在这个方法中,老王并没有暴露钥匙,却证明了他有钥匙。
这就是零知识证明。
就是既要能充分证明自己是某种权益的拥有者,又不能把这个权益本身暴露出去,即向外界传达的信息为0,所以才称作零知识证明。
要老王不能暴露私钥的情况下,证明他有私钥,那如何利用零知识证明呢?
我们继续读下去。
二、非对称加密
密码学中,有个非对称加密的概念。
这个概念是:私钥可以加密一串字符,只能用公钥进行解密。
或者说公钥可以加密一串字符,只能用私钥进行解密。
加密和解密都不是使用同一个密钥,这才叫做非对称加密。
那么,结合零知识证明,就比较有意思了。
我们知道公钥是可以公开的钱包地址,我只需使用公钥(钱包地址)对一个字符串(例如是apple)进行加密,加密后得到一个签名内容,这个签名内容叫数字签名。
然后把这个数字签名给老王,让老王使用自己的私钥进行解密,只要老王能告诉你,解密后的字符串是apple,那么就证明了老王确实持有私钥。
就好像,公钥就是公开看得见的房间,字符串就是苹果,公钥加密字符串就如房间锁住了这个苹果,而数字签名就是整个锁着苹果的房间。
老王使用使用私钥解密数字签名就如使用钥匙开门,老王能拿出苹果,就如老王能知道这个字符串是apple。
整个过程中老王没有泄露私钥,但是证明了他有私钥。
数字签名技术被广泛应用于身份验证领域,未来我们公民的身份信息、公钥信息一定是上链的,那么如何判断你妈是你妈,就有了解决的方案。
验证的时候,只需给你妈一个字符串,让你妈使用自己的私钥对其加密,得到一个数字签名,只需要把这个数字签名提供给验证者,验证者在政府区块链上用你妈的身份信息查找到的公钥,对这个数字签名进行解密,解密后如果得到的还是之前给你妈的字符串,那么就证明了你妈是你妈。
三、波卡如何操作签名
同理,如果让老王使用私钥对apple加密,加密后的数字签名给我,我只需用公钥进行解密,如果能解出确实是apple,则说明老王持有私钥。
公钥先加密还是私钥先加密,这个不重要,重要的是非对称加密这个算法,只要保证加密和解密不是同一个密钥即可。
那么波卡中如何操作签名呢,如果鸭哥我是被验证人,我需要证明这个钱包地址是我的,就进行如下操作。
首先,打开波卡官方JS地址(不知道如何导入钱包的,先看如何安全使用DOT插件钱包|细节不注意有被盗的风险):
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,输入密码。
如果你的地址左边出现减号这个标识,说明你成功录入了个人信息。
但是,需要机构去帮忙认证,整个认证过程需要扣除38个DOT作为手续费,所以如果你不打算花费这么多钱的话,最好不必去开通这个VIP。
想要认证,则需要在 Riot 中找 @chevdor:matrix.org,这个人是认证商,可以做身份认证。
在 Riot 中和他聊天,他会分别在 Riot、邮箱、Twitter中发送一个字符串。
你需要做的是,把这个字符串用私钥进行加密,得到一个数字签名,然后把数字签名分别在 Riot、邮箱、Twitter上发送给他。
他会使用鸭哥在上面教大家的方法进行验证,验证通过后,你的链上地址就会有尊贵的VIP标识啦,并且你的社交信息都是在链上公开的。
是不是很酷呢,想玩的可以去玩一玩,鸭哥觉得有趣,因为从此以后鸭哥也是有链上身份的男人了~(部分内容由Acala开放贡献者姜总提供指导)。
本文来源:doter
原文标题:如何证明你妈是你妈?聊聊波卡中有趣的数字签名
—-
公有制链诈欺与进步化和绿色生态是不是欣慰密切联系,而生态鲜艳缔造并并不是一蹴而就的,必须多方面的适用和互彼此助。一直专注于种植Web3.0时间的GavinWood博士盘问生在生态鲜艳缔造上...
Powered by 购宝钱包 @2013-2022 RSS地图 HTML地图
网站统计——