A processing unit includes a read-only encryption key. Loader code image is loaded
into system memory from non-volatile storage. Loader code image includes a prefix
value and a suffix value. The prefix value is combined with the master key from
the processing unit to create a random value that is the seed for a hashing algorithm.
The hashing algorithm uses the seed value with a signature formed from the blocks
of code to form a result. During the hashing algorithm, intermediate key values
are generated and stored in a memory area inaccessible by the user. The intermediate
key values are used by the loader code after the loader has been authenticated
and loaded. The loader combines one or more of the intermediate key values with
prefix and suffix values that correspond to other software modules to authenticate
the software, using a hashing algorithm, and load the software upon authentication.