首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >生成NIST P-256私钥

生成NIST P-256私钥
EN

Cryptography用户
提问于 2018-03-15 16:35:19
回答 1查看 5.7K关注 0票数 6

从Curve25519规范中,我了解到可以随机选取32个字节,只需几个操作就可以在曲线上完成:

要生成32字节的Curve25519密钥,首先从密码安全源生成32个秘密随机字节:

代码语言:javascript
复制
mysecret[0], mysecret[1], ..., mysecret[31].

那就去做

代码语言:javascript
复制
mysecret[0] &= 248;
mysecret[31] &= 127;
mysecret[31] |= 64;

是否有类似的方法来获取随机字节并将其用于p-256私钥?

EN

回答 1

Cryptography用户

回答已采纳

发布于 2018-03-16 20:14:13

NISTP-256密钥(用于ECDH或ECDSA)表示\ell = 2^{256} - 2^{224} + 2^{192} - 89188191075325690597107910205041859247,的任意标量模D1,而X25519密钥表示2^{254}2^{255}之间的整数倍数为8的整数倍,在这两种情况下都被解释为p_1 = 2^{252} + 27742317777372353535851937790883648493.的标量模8 p_1,在这两种情况下,应该从所有可能性中一致地随机选择密钥,使每种可能性都具有相同的概率。这里,\ellp_1都是大素数,是各自曲线上标准基点的阶数。

NIST建议,在FIPS 186-4附录B.4第61至64页中,要么随机生成320位,减少模\ell - 1,再添加1;要么做拒绝采样,绘制256位n,然后重新开始,除非0 < n < \ell。这些方法分别保持了模偏置的小或不存在,避免了n = 0。这个可以忽略不计的好处,所以我只接受模数偏差,即随机选择256位,执行一次条件减法,损失的理论安全性还不到一位。但是如果你使用的是NISTP-256,你可能是遵从政府官僚标准的奴隶,所以你应该遵循标准的字母。

Technical详细信息,或者,为什么NISTP-256和X25519上的ECDH不同?

曲线组NISTP-256具有素数阶\ell,标准基点生成整个组,因此即使你揭示了攻击者控制点的[n]P,其中n是你的秘密标量,NISTP-256上也不可能有主动小子群攻击;虽然NISTP-256的二次扭曲不具有素数,但它恰好有适度的协因子34905 = 3 \cdot 5 \cdot 13 \cdot 179,它赋予了扭曲安全性的程度。警告:如果你愚蠢地处理未压缩的(x, y)输入,扭曲安全性是不够的;您仍然必须验证它们以阻止无效的曲线攻击。

相反,曲线群Curve25519具有复合阶8 p_1,其扭曲度对另一个大素数p_2具有复合阶4 p_2,而标准基点具有阶p_1。因此,为了在不需要点验证的情况下阻止小子群和扭转攻击,总是选择秘密标量n与零模余因子8和扭余因子4一致,公钥仅作为x坐标传输,因此唯一可能的无效曲线是二次扭曲。

票数 10
EN
页面原文内容由Cryptography提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://crypto.stackexchange.com/questions/56509

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档