有的人说,只需要让老王在一个规定的时刻向我转账 0.666 个DOT,如果我看到这个地址确实在这个规定的时刻向我转账了 0.666 DOT,那就说明老王确实是这个钱包地址的主人。 今天聊一个有意思的东西。 假如老王声称某个有 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 —- 编译者/作者:doter 玩币族申明:玩币族作为开放的资讯翻译/分享平台,所提供的所有资讯仅代表作者个人观点,与玩币族平台立场无关,且不构成任何投资理财建议。文章版权归原作者所有。 |
如何证明你妈是你妈?聊聊波卡中有趣的数字签名
2020-09-01 doter 来源:火星财经
LOADING...
相关阅读:
- 停止将2020年加密货币集会与2017年进行比较; 这是不同且可持续的2020-09-01
- 滑动以启动支持加密的美元支票账户2020-09-01
- 俄罗斯联邦发现超过半百万卢布的加密货币欺诈2020-09-01
- CipherTrace的Monero跟踪工具是否像它声称的那样有效?2020-09-01
- 去中心化交易所在八月的交易额超过500亿雷亚尔2020-09-01