我的任务是研究在我们的名称服务器上实施 DNSSEC。虽然这方面的技术(生成密钥、标志区、准备翻转)相对简单,但我遇到了后勤问题。
从我一直在阅读的文档来看,1024 位对于区域签名密钥来说是一个很好的大小,正确的程序是每个区域一个 ZSK,大约一个月的翻转
但是,在具有相当大熵的速度相当快的计算机上,最多需要 10 分钟才能生成 1024 位密钥……而且我为超过三千个区域的主机工作的 ISP。除非我以某种方式从头到尾自动化该过程,否则这将行不通——即使我这样做,到该过程完成时,也差不多该开始 NEXT 翻转了。
简而言之,这是不可行的。现在我将 DNSSEC 限制在明确要求的客户,但这充其量只是权宜之计。
我的问题:
- 我是不是对密钥长度太过分了?
- 如何加快密钥生成过程?
- 我应该为每个区域和 ZSK 创建单独的密钥签名密钥吗?
编辑:添加了我用来生成密钥的确切命令:
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 可能会显示很多东西,比如:/dev/random
如果没有足够的熵就会阻塞,所以可能需要一段时间。您有几个选项可以使它更快。最简单的方法是使用 change
-r /dev/random
to-r /dev/urandom
使用非阻塞(但不那么安全)的随机数生成器。对于您希望使用数年的 GPG 或 SSH 密钥之类的东西,这可能不被认为是安全的,但对于您每 30 天更改一次的东西来说,这可能是安全的。另一种选择是使用EGD或haveged 之类的东西来替代
/dev/random
.如果您想要更安全的 RNG,最好使用专用硬件 RNG。除非您管理的是 TLD 或银行域,否则这些对于 DNSSEC 来说可能有些矫枉过正。
对于 KSK,您可能希望坚持使用 /dev/random,但对于 ZSK,/dev/urandom 应该是好的。
我认为普遍的共识是您的 ZSK 应该是 1024 位并且每季度轮换一次,而您的 KSK 应该是 2048 位并且每两年轮换一次。