Poseidon 正在沉没?

Poseidon 正在沉没?
在零知识证明(如 SNARK、STARK 和 Bulletproof)中,我们需要证明自己知道某个哈希函数的原像——这种证明是在一个大素数域上进行的。一种典型的哈希方法是 SHA-256,但它的计算代价很高。Poseidon 哈希函数 [1, 2] 提供了另一种选择,它基于 GF(p) 对象进行运算。这使得它既能高效地实现为电路,也能实现为精心构造的多项式。在大多数情况下,我们使用椭圆曲线方法,因此与 BLS12–381、BN254 和 Ed25519 等曲线的素数阶子群相关联。
对于 H(a) = b,a 是 b 的原像。
记住我,以便更快登录
但是,Poseidon 哈希用于生成 SNARK 友好哈希的做法可能即将终结,因为以太坊基金会已经证明,对于 SNARK 来说实际上并不需要这种哈希,SHA-2 和 BLAKE2 哈希同样可以接受 此处:

示例
在本例中,我们取一个三值向量并计算 Poseidon 哈希 此处:
package main
import (
"fmt"
"github.com/iden3/go-iden3-crypto/v2/babyjub"
"math/big"
"strconv"
"os"
)
func main() {
start:=0
points:=10
valid_points:=0
argCount := len(os.Args[1:])
if argCount > 0 {
start,_ = strconv.Atoi(os.Args[1])
}
if argCount > 1 {
points,_ = strconv.Atoi(os.Args[2])
}
if (points>50) {
fmt.Printf("Too many points")
return
}
end:=start+points
y:=big.NewInt(int64(start))
for i:=start;i<end;i++ {
P,err:= babyjub.PointFromSignAndY(true,y)
if (err==nil) {
fmt.Printf("P Point (%s, %s)\n",P.X.String(),P.Y.String())
valid_points=valid_points+1
} else {
fmt.Printf(" No point at y=%d. Error: %v\n", y,err)
}
y = y.Add(y,big.NewInt(1))
}
fmt.Printf("\nNumber of valid points: %d\n", valid_points)
}
向量 [1]、[1, 4] 和 [1, 4, 3] 的示例见 此处:
Inputs 1. Poseidon Hash: 18586133768512220936620570745912940619677854269274689475585506675881198879027
Inputs 1, 4. Poseidon Hash: 20093115681644140910448217843618788628911204837480265095337820971629649645527
Inputs 1, 4, 3. Poseidon Hash: 11581812134676561997526789540623636669301006969489560800875483048762369668960
另一个 Golang 实现见 此处,一个 Python 示例见 此处:
import poseidon
import sys
import numpy as np
poseidon_simple, t = poseidon.parameters.case_simple()
message = "[1, 2, 3, 4]"
if (len(sys.argv)>1):
message=str(sys.argv[1])
arr = [int(i.strip()) for i in message[1:-1].split(",")]
input_vec=np.array(arr).tolist()
print("Input: ", input_vec)
poseidon_digest = poseidon_simple.run_hash(input_vec)
print("Output: ", hex(int(poseidon_digest)))
示例运行如下:
Initialize Round Numbers
Initialize field
Initialize MDS matrix
Initialize Round Constant
Input: [3, 4, 5, 6]
Output: 0x67c10e57528f37d7
结论
SHA-2 和 BLAKE2 的使用已经过充分测试,通常也易于集成到代码中。至于 Poseidon,以太坊基金会相当于在投资一种未得到充分支持的哈希方法。Poseidon 哈希带来的性能提升可能并不值得,尤其是 SHA-2 已被证明是一种稳健、高效且高度安全的哈希函数。归根结底,安全性往往胜过速度。
参考文献
[1] Grassi, L., Khovratovich, D., Rechberger, C., Roy, A., & Schofnegger, M. (2021). Poseidon:一种用于零知识证明系统的新型哈希函数. In 30th USENIX Security Symposium (USENIX Security 21) (pp. 519–535).
[2] Grassi, L., Khovratovich, D., & Schofnegger, M. (2023, July). Poseidon2:更快版本的 Poseidon 哈希函数. In International Conference on Cryptology in Africa (pp. 177–203). Cham: Springer Nature Switzerland.
- 原文链接: billatnapier.medium.com/...
- 鸿途知科网 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
版权声明
本文仅代表作者观点,不代表区块链技术网立场。
本文系作者授权本站发表,未经许可,不得转载。
鸿途知科网
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。