The various embodiments described below are directed to providing
authenticated and confidential messaging from software executing on a
host (e.g. a secure software application or security kernel) to and from
I/O devices operating on a USB bus. The embodiments can protect against
attacks that are levied by software executing on a host computer. In some
embodiments, a secure functional component or module is provided and can
use encryption techniques to provide protection against observation and
manipulation of USB data. In other embodiments, USB data can be protected
through techniques that do not utilized (or are not required to utilize)
encryption techniques. In accordance with these embodiments, USB devices
can be designated as "secure" and, hence, data sent over the USB to and
from such designated devices can be provided into protected memory.
Memory indirection techniques can be utilized to ensure that data to and
from secure devices is protected.