关于 Sinsemilla 哈希函数在 OlaVM 中的应用
2022-08-0622:22
Sin7y
2022-08-06 22:22
Sin7y
2022-08-06 22:22
收藏文章
订阅专栏


很高兴,我们在 2022 年 7 月 25 日发布了 OlaVM( 白皮书详见:https://ethresear.ch/t/whitepaper-olavm-an-ethereum-compatible-zkvm/13144),一个 EVM 兼容的 ZKVM 方案。由于 ZKEVM 本身一直是个热门的赛道,所以 OlaVM 一经发布,就很荣幸的受到了行业内大佬们的一些关注。


在这里,我们首先非常感谢Daira Hopwood大佬 ( 也是 Zcash 协议的主要作者 ) 针对 OlaVM 的设计提出的一些问题。其中,比较核心的一点是 ECDSA 和 Schnorr 签名算法里 Hash 的选择问题,具体的表述如下图所示:


Daira Hopwood的意思可以简单理解为:Sinsemilla Hash 的安全级别只有 collision-resistant, 因此不能当做一个 random oracle(RO);而在 ECDSA 和 Schnorr 签名算法中,为了足够的安全,需要要求这个 Hash 可以当做 random oracle(RO)。为了能更好的理解,我们需要先了解一些概念。


1. cryptographic hash function (CHF) 的安全属性有哪些?

根据论文 Cryptographic Hash-Function Basics 里的定义可知,CHF 对应的安全属性有以下 3 类:

preimage-resistance — 基本上对于所有预先指定输出,要找到任何散列到该输出的输入,在计算上是不可行的,例如,当给定任意未知输入的 y 时,要找到使 h(x')=y 的所有原像 (preimage) x'。

2nd-preimage resistance — 要找到与任何指定输入具有相同输出的任何第二输入,在计算上是不可行的,例如,给定 x,要找到一个第二原像 x' = x,使 h(x') = h(x)。

collision resistance — 要找到任意两个散列到相同输出的不同输入,在计算上是不可行的,例如,使h(x') = h(x)。


需要注意的是:

a. 2nd-preimage resistance 可以归约为 collision resistance, 即 collision resistance 满足,则 2nd-preimage resistance 必定满足。

b. preimage-resistance 不可以归约为 collision resistance, 即 collision resistance 满足,则 preimage resistance未必满足。


2. 什么是 random oracle(RO)?

random oracle(RO) 用以下模型来描述:

• 有一个黑盒子。盒子里住着一个侏儒,还有一本大书和一些骰子。

• 我们可以向盒子里输入一些数据(任意比特序列)。

• 给定侏儒一些事先没有看到的输入,他用骰子在一些常规空间(oracle 输出空间)中均匀且随机地生成一个新的输出。侏儒还会在书中写下输入和新生成的输出。

• 如果给定侏儒一个已经看到的输入, 他就用书来恢复他上次返回的输出,并再次返回。


简单来概括下 RO 的行为,假设输入为 x:

• 如果 x 之前输入过,则直接返回对应的 H [x].

• 如果 x 未曾输入过,则 RO 会在完全随机的在值域里生成一个由 0,1 组成的字符串。


简单来概括下 RO 的行为,假设输入为 :

• 如果 x 之前输入过,则直接返回对应的 [x].

• 如果 x 未曾输入过,则 RO 会在完全随机的在值域里生成一个由 0,1 组成的字符串。


需要注意的是:

• 这里的完全随机意味着,连 RO 自己都不知道最终会是一个什么值,它是没有规则可循的,这是和 Hash 的主要区别,任何 Hash 都是有自己的计算规则的。


但是在现实的世界中,实现一个真正的 RO 是很困难的;因此,我们需要为 RO 寻找一个潜在候选者,需要尽可能的使得输出看起来是随机的。Hash 函数是一个不错的选择,一个安全的 Hash 函数需要满足 preimage-resistance、2nd-preimage resistance、collision resistance。一个可以当做 RO 的 Hash 是肯定要满足这三个属性的,但是满足这三个属性的 Hash 不一定就可以当做 RO;它们之间是一种必要不充分关系。更多的细节可以参考 What is the "Random Oracle Model" and why is it controversial?


3. Hash 在 ECDSA 和 Schnorr 签名算中的要求?

在论文 On the security of ECDSA with additive key derivation and presignatures 和 On the Exact Security of Schnorr-Type Signatures in the Random Oracle Model 中提到,ECDSA 和 Schnorr 签名算法里的 Hash 函数都需要可以被认为是 RO,才是安全的。根据前面的描述,则这个 Hash 需要满足 CHF 的所有安全属性 preimage-resistance、2nd-preimage resistance、collision resistance。

图 1. ECDSA signature process


图 2. Schnorr signature process


4. 关于 Sinsemilla 哈希函数?

Sinsemilla 哈希函数是由 Daira Hopwood 和 Sean Bowe 一起设计,底层依赖 ECDLP(Elliptic Curve Discrete Logarithm Problem)。在固定长度的输入下,Sinsemilla 哈希函数满足 collision resistance,不满足 preimage resistant 属性,原因可以参考 Daira Hopwood 的回答。


根据 Zcash 协议说明书,设计 Sinsemilla 哈希函数的初衷是为了在零知识证明算法 Halo2 的执行过程中,充分利用 Lookup-friendly 的优势,来提高 Halo2 的执行效率;因此,Sinsemilla 哈希函数是一个 Lookup-friendly 的哈希函数,它更适合用于承诺的计算和 Merkle tree root 的计算。

译文:5.4.1.9 Sinsemilla 哈希函数

SinsemillaHash 是具有collision resistance ( 对于固定输入长度 ) 的代数哈希函数,它来源于离散对数问题 的假设硬度。它是由肖恩·鲍伊 (Sean Bowe) 和戴拉·霍普伍德 (Daira Hopwood) 设计的。引入一个新的基于离散对数的哈希函数 ( 而不是使用 PedersenHash) 的动机是为了有效地利用最近的证明系统 ( 包括 Halo 2) 中的查找功能。

SinsemillaHash 用于 SinsemillCommit 的定义 (§5.4.8.4 “Sinsemilla承诺”,第 94 页 ),以及 Orchard增量默克尔树 (§5.4.1.3 “默克尔 CRHorchard 哈希函数” ,第 74 页 )。

图 3. Sinsemilla hash 的设计思想



5. 总结

再次感谢 Daira Hopwood 的指导,让我们对cryptographic hash function (CHF)的使用有了更深的认知。我们将继续广泛听取意见,在高效性和安全性方面对设计方案进行持续优化。


Sinsemilla 哈希函数会仍然用于 Olavm 设计中的其他合适模块;签名部分的 Hash 函数,我们将会在安全的哈希函数中,择优选择,比如Poseidon哈希函数、Reinforced Concrete哈希函数等。


关于我们

Sin7y 成立于 2021 年,由顶尖的区块链开发者组成。我们既是项目孵化器也是区块链技术研究团队,探索 EVM、Layer2、跨链、隐私计算、自主支付解决方案等最重要和最前沿的技术。

微信公众号:Sin7y

GitHub: Sin7y

Twitter: @Sin7y_Labs

Medium: Sin7y

Mirror: Sin7y

HackMD: Sin7y

HackerNoon: Sin7y

Email: contact@sin7y.org

【免责声明】市场有风险,投资需谨慎。本文不构成投资建议,用户应考虑本文中的任何意见、观点或结论是否符合其特定状况。据此投资,责任自负。

专栏文章
查看更多
数据请求中

推荐专栏

数据请求中

一起「遇见」未来

DOWNLOAD FORESIGHT NEWS APP

Download QR Code