我正在尝试ssh-keygen
生成新的素数OpenSSH用于教育目的。当我没有通过起点时,生成会起作用(默认是根据手册页) 到ssh-keygen
。但是目前我注意到,当我设置起点时,有两种行为。
第一个行为(起点为 0):
$ ssh-keygen -M generate -O bits=2048 -O start=0 moduli.candidates
Sat Jan 2 02:04:34 2021 Sieve next 67043328 plus 2047-bit
Sat Jan 2 02:05:08 2021 Sieved with 203277289 small primes in 34 seconds
Sat Jan 2 02:05:08 2021 Found 0 candidates
有人能解释一下为什么这不起作用吗?好吧,0
这不是素数。但是当我在这里设置小素数(2
、3
和)时5
,结果相同。7
第二种行为:
$ ssh-keygen -M generate -O bits=2048 -O start=005855CC185E774C46CA1745251F65F83DB68F2AAE0DF5F41D9D80B794F816ACA93DB11A20415D754763D483344CA40473854A7059E321DD5B6AF6D9E44556F8CFC607D0BD92DF968D30251A94F81BED3A86130CD3B50FDA55D60CFC3E85A6FBB29CA34FD28463DF0D32E1688167A5E3C694DA2044BC1BE090695F2CC712A4CA31CF94D9581EA46DC52980777D5D15C0E0A8D76FECB4C142EAEB67197C4F028790CBA69F85BAACF17AF60094A537E1331C00984AA3FE637F81236ED9EFCA850EEEDFC0F9AEC98202E8DBAE1B6F06149B924B7094B85A5C81C9689E08769A0FF3F1EFBECDA5509A5ED3D41340824EF583AE6259A714BF8ED50D24BCE4F983C329 moduli.candidates
Sat Jan 2 02:10:21 2021 Sieve next 67043328 plus 2047-bit
Sat Jan 2 02:13:27 2021 Sieved with 203277289 small primes in 186 seconds
Sat Jan 2 02:13:35 2021 Found 56141 candidates
这里我使用了上一个(工作)生成中的最小素数,并将最高有效字节归零。生成工作正常,但当我想筛选这个生成候选时,它也会失败:
$ ssh-keygen -M screen -f moduli.candidates moduli.safe
Sat Jan 2 02:19:02 2021 Found 0 safe primes of 0 candidates in 0 seconds
该文件肯定包含候选人:
这是第一位候选人:
$ head moduli.candidates
20210102011327 4 2 203277289 2046 0 5855CC185E774C46CA1745251F65F83DB68F2AAE0DF5F41D9D80B794F816ACA93DB11A20415D754763D483344CA40473854A7059E321DD5B6AF6D9E44556F8CFC607D0BD92DF968D30251A94F81BED3A86130CD3B50FDA55D60CFC3E85A6FBB29CA34FD28463DF0D32E1688167A5E3C694DA2044BC1BE090695F2CC712A4CA31CF94D9581EA46DC52980777D5D15C0E0A8D76FECB4C142EAEB67197C4F028790CBA69F85BAACF17AF60094A537E1331C00984AA3FE637F81236ED9EFCA850EEEDFC0F9AEC98202E8DBAE1B6F06149B924B7094B85A5C81C9689E08769A0FF3F1EFBECDA5509A5ED3D41340824EF583AE6259A714BF8ED50D24BCE4F983CBE5
[...]
$
以下是行数:
$ wc -l moduli.candidates
56141 moduli.candidates
$
设置起点的正确方法是什么ssh-keygen
?
答案1
我找到了解决方案。
ssh-keygen
需要一个恰好为位大小减 1 的起点。ssh-keygen
如果起点在范围内,则当前生成时不检查起点。
正确的起始点范围:
位大小2048:
0x40到0x7f加2040(随机)位
位大小4096:
0x40到0x7f加4088(随机)位
等等...
ssh-keygen
目前,在生成候选值时,小于或大于的值可以起作用,但在详细模式下运行时,筛选/测试会失败并出现错误消息。