I've been considering switching from SRP to OPAQUE, because I like the idea that verifiers (which can be subject to dictionary attacks) are never communicated over the protocol, even during registration. However, I don't particularly like the idea that the OPRF needs to be rate-limited separately from the actual authentication attempts. I mean, it's hardly a problem that can't be overcome, but it feels more complex and error-prone to tune rate-limiting values and whatnot to a process that can be abandoned before actual authentication takes place (which is where I'd normally perform rate-limiting, logging and so on in other authentication schemes).
That got me thinking, however -- what is the purpose of the envelope checksums/tags, really? Just to ensure that I haven't misunderstood anything, the purpose of the checksum/tag is really just to ensure the client that it has decrypted the inner envelope correctly, no? Is there a need to do this? The central question then being:
- If I removed the envelope checksum, and considering that ECC private keys are just random numbers without any particular structure anyway, wouldn't it be true that the client would just decrypt a private key from the envelope and use it for the AKE phase, not knowing if it's the correct key or not, where the wrong key would be detected, logged, rate-limited and reported just like any other authentication mechanism?
In this case, I could just not bother rate-limiting the OPRF. Would this compromise security in some other way? I'm aware that some OPAQUE schemes store the server's public key in the envelope to enable mutual authentication, which would interact poorly with this idea, but in my case I'm not really interested in mutual authentication anyway (the server being assumed to be authenticated via TLS to begin with), so I could just not do that.
Are there any other issues with omitting the checksum that I'm not seeing? And would doing so make the client truly oblivious of whether it has performed a correct decryption or not?