#1 楼
ASN.1编码的SSH私钥按顺序包含以下整数:公共模数$ n $和指数$ e $;
私有指数$ d $ ;
$ n $的主要因子$ p $和$ q $;
“减少的”私有指数$ d_p = d \ bmod(p-1)$和$ d_q = d \ bmod( q-1)$;
“ CRT系数” $ q _ {\ text {inv}} = q ^ {-1} \ bmod p $。
观察值这样的键中的$ d $可能是不相关的,这是由于以下原因:为了将$ n $模的乘幂速度提高约$ 4 $,可以使用中国剩余定理来计算$ p $和$ q模的结果。分别使用$和随后将它们组合以获得以$ n $为模的“真实”结果。通过这种优化,不需要$ n $,$ e $和$ d $的值,因此,只要$ p $,$ q $,$ d_p $,$ d_q $和$ q _ {\ text, {inv}} $可用*。这就是为什么在键的中间更改某些字符并不一定要销毁它的原因,这取决于您更改了哪些组件。
*)至少对于OpenSSH而言,它们不必存在:设置$ p = q = 1 $和$ d_p = d_q = q _ {\ text {inv}} = 0 $会使实现使用$ n $和$ d $。
可视化在单个组件中,我从一个典型的4096位RSA私钥文件创建了以下图形: (编码将要跟随序列的事实,等等),然后是构成键的整数,如上所述。与每个组件关联的ASN.1标头数据(主要是长度字段)的颜色比表示整数本身的数据的颜色略亮。请注意,上图所示的细分并非100%准确,因为一个Base64字符编码的原始字节大约为$ 3/4 $,因此某些边界实际上应严格在单个字符内运行。
评论
$ \ begingroup $
相关问题:crypto.stackexchange.com/questions/6593/…(以前与我的答案相关,因此我删除了该答案,否则就多余了)。
$ \ endgroup $
–伊尔马里·卡洛宁(Ilmari Karonen)
16年1月9日在21:24
$ \ begingroup $
@yyyyyyy:Meta问题:我喜欢你的颜色。您使用什么程序?
$ \ endgroup $
– StackzOfZtuff
16年1月11日在8:37
$ \ begingroup $
@StackzOfZtuff谢谢!不幸的是,我不知道有什么方便的程序可用于这样的事情:我的“工具链”由OpenSSL,Python,LaTeX和GIMP的可怕混合物以及大量的手工工作组成。
$ \ endgroup $
– yyyyyyy
16年1月11日在12:12
$ \ begingroup $
Blimey!我仅对着色问题给出了答案:) [不必说这对所有RSA新手来说都是非常有用的答案,我已经在我的收藏夹中保存了一个链接]。
$ \ endgroup $
–tum_
16年6月24日在7:39
$ \ begingroup $
Re:“至少对于OpenSSH,它们不必存在:设置$ p = q = 1 $和$ d_p = d_q = q _ {\ text {inv}} = 0 $会使实现使用$ n $和$ d $。”对于OpenSSL,这似乎也适用:我刚刚针对Node.js的crypto.privateDecrypt测试了使用这些参数构造的证书,并且该证书没有错误。
$ \ endgroup $
– Stuart P. Bentley
17年5月10日在5:56
评论
在不更改其他参数的情况下更改d私有指数,您将失去整个密钥对的原始属性。检查d参数是如何生成的。无论如何,这个话题很有趣。您可以共享密钥(或创建类似密钥)来重现案件吗?您确定使用了此密钥吗?检查ssh -v主机。难道也没有DSA密钥吗?
绝对是RSA密钥。