Decaf是一种基于Jacobi四分式的点压缩方法,它为(扭曲) Edwards曲线和蒙哥马利曲线建立一个素数阶群,并在此基础上加入协因子h = 4。它的承诺是,只有在从Decaf解码的点上运行时,才能消除辅助因子。然后,Ristretto将这一方法扩展到带有协因子h = 8的曲线上。
但是,我仍然不清楚在使用带有Curve25519/‘m 25519的ristretto255时,标量是否仍然需要夹紧。夹紧做三件事:
B相乘。这大概是为了清除辅助性因素。然而,我不清楚标量乘法是否需要首先清除的辅助因子,或者对于Ristretto (和/或Decaf)来说,含有低阶分量的点是否是Ristretto(和/或Decaf)的“有效”输入,或者我是否应该清除标量乘法的辅助因子。实验测试表明,与低阶元件的点互操作正常,但在安全性方面几乎没有什么意义。8\ell =D7= Curve25519)。2^{254})。过去,这是为了阻止袋鼠的攻击。但是,注意到袋鼠攻击可以通过拒绝P持有的任何点(但实现可能会忘记它,这很可能是it 25519/Curve25519中包含的原因)或具有辅助因子h = 1 (即拥有顺序为素数)来阻止。因此,据我所知,假设Ristretto (和Decaf)创建素数阶群,并且基准点在质数阶组上,那么任何标量乘法都不需要这种旋转。然而,尽管如此,使用Decaf/Ristretto的it 448-Goldilocks代码只使用注释/* Blarg */:https://sourceforge.net/p/ed448goldilocks/code/ci/master/tree/src/per_曲线/eddsa.tmpl.c#L36完成了完整的夹紧过程(注意,根据HISTORY.txt,它使用Ristretto,尽管函数名中有decaf )。
可能是这样的,因为同样的代码可能会执行引入的Decaf的批处理版本,该版本重新引入了一个辅助因子h=2,并按电源运行。然而,即使是这样,我也不认为有理由用完全的辅助因子h=4或h=8来钳制。
因此,我的问题是:对于Ed25519和Ed448,我是否需要使用Ristretto和/或Decaf执行完整的夹紧过程,它是否可以完全跳过,只需要执行其中的部分,还是需要完全不同的过程?
Implementation概述
我去搜索了另一个Ristretto的实现。
scalar/scalar.go减少了模块化Edwards25519 \ell。不透明的查表让人很难看到事后到底发生了什么。Scalar类型在标量乘法之前减少标量模Edwards25519 \ell,请参阅各个子目录中的scalar.rs和constants.rs。不透明的查表让人很难看到事后到底发生了什么。core_ristretto255.c生成的随机标量与core_ed25519.c中的Ed25519相同(后者清除顶部位,但既不设置高位也不清除低位),选择一个标量S候选项(在截断前三位之后,无疑会试图使其低于Edwards25519 \ell)。crypto_scalarmult_ristretto255_base()和crypto_scalarmult_ristretto255()在scalarmult_ristretto255_ref10.c中清除顶部位,但不设置高位,也不清除低位。然后,这个标量被立即用于不加夹紧的标量乘法。getRandomScalar()剪辑顶部位,但其他情况下只检查0 \le S < \ell的标量候选S。scalarMult()和scalarMultBase()在将其转发给tweetnacl之前,既不设置高位,也不清除低位,后者确实在crypto_scalarmult中执行夹紧操作(而且显然是在蒙哥马利空间中运行?)。它有测试向量来测试曲线25519-Dalek。_signEdKeypairFromSeed()和_signKeypairFromSeed之间唯一的区别是在进行标量乘法之前先调用scClamp()。结果仍然不确定,但似乎强烈暗示不加限制。然而,这只是一个启发,基于人们如何实现它,而不是什么实际上是正确的,因此,没有任何一种规范的答案。
引用
BJLS2015:丹尼尔·J·伯恩斯坦,西蒙·约瑟夫森,坦贾·兰格,彼得·施瓦贝,杨博贤.EdDSA获得更多曲线,https://ed25519.cr.yp.to/eddsa-20150704.pdf
作者声明: Daniel J.Bernstein,Tanja Lange。SafeCurves:椭圆曲线密码学中的安全曲线选择:扭曲安全性,https://safecurves.cr.yp.to/twist.html
H2015:麦克·汉堡。脱咖啡因:通过点压缩消除辅助因子,https://www.shiftleft.org/papers/decaf/decaf.pdf
HVLA2020: Mike汉堡,,Isis Lovecruft,Tony等人。Ristretto集团,https://ristretto.group/ristretto.html
发布于 2020-04-04 06:59:20
答案已载于Decaf文件,第3页。
Clearing顶部位(S)。这似乎只是为了获得标量值s在0 \le s < \ell的范围内(在清除顶部位(S)之后,再附加一次检查它是否真的有效)。这只是一个将实现细节与实际加密数学混合在一起的实现细节;请参阅问题中的实现概述。清除顶部位是最大化找到标量s < \ell的机会的一种选择,但在更大范围内选择一些东西,然后减少模\ell (例如EdDSA作为密钥生成的一部分)也是如此。
Setting高位。袋鼠攻击比rho攻击更有效,需要h > 1,并且可以通过拒绝任何点Q ( hQ = 0 )来阻止袋鼠攻击。但是,注意到具有低阶组件的点(P+T,其中T是低阶点)可能在内部出现,但被认为等于没有(P)的点,并且编码到相同的值。当编码时,带有低阶分量的点“被”“断”到质数级子群的下一个元素,并且在解码过程中不允许它们。因此,使用Decaf从这样的值解码总是拒绝hQ = 0对其进行解码的点。因此,没有必要设置高位。在点编码和解码层处理辅助因子问题。
Clearing低位。这是为了清除辅助性因素。不需要清除辅助因子,因为低阶组件在编码过程中是规范化的。同样的原因,让我们避免设置高比特,因此,也让我们避免清除低比特。
Ristretto并没有改变这一总体观念,它只是辅助因子h=8 [HVLA2020]的Decaf的一个扩展。
总之:对于Decaf和Ristretto,如果代码一致地从0 \le s < \ell中选择标量,则位旋转对于Decaf和Ristretto都是可选的。当随机选择一个标量s < \ell时,清除顶部位只是最大化找到标量的机会的一个选项。
H2014:https://moderncrypto.org/mail-archive/curves/2014/000345.html
https://crypto.stackexchange.com/questions/79627
复制相似问题