我在摆弄 DNSSEC,我想尝试验证dnssec-signzone
from生成的 NSEC3 记录bind9-utils
(我认为它是有效的)。这是我的区域文件:
$ORIGIN dnssectest.mvolfik.tk.
$TTL 120
@ SOA dnssectestns.mvolfik.tk. email.example.com. 15 259200 3600 300000 3600
A 192.168.0.101
s3c A 192.168.0.101
$INCLUDE zsk.key
$INCLUDE ksk.key
ZSK 和 KSK 是用dnssec-keygen -a ECDSAP256SHA256 dnssectest.mvolfik.tk.
(-f KSK
分别添加)生成的
然后我使用命令对其进行签名dnssec-signzone -3 deadbeef -H 5 -o dnssectest.mvolfik.tk -k ksk.key zonefile zsk.key
(使用带有deadbeef
十六进制盐的 NSEC3,5 次迭代)
我在以下 NSEC3 记录中得到了zonefile.signed
:(忽略 RRSIG 和 DNSKEY 无关;A 和 SOA 没有改变)
0 NSEC3PARAM 1 0 5 DEADBEEF
F66KKS17FM851AVA4EARFHS55I3TOO85.dnssectest.mvolfik.tk. 3600 IN NSEC3 1 0 5 DEADBEEF (
D60TA5J5RS4JD5AQK25B1BCUAHGP4DHC
A SOA RRSIG DNSKEY NSEC3PARAM )
D60TA5J5RS4JD5AQK25B1BCUAHGP4DHC.dnssectest.mvolfik.tk. 3600 IN NSEC3 1 0 5 DEADBEEF (
F66KKS17FM851AVA4EARFHS55I3TOO85
A RRSIG )
现在我知道这个区域中唯一的域是s3c.dnssectest.mvolfik.tk.
and dnssectest.mvolfik.tk.
,我假设下面的 Python 脚本会得到与上面的符号区域文件中相同的哈希值:(来自RFC 5155中的伪代码)
import hashlib
def ih(salt, x, k):
if k == 0:
return hashlib.sha1(x + salt).digest()
return hashlib.sha1(ih(salt, x, k-1) + salt).digest()
print(ih(bytes.fromhex("deadbeef"), b"s3c.dnssectest.mvolfik.tk.", 5).hex())
print(ih(bytes.fromhex("deadbeef"), b"dnssectest.mvolfik.tk.", 5).hex())
但是,我得到了b58374998347ba833ab33f15332829a589a80d82
and 545e01397a776ee73aa0372aea015408cc384574
。我究竟做错了什么?