For systems, such as personal computers, portable computing devices, servers, etc., various types of memory resources may be implemented for different purposes. In memory resources, sensitive data may be encrypted to facilitate security of sensitive data.
Throughout the drawings, identical reference numbers designate similar, but not necessarily identical, elements. Moreover the drawings provide examples and/or implementations consistent with the description; however, the description is not limited to the examples and/or implementations provided in the drawings.
Example computing systems may comprise at least one processing resource, a memory resource, and a cryptography engine connected between the processing resource and the memory resource. In such examples, the cryptography engine may be described as “in-line” with the processing resource and the memory resource. A computing system, as used herein, may include, for example, a personal computer, a portable computing device (e.g., laptop, tablet computer, smartphone), a server, blades of a server, a processing node of a server, a system-on-a-chip (SOC) computing device, a processing node of a SOC device, a smart device, and/or other such computing devices/systems. As used herein, a computing system may be referred to as simply a system.
In some example systems, a cryptography engine may be arranged in-line with a processing resource and a memory resource such that data communicated between the processing resource and the memory resource passes through and may be operated on by the cryptography engine. For example, the cryptography engine may selectively decrypt data during read accesses of the memory resource by the processing resource. As another example, the cryptography engine may selectively encrypt data during write accesses of the memory resource by the processing resource. As will be appreciated, selective encryption and decryption refers to the cryptography engine encrypting/decrypting some data while not encrypting/decrypting other data. Accordingly, in some examples, the system determines whether to encrypt/decrypt data for respective memory accesses. Examples provided herein may implement various types of cryptography/cryptosystems to encrypt/decrypt data. Some example types of cryptography/cryptosystems that may be implemented include Advanced Encryption Standard (AES) encryption. Triple Data Encryption Standard (DES), RSA cryptosystem, Blowfish cryptosystem, Twofish cryptosystem, Digital Signature Algorithm (DSA) cryptosystem, ELGamal cryptosystem, Elliptic cryptosystem, NTRUEncrypt, Rivest Cipher 4 cryptosystem, Tiny Encryption Algorithm (TEA) cryptosystem, International Data Encryption Algorithm (IDEA) cryptosystem.
Furthermore, as described herein, examples may include various engines, such as a cryptography engine. Engines, as used herein, may be any combination of hardware and programming to implement the functionalities of the respective engines. In some examples described herein, the combinations of hardware and programming may be implemented in a number of different ways. For example, the programming for the engines may be processor executable instructions stored on a non-transitory machine-readable storage medium and the hardware for the engines may include a processing resource to process and execute those instructions. In some examples, a system implementing such engines may include the machine-readable storage medium storing the instructions and the processing resource to process the instructions, or the machine-readable storage medium may be separately stored and accessible by the system and the processing resource. In some examples, engines may be implemented in circuitry. Moreover, processing resources used to implement engines may comprise at least one central processing unit (CPU), a graphics processing unit (GPU), an application specific integrated circuit (ASIC), a specialized controller (e.g., a memory controller) and/or other such types of logical components that may be implemented for data processing.
In the examples described herein, a processing resource may include at least one hardware-based processor. Furthermore, the processing resource may include one processor or multiple processors, where the processors may be configured in a single system or distributed across multiple systems connected locally and/or remotely. As will be appreciated, a processing resource may comprise one or more general purpose data processors and/or one or more specialized data processors. For example, the processing resource may comprise a central processing unit (CPU), a graphics processing unit (GPU), an application-specific integrated circuit (ASIC), and/or other such configurations of logical components for data processing. In some examples, the processing resource comprises a plurality of computing cores that may process/execute instructions in parallel, synchronously, concurrently, in an interleaved manner, and/or in other such instruction execution arrangements.
Example memory resources described herein may comprise various types of volatile and/or non-volatile memory. Examples of volatile memory may comprise various types of random access memory (RAM) (e.g., SRAM, DRAM, DDR SDRAM, T-RAM, Z-RAM), as well as other memory devices/modules that lose stored information when powered off. Examples of non-volatile memory (NVM) may comprise read-only memory (ROM) (e.g., Mask ROM, PROM, EPROM, EEPROM, etc.), flash memory, solid-state memory, non-volatile state RAM (nvSRAM), battery-backed static RAM, ferroelectric RAM (FRAM), magnetoresistive RAM (MRAM), phase-change memory (PCM), magnetic tape, optical drive, hard disk drive, 3D cross-point memory (3D XPoint), programmable metallization cell (PCM) memory, silicon-oxide-nitride-oxide-silicon (SONOS) memory, resistive RAM (RRAM), domain-wall memory (DWM), nano-RAM, floating junction gate RAM (FJG RAM), memristor memory, spin-transfer torque RAM (STT-RAM), as well as other memory devices/modules that maintain stored information across power cycles (e.g., off/on). Non-volatile memory that stores data across a power cycle may also be referred to as a persistent data memory.
In some examples, the non-volatile memory correspond to a class of non-volatile memory which is referred to as storage class memory (SCM). In these examples, the SCM non-volatile memory is byte-addressable, synchronous with a processing resource, and in a processing resource coherent domain. Moreover, SCM non-volatile memory may comprise types of memory having relatively higher read/write speeds as compared to other types of non-volatile memory, such as hard-drives or magnetic tape memory devices. Examples of SCM non-volatile memory include some types of flash memory, RRAM, memristors. PCM, MRAM, STT-RAM, as well as other types of higher read/write speed persistent data memory devices. As will be appreciated, due to relatively low read and write speeds of some types of non-volatile memory, such as spin-disk hard drives, NAND flash, magnetic tape drives, processing resources may not directly process instructions and data with these types of non-volatile memory. However, a processing resource may process instructions and data directly with a SCM non-volatile memory. Therefore, as will be appreciated, in examples in which a non-volatile memory is used to store a system memory, sensitive data may remain in the non-volatile memory across a power cycle.
As used herein, a memory resource may comprise one device and/or module or a combination devices and/or modules. Furthermore, a memory device/module may comprise various components. For example, a volatile memory corresponding to a dynamic random-access memory (DRAM) module may comprise a plurality of DRAM integrated circuits, a memory controller, a capacitor, and/or other such components mounted on a printed circuit board. Similarly, a non-volatile memory may comprise a plurality of memory circuits, a memory controller, and/or other such components. In examples described herein, a memory resource may comprise a combination of volatile and/or non-volatile memory modules/devices.
Turning now to the figures, and particularly to
As discussed, in examples such as the example system 100 of
Furthermore, the machine-readable storage medium 204 may be non-transitory. In some examples, the machine-readable storage medium 204 may be a compact disk, blu-ray disk, or other such types of removable media. In some examples, the processing resource 202 and machine-readable storage medium 204 may correspond to processing units and memory devices arranged in at least one server. In other examples, the processing resource 202 and machine-readable storage medium may be arranged in a system-on-a-chip device. In some examples, the processing resource 202 and machine-readable storage medium may be arranged in a portable computing device, such as laptop, smart phone, tablet computer, etc.
In addition, the machine-readable storage medium 204 may be encoded with and/or store instructions that may be executable by the processing resource 202, where execution of such instructions may cause the processing resource 202 and/or system 200 to perform the functionalities, processes, and/or sequences of operations described herein. In the example of
Moreover, the machine-readable storage medium 204 comprises instructions for a write access 214. The instructions for a write access 214 include instructions to determine whether to encrypt data sent from the processing resource prior to writing the data to the memory resource 216. Furthermore, for a write access 214, the machine-readable storage medium comprises instructions to encrypt data with the cryptography engine and write the encrypted data from the cryptography engine to the memory resource in response to determining to encrypt the data 218. In addition, for a write access 214, the machine-readable storage medium 204 comprises instructions to write data from the cryptography engine to the memory resource in response to determining to not encrypt the data 220.
While not shown in
A translation look-aside buffer may correspond to a cache specially purposed for facilitating virtual address translation. In particular the TLB stores page table entries that map virtual addresses to an intermediate addresses and/or physical memory addresses. A memory management unit 306 may search a TLB with a virtual address to determine a corresponding intermediate address and/or physical memory address. A TLB is limited in size, such that not all necessary PTEs may be stored in the TLB. Therefore, in some examples additional PTEs may be stored in other areas of memory, such as a volatile memory and/or a non-volatile memory. As will be appreciated, the TLB represents a very high-speed memory location, such that address translations performed based on data stored in a TLB will be faster than translations performed with PTEs located elsewhere.
In this example, the processing resource 302 is connected to a cryptography engine 314, and in turn, the cryptography engine 314 is connected to a memory resource 316. In this example, the memory resource 316 comprises a first memory module 318 and a second memory module 320. The first memory module 318 includes non-volatile memory 322, and the second memory module 320 includes a volatile memory module 324.
While not shown in the example, the non-volatile memory 322 may comprise a portion associated with read-only memory (ROM) and a portion associated with storage. A system memory may be stored in the volatile memory 320 and/or the non-volatile memory 322. In examples similar to the example of
As will be appreciated, the cores 304 of the processing resource 302 perform operations to implement an instruction cycle, which may also be referred to as the fetch-decode-execute cycle. As used herein, processing instructions may refer to performing the fetching, decoding, and/or execution of instructions and associated data. During the instruction cycle, the processing resource 302 decodes instructions to be executed, where the decoded instructions include memory addresses for data upon which operations of the instruction are to be performed (referred to as source operands) as well as memory addresses where results of performing such operations are to be stored (referred to as target operands). As will be appreciated, the memory addresses of decoded instructions are virtual addresses. Moreover, a virtual address may refer to a location of a virtual address space that may be assigned to a process/application. A virtual address is not directly connected to a particular memory location of a memory device (such as the volatile memory 324 or non-volatile memory 322). A virtual address space may also be referred to as a process address space. Consequently, when preparing to execute an instruction, a core 304 may communicate a virtual address to an associated MMU 306 for translation to a physical memory address such that data stored at the physical memory address 334 may be fetched for execution. A physical memory address may be directly related to a particular physical memory location (such as a particular location of the volatile memory 324 and/or non-volatile memory 322). Therefore, as shown in
The MMU 306 translates a virtual address 332 to a physical memory address 334 based on a mapping of virtual addresses to physical memory addresses that may be stored in one or more page table entries 312. As will be appreciated, in this example, the processing resource 302 includes a TLB 310 that stores page table entries 312 with which the MMU 306 may translate a virtual address. In the example implementation illustrated in
In examples similar to the example of
Turning now to
Furthermore, in some examples, for a memory access (block 602), a system may determine whether to encrypt/decrypt data based at least in part on a virtual memory address corresponding to the memory access (block 606). For example, for a first write access associated with a first virtual memory address, the system may determine to encrypt data to be written to the memory resource. As another example, for a second write access associated with a second virtual memory address, the system may determine to not encrypt data to be written to the memory resource.
In some examples, for a memory access (block 602), the system may determine whether to encrypt/decrypt data based at least in part on a process corresponding to the memory access (block 608). As discussed, examples may access physical memory locations of a memory resource when processing instructions with a processing resource. Furthermore, the instructions processed by the processing resource may correspond to at least one process that may be executing with the processing resource. In examples similar to the example of
In some examples, for a memory access (block 602), the system may determine whether to encrypt/decrypt data based at least in part on a page table entry associated with the memory access (block 610). As discussed previously, in some examples, page table entries may be implemented at the processing resource to facilitate mapping of virtual addresses to physical memory addresses. In some examples, a page table entry may further indicate whether data associated with a virtual address and/or a physical memory address is sensitive. In such examples, the page table entry associated with a particular virtual address and/or physical memory address may indicate whether data to be read from or written thereto are to be encrypted or decrypted.
As will be appreciated, in some example systems, determining whether to encrypt data for a particular write access may be based at least in part a combination of the examples provided in
As discussed previously, in some examples, the cryptography engine may determine to decrypt data stored at a physical memory address of the memory resource 704 based at least in part on the physical memory address. For example, the operating system 710 or a kernel thereof may indicate to the cryptography engine 706 that data at a particular physical memory address is encrypted, such that decryption may be performed prior to sending such data to the processing resource 702. As another example, data stored in a page table entry of a translation look-aside buffer may indicate that data of a particular virtual address is sensitive, such that the operating system 710 or a kernel thereof may indicate to the cryptography engine 706 that data associated with the particular virtual address is to be encrypted prior to writing the data to the memory resource 704. In other examples, the operating system 710 and/or a kernel thereof may directly indicate whether data is sensitive/encrypted for corresponding memory accesses based on a process for which the data is retrieved or generated.
In the example of
Therefore, examples of systems, processes, methods, and/or computer program products implemented as executable instructions stored on a non-transitory machine-readable storage medium described herein may selectively decrypt data read from a memory resource with an in-line cryptography engine prior to sending the data to a processing resource. In addition, examples may selectively encrypt data to be written to a memory resource with an in-line cryptography engine prior to writing the data to the memory resource. As will be appreciated, implementation of examples described herein may facilitate secure data storage in memory resources, where such data security may be implemented in-line with the processing resources and memory resources of a system.
In addition, while various examples are described herein, elements and/or combinations of elements may be combined and/or removed for various examples contemplated hereby. For example, the example operations provided herein in the flowcharts of
The preceding description has been presented to illustrate and describe examples of the principles described. This description is not intended to be exhaustive or to limit examples to any precise form disclosed. Many modifications and variations are possible in light of this description.
Filing Document | Filing Date | Country | Kind |
---|---|---|---|
PCT/US2016/014317 | 1/21/2016 | WO | 00 |