什么是DNSSEC KSK / ZSK可接受的密钥长度?

我的任务是在名称服务器上查看实施DNSSEC。 虽然技术方面(生成键,标志区,准备翻转)相对简单,但我遇到了一个后勤问题。

从我一直在阅读的文档中,1024位对于区域签名密钥来说是一个很好的尺寸,适当的过程是每个区域有一个ZSK,大约有一个月的翻转

然而,在一个合理的快速计算机上,需要10分钟的时间才能生成一个1024位的密钥…而ISP为超过三千个区域的主机工作。 除非我以某种方式从头到尾自动化这个过程,否则这是不可行的 – 即使我这样做了,到这个过程结束时,几乎是时候开始NEXT过渡。

总之,这是不可行的。 目前,我正在将DNSSEC限制在明确要求的客户身上,但这是最好的权宜之计。

我的问题:

  • 我是否会用钥匙长度过度?
  • 我怎样才能加快关键的生成过程?
  • 我应该为每个区域还是ZSK创build个人密钥签名密钥?

编辑:添加我用来生成密钥的确切命令:

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位,并且每隔几年就会滚动一次。