从想法到实现:我们修改现有的椭圆曲线数字签名方案,使其具有确定性,并在此基础上提供获取区块链内可验证的伪随机数的函数。
想法
2018 年秋季,Waves 区块链包括
困惑这个问题,我最终得出结论:任何区块链都是一个细胞,在封闭的系统中不可能获得可信的熵源。
但我仍然喜欢一个想法:如果
Waves区块链平台使用签名方案
显然,以其纯粹的形式,这样的签名不能用作伪随机数的来源,因为它是不确定的,因此很容易被预言机操纵。
但是,事实证明,实际上可以使其具有确定性。
我曾抱有很大的希望
经过一番思考并争取当地分析师的支持后,VECRO 工作方案诞生了。
VECRO 是可验证椭圆曲线随机预言机的缩写,俄语意思是椭圆曲线上可验证的随机预言机。
一切都变得非常简单;为了实现确定性,您需要在要签名的消息出现之前固定 R 的值。 如果 R 已提交并且是正在签名的消息的一部分,这进一步确保 R 在正在签名的消息中提交,则 S 的值由用户的消息唯一确定,因此可以用作伪随机数的源。
在这样的方案中,R 如何固定并不重要;这仍然是预言机的责任。 重要的是,S 由用户唯一确定,但其值在预言机发布之前是未知的。 我们想要的一切!
说到固定 R,请注意
总的来说,预言机必须为用户提供两个功能:初始化(固定值 R)和签名(返回值 S)。在这种情况下,R、S 对是包含固定值的用户消息的通常可验证签名。值 R 和任意用户数据。
可以说,区块链的这个方案只不过是普通的方案
六个月来,实施的想法在我的脑海中酝酿,直到最终动力以形式出现
履行
那么,在这个项目中
再次,把它放在一边并使其更清晰。 预言机不仅仅按照提议的方案工作。 其工作完全由已建立的区块链级别控制
目前,Waves 主网上有一个 VECRO 运行(你可以运行自己的,并不难,只是
为了使用预言机服务,您必须:
- 修复R;
- 向 oracle alias init@vecr 发送至少 0.005 Waves;
- 在从预言机向用户传输 1 个 R-vecr 代币时,接收附件字段中的 R 代码;
- 获得签名;
- 发送至少 0.005 Waves 到 oracle 别名 random@vecr,并且还必须在附件字段中指示之前收到的 R 代码和附加用户数据;
- 在从预言机向用户传输 1 个 S-vecr 代币时,接收附件字段中的 S 代码;
- 使用S代码作为伪随机数的来源。
当前实施的细微差别:
- 发送到预言机的Wave作为向用户返回交易的佣金,最多1个Wave;
- R 代码是“R”字符字节和 32 字节 base58 编码的 R 值的串联;
- 附件中的R代码在前,用户数据在R代码之后;
- S 代码是字符“S”的一个字节和 S 的 32 字节 Base58 编码值的串联;
- S是模除的结果,因此不能将S用作完整的256位伪随机数(这个数可以认为是最大的252位伪随机数);
- 最简单的选择是使用 S 代码哈希作为伪随机数。
接收S代码示例:
- 初始化:
https://wavesexplorer.com/tx/8gc8jwM7JrPNehoDs7NVyos7BsufYktvkwVW1B6FAY6 - 获取 R 代码:
https://wavesexplorer.com/tx/9eB25SbzEwvHEbm8pcKj7MGDrYv1u3Fxpj696FkJ96hd - 查询R代码签名结果和“随机”用户数据:
https://wavesexplorer.com/tx/6faoFJobEsugDFYmYmfsbtQYABmckNuE2kevaLh7ifzz - 接收S代码:
https://wavesexplorer.com/tx/C5VrFLQcprbA1KXAToaNvMP4Kg2rq43NkwWuADAA7wXX
从技术角度来看,预言机已经完全准备好工作,您可以放心使用它。 从一般用户使用的角度来看,缺乏方便的图形界面,这个还得等待。
我很乐意回答问题并接受评论,谢谢。
来源: habr.com