NIIBE Yutaka wrote:
Hello,

Jacob Bachmeyer <jcb62...@gmail.com> wrote:
Otherwise, a non-standard malicious host could "bend" the slot timing
enough that the fixed response delay is not always sufficient for the
operation to complete.

True.  Thank you for showing this possibility.  I didn't consider this
point.

To be fair, when I said "non-standard", I meant a USB host implemented either using a programmable logic device or by bit-banging on MCU GPIO pins. I do not believe that a PC's USB host controller, for example, will allow that. I would expect standard hardware USB hosts to enforce spec-compliant bus timing beyond software control. Therefore, the token should shut down or possibly even wipe itself if it detects such incorrect timing.

Well, in general, I suggest not keeping a USB token inserted into a host.

There are possibilities (in theory, or in history) that a decryption
service by a USB token might be providing a decryption oracle to an
attacker by some channel(s).

When a user has a practice of only powering the device when needed,
bandwidth to an attacker could be small, hopefully small enough.  Slower
service is better too, for smaller bandwidth.

Leaving the token connected to the host and active (unlocked) raises a different hazard: the token would then be available for malware on the host to abuse at will. This largely defeats the purpose of using a token in the first place, as the security benefits of tokens center around preserving the security of the key even if the host is compromised.

Obvious decryption oracle: just ask the token to decrypt the ciphertext. If it is connected and unlocked, it will. Oops.

It is a bit off-topic (from the original report).  Sorry, It was me who
addressed USB communication.

And... yes, it's true that it's hard for programming to estimate
worst-case running time, it's also hard to guarantee constant-time
running time, in a given situation of programming environment and
hardware architecture.

The basic method is to do both sides of every branch and select the result with the equivalent of a multiplexer. This obviously does not work for loop-test branches, since loops must eventually terminate, and still requires care at higher-levels that the set (and possibly sequence) of operations performed is invariant with respect to secret data, but it is possible as I understand.

This may also require avoiding the use of sufficiently-advanced processors, if any exist that can detect that the result of a speculative execution chain will not be used and elide the chain. This could also be a good application for tokens containing simpler processors intended for security over performance, if main processors get advanced enough to do that.


-- Jacob

_______________________________________________
Gcrypt-devel mailing list
Gcrypt-devel@gnupg.org
https://lists.gnupg.org/mailman/listinfo/gcrypt-devel

Reply via email to