[This replies to emails other people also sent to list, but I just picked the last email to list some points, and I am talking here as an implementor not as a chair].
David McGrew writes: > Yes; that draft is a good starting point. The goal should be to > develop an RFC that updates RFC 7383 and specifies how Postquantum > Preshared Keys (PPKs) can be used, in a manner that is operationally > similar to IKE preshared keys, to achieve postquantum security. > The WG should decide whether identity protection is needed, or > whether it can be traded for simplicity. One note you should remember that IKEv1 does not have any identity protection when using shared keys with main mode. The responder MUST know from the IP address alone who the other end is, thus the whole world will know that this identity is same identity than the last one coming from the same IP... I.e. as the shared key is used to derive the encryption key for the IKE message protecting the ID payload you need to know the shared key before you can decrypt the message containing ID to find who the other is, thus the ID you get is useless for you as you must have already picked up one shared key before getting that far. People who say that IKEv1 is quantum computing resistant because it does exactly this (i.e. the pre shared key is used to derive keys) clearly do not care about identity protection. Because of that I think the limited identity protection should be ok, i.e., identity protection for the initiator can be broken by active attacker (like in IKEv2 now), and it should be ok even if it broken for both parties if Diffie-Hellman done in the IKE is broken. The identity protection against the responder has always been bit vague, as normally responders identity is always known because he has fixed ip-address or that ip-address is advertised somewhere etc. We had long discussions about these when we were doing IKEv2, and we ended up with the current compromise, i.e. IKEv2 identity protection protects identities against passive attacker provided attacker cannot break Diffie-Hellman, but does not protect identity protection against active attacker. Also note that the way shared keys were used in the IKEv1 also caused the fact that main mode with pre shared keys cannot really be used for mobile users, or devices coming from behind nat, etc. This has really limited the identity protection offered by IKEv1 in real use as users use aggressive mode which do not have identity protection at all. Also even if the IP-numbers are static it caused all kind of wierd errors, as mistyped shared key caused decryption errors in the IKE packet handling, causing the detecting such situation hard (usually when you have decryption error you simply silently ignore the message, but for authentication failures, it would be nicer to return the error saying authentication failed so the user experience would be better, IKEv1 cannot do that). Because of this I think it is better to just stick with the current identity protection method, i.e., do not derive IKE SA encryption keys from the shared secret, i.e., active attacker can still get the IDi... > Other approaches, such as QKD or using a long stream of shared > secret key material obtained from an arbitrary source, should be > addressed through separate documents, because they are not needed to > address the above problem, and because they do not meet the > requirement of operational similarity with current practice. A > sequence of key material intended for one-time use is not the same > as a PPK, and the logic needed to handle indexing and sequencing > should not be imposed on the RFC that addresses the immediate need. Earlier I have proposed very simple method where the IKE_SA_INIT contains just some kind of notification messages identifying the "oob-key" to be use. This identification information is completely opaque, and fully depends on the implementation. It could be fixed random string, which would immediately leak out the identity of the users, just like IKEv1 IP-address did. It could just random identifier, which identifies the one-time-use shared secret from big table (which is shared between the end nodes), it could be some kind of encrypted blob, which is encrypted with some kind of system wide group shared key (i.e., everybody in the group know it, but outsiders do not, so it protects identities for outsiders, but not for insiders), or it could be something more complicated like what current draft proposes. For the IKEv2 protocol point of view it is just opaque binary object which is given to the subsystem which will then return a shared key to be used for him. In all cases both ends must share the same shared key or table of shared keys or access to the QKD subsystem, so this code that knows how this blob is interpreted can be left to the implementations. We do not need to standardize it, we can leave it open, just like we leave cookie or the IKEv2 session resumption ticket format. We could include some proposals in the appendix, and we might want to add 16-bit "format identifier" in the beginning just in case people want mix multiple methods in same implementations. This means that the level of shared key identity protection is left to implementation and to it depends on the policy settings. When IKEv2 then has the shared secret then it needs to mix that to some parts of the cryptographic protection to provide quantum resistant IKEv2. There are multiple levels on that: 1) Include it only in KEYMAT. This will protect all IPsec SAs, i.e. the actual traffic transmitted over IPsec is protected from attackers able to break the Diffie-Hellman of the IKEv2. I.e., replace SK_d in there with (SK_d | OOB_secret). Note, this have also the side effect that after the first IKEv2 rekey also the IKEv2 SA traffic is protected, as new keying material after the IKEv2 rekey depends on the SK_d. 2) In addition to the 1, include it also in the SK_pi and SK_pr. This will mean that even if the attacker is able to break Diffie-Hellman and the Signature method, he will not be able to authenticate as user, as he cannot calculate the MACedIDforI/MACedIDforR for authentication. I.e. replace SK_pi and SK_pr with (SK_pi | OOB_secret) and (SK_pr | OOB_secret). 3) Include it in the SKEYSEED calculation. This will has the side effect that we are no longer able to get meaningfull error messages in case something goes wrong in the OOB key identification process, i.e., in case the OOB_secrets do not matchi, we just drop the frame and wait for next one, thus we cause timeout if OOB_secret is wrong. This is bad for user experience, but this will also protect the IKEv2 SA traffic with the OOB_secret. And, no please do not propose that we make this negotiated... Lets pick one and use it. I am in favor of 2, because it offers most, but does not cause problems. And if someone wants to protect traffic selectors and future traffic in IKEv2, they can simply do IKE_SA_INIT + IKE_AUTH with childless initiation, and then immediately do IKE SA rekey, and then CREATE_CHILD_SA to create Child SAs. > Going a little further off topic, with any technology (like QKD or a > one-time pad) that is predicated on the idea that computational > cryptography cannot be fully trusted, there should be a detailed > security analysis of how it is integrated into IPsec/IKE, which > shows how to use the technology along with other IPSec mechanisms in > a way that is consistent with its security assumptions. In short, > the usage of technologies that are only interesting in scenarios > that include major advances in cryptanalysis should be specifically > crafted to minimize the risk of those advances. No such analysis has > yet been put forward. The analysis of key renewal rates in the > SECOQC White Paper on Quantum Key Distribution and Cryptography > [Section 3.2 of > http://www.secoqc.net/downloads/secoqc_crypto_wp.pdf], for instance, > neglects to consider the risk of a key collision attack, and does > not attempt any formal/provable security framework. The IPSec WG > should expect this analysis before any standards are developed that > support these new technologies, and those standards should clearly > state what advantages the new technologies have, and in what > scenarios they should be used, and what sort of other IPSec > algorithms and options are consistent with good security. Please > note that I am not objecting to the IPSec WG taking up this work; I > am pointing out that there is a lot of work involved, which > underscores the importance of dealing with it in a way that is > separate from the immediate need of parity between IKE versions. I do not think that is reasonable for the IPsecME WG. We do not have security analysis on the use of ChaCha20/Poly1305 on IPsec/IKE. We do not have security analysis on most of the other things either. We should simply provide requirements for the OOB_secret provided by the subsystem and that should be enough. I.e., it should be enough to say that OOB_secret MUST be longer than 16 octets, and MUST NOT be longer than 64 octets, and to provide protection against attackers able to break Diffe-Hellman in IKEv2 it must be something that attackers cannot guess or know... That should be enough to make it secure for IKEv2 use. That was one of the reasons why I was so much against the QKD draft originally getting rid of the whole Diffie-Hellman in IKEv2, and only using the OOB_secret. I want the failure model of the OOB_secret to be so that the IKEv2 still as safe as it is now (yes, there might be some leak on the ID part in the OOB key identification process, but the IPsec traffic is still safe). Anyways, either one of those draft is good starting point for this work. It does not really matter which one we pick, we then just need to change it to what WG things is approriate for this protocol (i.e., which compromizes we take, and which we do not take). Ps. And now back to my vacation, so I most likely will not reply back until I get back from my last week of vacation. -- [email protected] _______________________________________________ IPsec mailing list [email protected] https://www.ietf.org/mailman/listinfo/ipsec
