我的任务是在名称服务器上查看实施DNSSEC。 虽然技术方面(生成键,标志区,准备翻转)相对简单,但我遇到了一个后勤问题。
从我一直在阅读的文档中,1024位对于区域签名密钥来说是一个很好的尺寸,适当的过程是每个区域有一个ZSK,大约有一个月的翻转
然而,在一个合理的快速计算机上,需要10分钟的时间才能生成一个1024位的密钥…而ISP为超过三千个区域的主机工作。 除非我以某种方式从头到尾自动化这个过程,否则这是不可行的 – 即使我这样做了,到这个过程结束时,几乎是时候开始NEXT过渡。
总之,这是不可行的。 目前,我正在将DNSSEC限制在明确要求的客户身上,但这是最好的权宜之计。
我的问题:
编辑:添加我用来生成密钥的确切命令:
caleburn: ~/Projects/Systemec/DNS-magic/DNSSEC/keys/ >time dnssec-keygen -r/dev/random -a RSASHA256 -f KSK -b 1280 -n ZONE example.com Generating key pair.............................+++++ ...+++++ Kexample.com.+008+10282 real 9m46.094s user 0m0.092s sys 0m0.140s caleburn: ~/Projects/Systemec/DNS-magic/DNSSEC/keys/ >time dnssec-keygen -r/dev/random -a RSASHA256 -b 1280 -n ZONE example.com Generating key pair.........................+++++ .........+++++ Kexample.com.+008+22173 real 12m47.739s user 0m0.124s sys 0m0.076s
dnssec-keygen
默认从/dev/random
读取。 如果你的系统的熵很低,你不会得到足够的随机数据来及时生成密钥。 strace可能会显示很多东西,如:
select(4, [3], [], NULL, NULL) = 1 (in [3]) read(3, "5%\5\32\316\337\241\323", 46) = 8 read(3, 0x7fff5b6c3df0, 38) = -1 EAGAIN (Resource temporarily unavailable) select(4, [3], [], NULL, NULL) = 1 (in [3]) read(3, "\305\35\201c\31\343\251\21", 38) = 8 read(3, 0x7fff5b6c3df0, 30) = -1 EAGAIN (Resource temporarily unavailable)
/dev/random
块,如果没有足够的熵,所以可能需要一段时间。
你有几个select,使这个更快。 最简单的方法是使用-r /dev/random
改变-r /dev/urandom
来使用非阻塞(但不是安全的)随机数发生器。 对于您希望使用多年的GPG或SSH密钥,这可能不被认为是安全的,但对于每30天会更改一次的内容,这可能是安全的。
另一个select是使用EGD或hasged作为/dev/random
的替代品。
如果你想要一个更安全的RNG,你最好用专用的硬件RNG。 除非您pipe理TLD或银行域名,否则这些对DNSSEC可能是过度的。
你可能想要坚持/ dev / random为KSK,但是/ dev / urandom应该对ZSK很好。
我认为普遍的一致意见是,你的ZSK应该是1024位,每个季度都会滚动一次,你的KSK应该是2048位,并且每隔几年就会滚动一次。