来自 防护 2021-06-10 15:09 的文章

云防护_抗ddos防火墙_如何解决

云防护_抗ddos防火墙_如何解决

可验证随机函数(VRF)最近因其在区块链应用中的有用性而大受欢迎。早些时候,我写了vrf是什么,它们可以在哪里使用,以及在回顾它们时要考虑的几十件事情。在这篇后续博客文章中,我很高兴介绍大家都可以轻松检查和探索的实际工作代码。我将介绍如何访问代码,在实际操作中展示它,并提供一些提示,告诉您如何使用它。抓住它,运行它该代码是完全自包含的Python3参考实现,与最新VRF规范中的ECVRF-EDWARDS25519-SHA512-Elligator2密码套件配置相匹配https://tools.ietf.org/pdf/draft-irtf-cfrg-vrf-06.pdf。代码托管在NCC组的GitHub页面上https://github.com/nccgroup/draft-irtf-cfrg-vrf-06包括相关的测试用例。因特网工程任务组(IETF)密码论坛研究小组(CFRG)通过提供一个讨论和开发新密码技术的论坛,将理论与实践联系起来。这些努力通常会导致RFC,例如rfc8032中的"Edwards曲线数字签名算法(EdDSA)"。在这种情况下,CFRG与VRF规范相关的工作于2017年初正式开始,现在形成了最新的06草案。把它当作RFC前的材料。代码的目的是使检查和探索变得容易,因此强调了原始的简单性和快速的开始。由于较简单的算法通常效率较低(并且可能会暴露定时侧信道),因此代码不适用于生产。从Linux shell中,克隆项目并运行以下代码:$git克隆https://github.com/nccgroup/draft-irtf-cfrg-vrf-06.git$cd草稿-irtf-cfrg-vrf-06.git$蟒蛇3演示.pyVRFs正在运行这里我们描述两个实际的通用用例:密封拍卖和加密排序。两者都为近乎无限的细化和变异集提供了坚实的基础。1密封拍卖最简单和最快的方法来逐步了解所有的运动部件是首先回顾以前的VRF博客条目。VRFs可以被认为是启用了一个由密钥签名并用公钥验证的哈希摘要。下面是一个密封拍卖用例摘录自演示.py.导入ecvrf_edwards25519_sha512_elligator2#Alice生成一个秘密和公共密钥对密钥=secrets.token_字节(字节=32)公钥=ecvrf_edwards25519_sha512_elligator2.获取公钥(密钥)#Alice生成一个beta_字符串承诺与Bob共享alpha_string=b'I出价100美元购买名为IntegrityChain的马p_status,高防御ddos,pi_string=ecvrf_edwards25519_sha512_elligator2.ecvrf_prove(密钥,alpha_字符串)b_status,beta_string=ecvrf_edwards25519_sha512_elligator2.ecvrf_proof_to_哈希(pi_string)##Alice最初只与Bob共享beta_字符串##(很多)稍后,Bob验证Alice随后共享的公钥、pi峎字符串和alpha_字符串结果,beta_string2=ecvrf_edwards25519_sha512_elligator2.ecvrf_verify(公钥、pi_字符串、alpha_字符串)如果p_status=="有效",b_status=="有效",结果=="有效",beta_string==beta_string2:打印("已验证承诺")上面我们可以看到Alice生成了一个公钥和密钥对。虽然公开密钥是要共享的,但此事件的顺序取决于特定的用例或协议。这里我们展示了这只在场景的最后阶段完成。类似地,免费ddos防御vps,错误检查通常在整个过程中进行,但为了清楚起见,我们在最后收集了它。接下来,我们将看到Alice执行几个步骤来生成beta_字符串,这是提供给Bob的"随机摘要"。在后面的证明步骤中使用了pi_字符串,因此最初保留在保留区中。Alice只提交beta_字符串作为她的匿名承诺。当拍卖结束时(例如打开密封的信封),Alice会向Bob提供原始的纯文本alpha_字符串以及pi_字符串和她的公钥。Bob接受这些并能够确认值之间的一致性。Bob能够明确地将原始beta_字符串与Alice的公钥相连接,后者对应于Alice的secret_密钥。所以这个机制可以看作是一种公开/秘密签名的散列。2密码排序现在,让我们考虑加密排序,它本质上是从更大的潜在参与者中安全地选择一个小的"投票委员会"。这项技术被用于各种替代方案(以及对"工作证明"共识系统的改进),该系统通常被认为在能源和其他资源方面是浪费的。在这个场景中,系统将最新共识块的哈希作为公共alpha_字符串广播给所有潜在的参与者。每个参与者私下计算他们的beta_字符串与各自的密钥相对应。如果beta_字符串恰好符合某些商定的特征,例如特定的前导数字或与其货币所有权的关系等,参与者可以认为自己被选为投票委员会成员,以便就下一个区块达成共识。以下是此场景的一些伪代码:0密钥提前:秘密密钥,公开密钥,后者是众所周知的。1系统将最新一致性块的哈希作为alpha_字符串广播2每个参与者私下决定他们的资格a、 使用alpha_字符串和密钥生成pi_字符串b、 从pi\u字符串生成beta_字符串c、 如果beta_字符串符合要求,参与者将(自行)选定三。当需要投票表决下一个共识时,请提供投票和pi\u字符串证明;'Everyone'可以验证这一点beta_字符串符合要求,并且密钥可以投票。这个方案非常好,因为参与者可以安全地选择自己,而不需要在原始alpha_字符串之外进行任何交互。对手无法预先计算将选择谁(用于攻击目标)。beta_字符串可以与其他条件相关,例如与密钥对应的帐户余额。投票结果随后可由任何感兴趣的人验证,因为除密钥外的所有密钥都可以被视为公开的。检查和探索一些人告诉我,VRF规范读起来像Python伪代码。在这种情况下,存储库代码只删除了"伪"…而留下可执行的Python代码。事实上,规范的一个很好的块被作为注释与代码语句一起合并在一起,并使其读起来像一个循序渐进的方法。因此,您可以开发自己的基本场景,并在pythonide调试器中观察它的逐步执行。有时数学是很棘手的,所以观察中间计算的发展是非常有用的。此外,通过提供测试详细中间值的能力,代码被安排为支持更改/演化/扩展。如果您对将VRFs移植到您选择的语言和系统感兴趣,那么代码可以生成详细的测试向量。查看测试文件以查看所有操作。正如在最初的博客文章中所描述的,主API并不比您前面看到的复杂。明确地:#第5.1条。ECVRF证明def ecvrf_prove(sk,单机5g防御够防ddos,alpha_字符串):"""输入:sk-VRF私钥(32字节)alpha_string-输入alpha,一个八位字节字符串输出:("VALID",pi峎u string)-其中pi峎string是VRF证明,长度为ptLen+n+qLen的八位字节字符串(80)个字节,或出现故障时("无效",[])"""…#第5.2条。ECVRF哈希证明def ecvrf_proof_to_哈希(pi_字符串):"""输入:pi\u-string-VRF-proof,八位字节字符串,长度为ptLen+n+qLen(80)字节输出:("VALID",beta_string)其中beta_string是VRF哈希输出,八位字节字符串长度为hLen(64)字节,或失败时为("无效",[])"""…#第5.3条。ECVRF验证def ecvrf_verify(y,pi_字符串,alpha_字符串):"""输入:y-公钥,以字节表示的EC点pi\u-string-VRF-proof,八位字节字符串,长度为ptLen+n+qLen(80)字节alpha_string-VRF输入,八位字节字符串输出:("VALID",ddos5g的防御,beta_string),其中beta_string是VRF哈希输出,高防cdn排名,八位字节字符串长度为hLen(64)字节;或失败时为("无效",[])"""…规范的一个有趣的方面与上面最后一个函数的可用性有关。如前所述,(成功的)调用者收到一个("VALID",beta_string)元组,并需要确认第一个值是"VALID",第二个值与预期的beta_字符串匹配。如果后一步没有完成,也许是由于错误或疏忽,这个计划就失败了。许多人会说,一个更简单的函数版本应该接受预期的beta_字符串,并用一个更简单的失败/成功指示来响应。健康警告:该代码的主要目的是便于检查和探索。作为存储库自述文件.md声明,该代码是阿尔法质量,不适合生产。存在明显的时间侧通道。具体地说,代码中的算法和(使用)Python的大整数显然不是恒定时间,因此引入了定时侧信道。这篇文章介绍了实际工作中的VRF代码。代码是可访问的,每个人都很容易检查和探索。我已经在实际操作中展示了它,并对您可能使用它做了一些提示。现在轮到你参与和享受了!分享这个:TwitterRedTitleLinkedIn Facebook是这样的:就像加载。。。