[Opendnssec-develop] Creating keys
John Dickinson
jad at jadickinson.co.uk
Thu Nov 27 10:25:24 UTC 2008
Lacking anyone physically present who cares about DNS, DNSSEC or keys
to bounce thoughts off I am going to use this mailing list :)
I am working on the key creation logic of the enforcer.
A policy is used to specify key and signing parameters for a zone or
set of zones.
Lets look at an example, say the policy specifies that the algorithm
to be used for new KSKs is 5 and that the algorithm to be used for
ZSKs is 11. (ignore for now any technicalities of exactly how you
switch to a new algorithm.). Keys for both KSKs and ZSKs are to be
stored in security module 1.
The enforcer will start for the FIRST TIME and examine the policy - it
will see that it needs keys of types 5 and 11. It knows (because we
told it) that the capacity of security module 1 is 1000 keys.
Key generation is expensive so I was planning to pre-create as many
keys as possible. So first of all I thought the Enforcer could create
500 keys of each algorithm. Great - that is easy. But consider the
following events in the future...
1. Additional policy using same key algorithms
at some time later we create a second policy which specifies that it
needs KSKs with alg 5 and ZSKs with alg 5. Fine there are 500 (minus
any we have used) of alg 5 keys we just start using them for policy 2.
2. Additional policy using new key algorithms
at some time later we create a third policy which specifies that it
needs KSKs with alg 6 and ZSKs with alg 12. Oh no! the security module
is full. What do we do?
3. Change an existing policy to use new algorithm.
at some time later we modify the first policy to say that new keys
must use alg 94. Oh no! the security module is full. What do we do?
Solution:
This is the logic I intend use to get round this.
Policy will also specify a minimum number of unused keys that must
exist.
policy->zsk->alg = 5
policy->zsk->keymincount = 100
policy->ksk->alg = 11
policy->ksk->keymincount = 20
as before there will be a known capacity of the security module. Lets
say 300.
The enforcer will start for the FIRST TIME and examine the policy - it
will see that it needs keys of types 5 and 11. It will create 100 alg
5 and 20 alg 11 keys
1. Additional policy using same key algorithms
at some time later we create a second policy which specifies that it
needs 100 ZSKs with alg 5 and 20 KSKs with alg 11. Fine there is still
180 spaces for keys in the security module - create another 100 alg 5
and 20 alg 11 keys
2. Additional policy using new key algorithms
at some time later we create a third policy which specifies that it
needs 200 ZSKs with alg 6 and 50 KSKs with alg 12. OK there is room
for the 50 alg 12 keys but not for 200 alg 6. So the Enforcer will
scan for dead keys and delete them. If there is now room for 200 more
keys then great - if not then WARN.
3. Change an existing policy to use new algorithm.
There was room... at some time later we modify the first policy to say
that new keys ksk and zsk must use alg 94 min still 100 and 20. the
Enforcer will scan for dead keys and delete them. If there is now room
for 120 more keys then great - if not then WARN.
Each time the policy is read a check will be made of the number of un-
used keys available. If for a particular algorithm there is less than
the sum over all policies of keymincount then new keys will be created.
Assuming keys are being used regularly this will cause new keys to be
created regularly. We might want a threshold saying don’t create new
keys unless we are x many below the minimum.
BTW if you set keymincount = a small number <= no of keys in use then
you are effectively saying don't pre-create keys.
Note: the above says nothing about keys getting used. Even if new keys
can not be created - If there are un-used keys available then
scheduled key rollovers will continue. If at any time there are no new
keys available then the Enforcer will scan for dead keys and delete
them. If there is now room for more keys then great - if not then key
rollover will stop - (re-)signing will always continue...
I am not really asking any questions but if what I wrote seems stupid
then please shout.
John
More information about the Opendnssec-develop
mailing list