An architecture for protecting premium content in a nonsecure computer environment
executes only a small number of code modules in a secure memory. The modules are
arranged in a hierarchy of trust, where a module names other modules that it is
willing to trust, and those modules in turn name other modules that they are willing
to trust. A secure loader loads a security manager that oversees a number of content-providing
modules for manipulating the content. A memory manager assigns permissions to various
pages of the secure memory. The memory has rings of different security. The security
model can be extended to program modules and other devices on the computer's bus,
such as DMA controllers and peripherals.