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.