/ECMH

Primary LanguagePython

项目目标

Implement the ECMH scheme

代码解析

曲线选取


在此我们选取secp256k1曲线,相关参数如下

p = 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f

a = 0

b = 7

n = 0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141

Gx = 0x79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798

Gy = 0x483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8

G = [Gx, Gy]

求解二次剩余


我们使用勒让德符号来判断、求取二次剩余,此处代码参考博客:https://blog.csdn.net/weixin_44617902/article/details/112785051

ECMH函数


我们不停地将消息更新为它的哈希值,倘若此哈希值在椭圆曲线上有解,则通过二次剩余将其求出, 并输出此节点。如此我们即找到了一个正确的解

ECMH_Group函数


此步我们只需要将所有元素单独求解得到一堆点,之后将其相加即可。

运行指导

直接运行即可。

注意:由于系统自带哈希函数本身的缺陷,可能会出现哈希值不变情况导致系统停滞,此时可以重启或修改明文

运行截图

image image