最近我一直在用中国SM2标准学习ECC。一个问题是在标准的第5部分,参数定义中,它只定义了p, a, b, n, XG,和YG,而没有定义辅助因子h。
我发现了一些有用的讨论,介绍了背后的所有参数:P,n,h之间的关系是什么?.It没有回答我的问题:为什么SM2不指定h,而SM2第3部分中引入的密钥交换协议却使用了h。
在标准的第1部分5.2.2节中,给出了一种椭圆曲线参数的验证方法。用于验证h的一个选项是:
(可选)计算h'=\lfloor((p^{1/2} + 1) ^ 2)/n\rfloor,并验证h=h'
这也意味着h可以用上面的方程来计算。我用一个在线大数字计算器计算,结果略大于1(不完全相等)。
还是我误解了这个辅助因素?而是计算出来的。椭圆曲线只能用p, a, b, n, XG和YG完全定义。
发布于 2018-12-29 11:07:08
椭圆曲线只能用
p, a, b, n, XG和YG完全定义。
是的,的确,尽管它不是最好的/最方便的参数集,但这足以恢复曲线的顺序(使用算法学院),并使用该辅助因子。
当然,Schoof的算法虽然效率很高,但速度并不快,也没有得到广泛的实现,因此通常会提供曲线的阶数和协因子。
为什么SM2没有指定h,而密钥交换协议协议在SM2第3部分中引入了它。
嗯,链接的IETF草案的质量并不是最好的,所以可能只是一个疏忽。
回答你的问题:h=1。这可以使用以下sage-math指令进行验证:
F=GF(0xFFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFFFFFFFFFF)
a=0xFFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFFFFFFFFFC
b=0x28E9FA9E9D9F5E344D5A9E4BCF6509A7F39789F515AB8F92DDBCBD414D940E93
n=0xFFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFF7203DF6B21C6052B53BBF40939D54123
E=EllipticCurve(F,[a,b])
h=E.cardinality_pari()/n;h其中,最后一个应该以1的形式返回辅助因子D11。
我用一个在线大数字计算器计算,结果略大于1(不完全相等)。
这个公式来自哈斯 ( q是曲线,p是字段顺序) \left|q-(p+1)\right|\leq 2\sqrt p,假定q\geq p+1是\begin{align} &&q-(p+1)&\leq 2\sqrt p\\ \iff&& q&\leq p+2\sqrt p +1=(\sqrt p +1)^2\\ \iff&& h=q/n&\leq (\sqrt p +1)^2/n \end{align},如果最后的值几乎超过1,这意味着h只能是1。
https://crypto.stackexchange.com/questions/66145
复制相似问题