Side channel attacks against a computing device are prevented by
combinations of scrambling data to be stored in memory and scrambling the
memory addresses of the data using software routines to execute
scrambling and descrambling functions. Encrypted versions of variables,
data and lookup tables, commonly employed in cryptographic algorithms,
are thus dispersed into pseudorandom locations. Data and cryptographic
primitives that require data-dependent memory accesses are thus shielded
from attacks that could reveal memory access patterns and compromise
cryptographic keys.