A method for decrypting data including: maintaining a first process key table for a first process, wherein the first process key table maps unique keys to a set of key identifiers; maintaining a second process key table for a second process, wherein the second process key table maps unique keys to the set of key identifiers; wherein the method further includes: determining that the first process is in execution by a processor core; in response to determining that the first process is in execution, loading the first process key table into an active process key table memory; receiving a first virtual memory address for first data; translating the first virtual memory address into a first physical memory address that identifies a first memory location; identifying a first key identifier of the set of key identifiers encoded in at least one bit of the first physical memory address or virtual memory address; retrieving first encrypted data from the first memory location; identifying a first key mapped to the first key identifier in the first process key table; decrypting the first encrypted data using the first key to generate decrypted first data; and storing the decrypted first data for access by the first process, wherein the method further includes determining that the second process is loaded for execution by the processor core, when the first process is active; in response to determining that the second process is loaded for execution, storing the first process key table in a first process state memory: in response to determining that the second process is loaded for execution, loading the second process key table into the active process key table memory; receiving a second virtual memory address for second data; translating the second virtual memory address into a second physical memory address that identifies a second memory location; identifying the first key identifier of the set of key identifiers encoded in the at least one bit of the second physical memory address or the second virtual memory address; retrieving second encrypted data from the second memory location; identifying a second key mapped to the first key identifier in the second process key table; decrypting the second data using the second key to generate decrypted second data; and storing the decrypted second data for access by the second process. maintaining a first process key table for a first process, wherein the first process key table maps unique keys to a set of key identifiers; maintaining a second process key table for a second process, wherein the second process key table maps unique keys to the set of key identifiers; determining that the first process is in execution by a processor core; in response to determining that the first process is in execution, loading the first process key table into an active process key table memory; receiving a first virtual memory address for first data; translating the first virtual memory address into a first physical memory address that identifies a first memory location; identifying a first key identifier of the set of key identifiers encoded in at least one bit of the first physical memory address or virtual memory address; retrieving first encrypted data from the first memory location; identifying a first key mapped to the first key identifier in the first process key table; decrypting the first encrypted data using the first key to generate decrypted first data; and storing the decrypted first data for access by the first process, wherein the method further includes determining that the second process is loaded for execution by the processor core, when the first process is active; in response to determining that the second process is loaded for execution, storing the first process key table in a first process state memory: in response to determining that the second process is loaded for execution, loading the second process key table into the active process key table memory; receiving a second virtual memory address for second data; translating the second virtual memory address into a second physical memory address that identifies a second memory location; identifying the first key identifier of the set of key identifiers encoded in the at least one bit of the second physical memory address or the second virtual memory address; retrieving second encrypted data from the second memory location; identifying a second key mapped to the first key identifier in the second process key table; decrypting the second data using the second key to generate decrypted second data; and storing the decrypted second data for access by the second process.