CN112149149A - 基于指针的数据加密 - Google Patents
基于指针的数据加密 Download PDFInfo
- Publication number
- CN112149149A CN112149149A CN202010224565.3A CN202010224565A CN112149149A CN 112149149 A CN112149149 A CN 112149149A CN 202010224565 A CN202010224565 A CN 202010224565A CN 112149149 A CN112149149 A CN 112149149A
- Authority
- CN
- China
- Prior art keywords
- address
- pointer
- memory
- bits
- data
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 230000015654 memory Effects 0.000 claims abstract description 695
- 238000000034 method Methods 0.000 claims abstract description 127
- 230000006870 function Effects 0.000 claims description 71
- 238000003860 storage Methods 0.000 claims description 26
- 230000004044 response Effects 0.000 claims description 8
- 230000008569 process Effects 0.000 description 74
- 238000010586 diagram Methods 0.000 description 61
- 239000000872 buffer Substances 0.000 description 54
- 238000004422 calculation algorithm Methods 0.000 description 39
- 239000013598 vector Substances 0.000 description 24
- 238000012545 processing Methods 0.000 description 21
- 230000008859 change Effects 0.000 description 18
- 238000004891 communication Methods 0.000 description 17
- 230000027455 binding Effects 0.000 description 13
- 238000009739 binding Methods 0.000 description 13
- 238000007667 floating Methods 0.000 description 13
- 235000019580 granularity Nutrition 0.000 description 13
- 238000005516 engineering process Methods 0.000 description 12
- 230000007246 mechanism Effects 0.000 description 9
- 238000000926 separation method Methods 0.000 description 9
- 238000013500 data storage Methods 0.000 description 8
- 230000002829 reductive effect Effects 0.000 description 8
- 230000015572 biosynthetic process Effects 0.000 description 7
- 238000013519 translation Methods 0.000 description 7
- 238000009792 diffusion process Methods 0.000 description 6
- 239000012634 fragment Substances 0.000 description 6
- 230000004048 modification Effects 0.000 description 6
- 238000012986 modification Methods 0.000 description 6
- 238000012546 transfer Methods 0.000 description 6
- 101100117236 Drosophila melanogaster speck gene Proteins 0.000 description 5
- 238000013475 authorization Methods 0.000 description 5
- 230000008676 import Effects 0.000 description 5
- 238000013459 approach Methods 0.000 description 4
- 230000008901 benefit Effects 0.000 description 4
- 238000000605 extraction Methods 0.000 description 4
- 238000013507 mapping Methods 0.000 description 4
- 230000000116 mitigating effect Effects 0.000 description 4
- 206010056508 Acquired epidermolysis bullosa Diseases 0.000 description 3
- 230000004075 alteration Effects 0.000 description 3
- 238000003491 array Methods 0.000 description 3
- 238000004364 calculation method Methods 0.000 description 3
- 238000004590 computer program Methods 0.000 description 3
- 230000001419 dependent effect Effects 0.000 description 3
- 238000013461 design Methods 0.000 description 3
- 238000001514 detection method Methods 0.000 description 3
- 230000000694 effects Effects 0.000 description 3
- 229920006245 ethylene-butyl acrylate Polymers 0.000 description 3
- 230000003993 interaction Effects 0.000 description 3
- 230000000670 limiting effect Effects 0.000 description 3
- 238000007726 management method Methods 0.000 description 3
- 238000004519 manufacturing process Methods 0.000 description 3
- 230000010387 memory retrieval Effects 0.000 description 3
- 230000009467 reduction Effects 0.000 description 3
- 239000000243 solution Substances 0.000 description 3
- 230000003068 static effect Effects 0.000 description 3
- 230000002123 temporal effect Effects 0.000 description 3
- 230000006978 adaptation Effects 0.000 description 2
- 230000006835 compression Effects 0.000 description 2
- 238000007906 compression Methods 0.000 description 2
- 230000007423 decrease Effects 0.000 description 2
- 230000003247 decreasing effect Effects 0.000 description 2
- 238000002347 injection Methods 0.000 description 2
- 239000007924 injection Substances 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 230000036961 partial effect Effects 0.000 description 2
- 230000002441 reversible effect Effects 0.000 description 2
- 238000006467 substitution reaction Methods 0.000 description 2
- 238000012795 verification Methods 0.000 description 2
- 241000282412 Homo Species 0.000 description 1
- XUIMIQQOPSSXEZ-UHFFFAOYSA-N Silicon Chemical compound [Si] XUIMIQQOPSSXEZ-UHFFFAOYSA-N 0.000 description 1
- 230000009471 action Effects 0.000 description 1
- 230000002411 adverse Effects 0.000 description 1
- 238000013473 artificial intelligence Methods 0.000 description 1
- 230000003416 augmentation Effects 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 230000033228 biological regulation Effects 0.000 description 1
- 230000001413 cellular effect Effects 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 230000000295 complement effect Effects 0.000 description 1
- 230000001010 compromised effect Effects 0.000 description 1
- 238000004883 computer application Methods 0.000 description 1
- 238000012937 correction Methods 0.000 description 1
- 238000013135 deep learning Methods 0.000 description 1
- 230000009977 dual effect Effects 0.000 description 1
- 238000002372 labelling Methods 0.000 description 1
- 239000012464 large buffer Substances 0.000 description 1
- 239000004973 liquid crystal related substance Substances 0.000 description 1
- 230000007774 longterm Effects 0.000 description 1
- 238000002156 mixing Methods 0.000 description 1
- 238000010606 normalization Methods 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
- 238000005192 partition Methods 0.000 description 1
- 230000002265 prevention Effects 0.000 description 1
- 230000008439 repair process Effects 0.000 description 1
- 230000010076 replication Effects 0.000 description 1
- 230000000717 retained effect Effects 0.000 description 1
- 239000000523 sample Substances 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 230000035945 sensitivity Effects 0.000 description 1
- 229910052710 silicon Inorganic materials 0.000 description 1
- 239000010703 silicon Substances 0.000 description 1
- 238000004088 simulation Methods 0.000 description 1
- 238000003892 spreading Methods 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
- 230000007704 transition Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/60—Protecting data
- G06F21/602—Providing cryptographic facilities or services
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0207—Addressing or allocation; Relocation with multidimensional access, e.g. row/column, matrix
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/06—Addressing a physical block of locations, e.g. base addressing, module addressing, memory dedication
- G06F12/0646—Configuration or reconfiguration
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0806—Multiuser, multiprocessor or multiprocessing cache systems
- G06F12/0811—Multiuser, multiprocessor or multiprocessing cache systems with multilevel cache hierarchies
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0875—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with dedicated cache, e.g. instruction or stack
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/14—Protection against unauthorised use of memory or access to memory
- G06F12/1408—Protection against unauthorised use of memory or access to memory by using cryptography
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/14—Protection against unauthorised use of memory or access to memory
- G06F12/1458—Protection against unauthorised use of memory or access to memory by checking the subject access rights
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/14—Protection against unauthorised use of memory or access to memory
- G06F12/1458—Protection against unauthorised use of memory or access to memory by checking the subject access rights
- G06F12/1466—Key-lock mechanism
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/10—Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
- G06F21/12—Protecting executable software
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/52—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow
- G06F21/54—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow by adding security routines or objects to programs
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/60—Protecting data
- G06F21/62—Protecting access to data via a platform, e.g. using keys or access control rules
- G06F21/6218—Protecting access to data via a platform, e.g. using keys or access control rules to a system of files or objects, e.g. local or distributed file system or database
- G06F21/6227—Protecting access to data via a platform, e.g. using keys or access control rules to a system of files or objects, e.g. local or distributed file system or database where protection concerns the structure of data, e.g. records, types, queries
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/60—Protecting data
- G06F21/64—Protecting data integrity, e.g. using checksums, certificates or signatures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/70—Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer
- G06F21/71—Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure computing or processing of information
- G06F21/72—Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure computing or processing of information in cryptographic circuits
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/70—Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer
- G06F21/78—Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure storage of data
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/70—Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer
- G06F21/78—Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure storage of data
- G06F21/79—Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure storage of data in semiconductor storage media, e.g. directly-addressable memories
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/3004—Arrangements for executing specific machine instructions to perform operations on memory
- G06F9/30043—LOAD or STORE instructions; Clear instruction
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
- G06F9/30101—Special purpose registers
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/3017—Runtime instruction translation, e.g. macros
- G06F9/30178—Runtime instruction translation, e.g. macros of compressed or encrypted instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/32—Address formation of the next instruction, e.g. by incrementing the instruction counter
- G06F9/321—Program or instruction counter, e.g. incrementing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5016—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/06—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols the encryption apparatus using shift registers or memories for block-wise or stream coding, e.g. DES systems or RC4; Hash functions; Pseudorandom sequence generators
- H04L9/0618—Block ciphers, i.e. encrypting groups of characters of a plain text message using fixed encryption transformation
- H04L9/0631—Substitution permutation network [SPN], i.e. cipher composed of a number of stages or rounds each involving linear and nonlinear transformations, e.g. AES algorithms
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/06—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols the encryption apparatus using shift registers or memories for block-wise or stream coding, e.g. DES systems or RC4; Hash functions; Pseudorandom sequence generators
- H04L9/0618—Block ciphers, i.e. encrypting groups of characters of a plain text message using fixed encryption transformation
- H04L9/0637—Modes of operation, e.g. cipher block chaining [CBC], electronic codebook [ECB] or Galois/counter mode [GCM]
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/08—Key distribution or management, e.g. generation, sharing or updating, of cryptographic keys or passwords
- H04L9/0816—Key establishment, i.e. cryptographic processes or cryptographic protocols whereby a shared secret becomes available to two or more parties, for subsequent use
- H04L9/0819—Key transport or distribution, i.e. key establishment techniques where one party creates or otherwise obtains a secret value, and securely transfers it to the other(s)
- H04L9/0822—Key transport or distribution, i.e. key establishment techniques where one party creates or otherwise obtains a secret value, and securely transfers it to the other(s) using key encryption key
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/08—Key distribution or management, e.g. generation, sharing or updating, of cryptographic keys or passwords
- H04L9/0816—Key establishment, i.e. cryptographic processes or cryptographic protocols whereby a shared secret becomes available to two or more parties, for subsequent use
- H04L9/0819—Key transport or distribution, i.e. key establishment techniques where one party creates or otherwise obtains a secret value, and securely transfers it to the other(s)
- H04L9/083—Key transport or distribution, i.e. key establishment techniques where one party creates or otherwise obtains a secret value, and securely transfers it to the other(s) involving central third party, e.g. key distribution center [KDC] or trusted third party [TTP]
- H04L9/0833—Key transport or distribution, i.e. key establishment techniques where one party creates or otherwise obtains a secret value, and securely transfers it to the other(s) involving central third party, e.g. key distribution center [KDC] or trusted third party [TTP] involving conference or group key
- H04L9/0836—Key transport or distribution, i.e. key establishment techniques where one party creates or otherwise obtains a secret value, and securely transfers it to the other(s) involving central third party, e.g. key distribution center [KDC] or trusted third party [TTP] involving conference or group key using tree structure or hierarchical structure
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/08—Key distribution or management, e.g. generation, sharing or updating, of cryptographic keys or passwords
- H04L9/0861—Generation of secret information including derivation or calculation of cryptographic keys or passwords
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/08—Key distribution or management, e.g. generation, sharing or updating, of cryptographic keys or passwords
- H04L9/0861—Generation of secret information including derivation or calculation of cryptographic keys or passwords
- H04L9/0869—Generation of secret information including derivation or calculation of cryptographic keys or passwords involving random numbers or seeds
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/08—Key distribution or management, e.g. generation, sharing or updating, of cryptographic keys or passwords
- H04L9/0894—Escrow, recovery or storing of secret information, e.g. secret key escrow or cryptographic key storage
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/14—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols using a plurality of keys or algorithms
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/32—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/32—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials
- H04L9/3236—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials using cryptographic hash functions
- H04L9/3242—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials using cryptographic hash functions involving keyed hash functions, e.g. message authentication codes [MACs], CBC-MAC or HMAC
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0893—Caches characterised by their organisation or structure
- G06F12/0897—Caches characterised by their organisation or structure with two or more cache hierarchy levels
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
- G06F2009/45587—Isolation or security of virtual machine instances
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/55—Detecting local intrusion or implementing counter-measures
- G06F21/556—Detecting local intrusion or implementing counter-measures involving covert channels, i.e. data leakage between processes
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/10—Providing a specific technical effect
- G06F2212/1032—Reliability improvement, data loss prevention, degraded operation etc
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/10—Providing a specific technical effect
- G06F2212/1041—Resource optimization
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/10—Providing a specific technical effect
- G06F2212/1052—Security improvement
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/40—Specific encoding of data in memory or cache
- G06F2212/402—Encrypted data
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2221/00—Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F2221/21—Indexing scheme relating to G06F21/00 and subgroups addressing additional information or applications relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F2221/2107—File encryption
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L2209/00—Additional information or applications relating to cryptographic mechanisms or cryptographic arrangements for secret or secure communication H04L9/00
- H04L2209/12—Details relating to cryptographic hardware or logic circuitry
- H04L2209/125—Parallelization or pipelining, e.g. for accelerating processing of cryptographic operations
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Computer Hardware Design (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Health & Medical Sciences (AREA)
- Bioethics (AREA)
- General Health & Medical Sciences (AREA)
- Mathematical Physics (AREA)
- Databases & Information Systems (AREA)
- Multimedia (AREA)
- Technology Law (AREA)
- Power Engineering (AREA)
- Storage Device Security (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
本文公开的技术提供密码计算。示例方法包括在寄存器中存储指向存储器位置的编码指针,其中第一上下文信息存储在编码指针的第一位中并且存储器位置的存储器地址片被加密且存储在编码指针的第二位中。方法进一步包括对编码指针解码来获得存储器位置的存储器地址、使用通过对编码指针解码而获得的存储器地址来访问存储器位置处的加密数据、以及基于第一密钥和第一调整值对加密数据解密。第一调整值包括至少部分从编码指针导出的一个或多个位。
Description
相关申请的交叉引用
该申请根据35 U.S.C §119要求2019年6月29日提交并且题为“CryptographicComputing(密码计算)”的美国临时申请No. 62/868,884的优先权。在先申请的公开视为该申请的公开的一部分并且通过引用而完全并入该申请的公开中。
技术领域
本公开一般涉及计算机系统的领域,更特定地,涉及基于指针的数据加密。
背景技术
保护计算机系统中的存储器免于软件缺陷和安全漏洞是重大问题。当程序将数据写到缓冲区并且超出缓冲区边界以使得相邻存储器位置被改写时,能够影响存储器安全性的缓冲区溢出发生。类似地,越过缓冲区的末端对另一个页中的读取可触发访问违规或错误。另一个存储器安全违规称作悬空指针。悬空指针是未经解析的对有效目的地的引用。这在存储器被解除分配而没有修改对已解除分配(或释放)存储器的现有指针的值时可发生。如果系统重新分配已释放存储器,并且悬空指针用来访问已重新分配存储器,则不可预测行为(包括系统故障)可发生。当前计算技术使用架构和元数据来提供数据保护。例如,在先前解决方案中,处理器使用查找表对于与所有权、存储器大小、位置、类型、版本等的数据有关的策略或数据进行编码。但是,这个元数据要求附加存储(存储器开销),并且不利地影响性能,特别是对于采用细粒度元数据的实现。因此,需要不同方式对计算系统提供存储器安全性。
附图说明
为了提供对本公开及其特征和优点的更全面了解,结合附图参照以下的描述,其中相似参考标号表示相似部件,附图中:
图1是根据本公开的至少一个实施例配置有安全存储器访问逻辑的示例计算装置的简化框图;
图2是图示根据本公开的一个实施例的图1的安全存储器访问逻辑的应用的简化环境图;
图3A是图示根据至少一个实施例的存储器检索指令逻辑的应用的简化序列图;
图3B是图示根据至少一个实施例的存储器存储指令逻辑的应用的简化序列图;
图4是用于为如本文公开的间接地址提供安全性的过程的至少一个实施例的简化流程图,该过程可以被图1的计算装置执行;
图5是用于检验如本文公开的之前受保护的间接地址的过程的至少一个实施例的简化流程图,该过程可以被图1的计算装置执行;
图6是根据本公开的至少一个实施例的示例指针的图;
图7A-7D是根据至少一个实施例通过图形表示对图6的指针中的各种示例大小编码的空间分配的图;
图8是根据至少一个实施例用于对通过密码编码的指针解密来产生线性地址的环境的图;
图9是根据至少一个实施例试图使用通过密码编码的指针来访问存储器的示例敌手的图;
图10是根据至少一个实施例试图使用通过密码编码的指针来访问存储器的另一个示例敌手的图;
图11是根据至少一个实施例可以用于加密和解密的带密文窃取的基于XEX的调整码本模式(XTS)块密码的框图;
图12是根据至少一个实施例可以用于加密和解密的高级加密标准(AES)计数器模式块密码的框图;
图13是图示根据至少一个实施例访问通过密码编码的指针所引用的存储器位置处的加密数据的可能并行处理的流程图;
图14是图示根据至少一个实施例将通过密码编码的指针的实施例绑定到该指针所引用的数据的加密的示例过程的简化流程图;
图15是图示根据至少一个实施例将通过密码编码的指针绑定到该指针所引用的数据的加密的示例过程的流程图;
图16是根据本公开的至少一个实施例的另一个示例指针的图;
图17是根据本公开的至少一个实施例的上下文信息的示例的图;
图18A-18B是图示根据至少一个实施例将另一个通过密码编码的指针绑定到该指针所引用的数据的加密的示例过程的流程图;
图19是根据至少一个实施例与被绑定到数据加密的通过密码编码的指针相关联的示例过程的流程图;
图20是根据至少一个实施例使用通过密码编码的指针来访问存储器的示例过程的简化流程图;
图21是根据至少一个实施例分配存储器并且对指向所分配存储器的指针编码的示例过程的流程图;
图22是根据至少一个实施例可以与对指针加密相关联的一个或多个可能操作的流程图;
图23是根据至少一个实施例可以与对指针解密相关联的一个或多个可能操作的流程图;
图24是图示根据至少一个实施例将又一个通过密码编码的指针绑定到该指针所引用的数据的加密的示例过程的流程图;
图25是根据至少一个实施例可以与对指针编码相关联的一个或多个可能操作的流程图;
图26是图示根据至少一个实施例的示例密码计算环境的框图;
图27是图示根据至少一个实施例的示例处理器核和存储器的框图;以及
图28A是图示根据某些实施例的示范性有序流水线和示范性寄存器重命名、无序发出/执行流水线这两者的框图;
图28B是图示根据某些实施例待包括在处理器中的有序架构核的示范性实施例和示范性寄存器重命名、无序发出/执行架构核这两者的框图;
图29是根据至少一个实施例的示例计算机架构的框图;以及
图30是根据本公开的实施例与用于将源指令集中的二进制指令转换为目标指令集中的二进制指令的软件指令转换器的使用形成对照的框图。
具体实施方式
下面的公开提供用于密码计算的实现的各种可能实施例或示例。密码计算是计算工业中的重要趋势,其中计算本身的根基成为基本密码。密码计算表示对工业具有广泛影响的系统安全性的巨大转变、根本反思。
在该申请中公开的实施例涉及基于指针的数据加密,其中用标签和/或其他元数据对指向数据的存储器位置的指针编码并且该指针可以用于导出对数据密码(例如,加密和解密)算法的输入调整(tweak)的至少一部分。因此,在密码寻址层与数据/代码加密和解密之间创建密码绑定。这隐式地加强了界限,因为偏离对象(例如,数据)末端的指针可能对该相邻对象使用不正确的标签值。在一个或多个实施例中,用指向存储器位置的线性地址(在本文也称为“存储器地址”)和元数据来对指针编码。指针中一片或一段地址包括多个位并且基于秘密地址密钥和包括元数据的调整来加密(和解密)。参考一些实施例,指针中的存储器地址的该加密片在本文也称为“密文”。绑定数据加密和指针可以通过使用基于指针的调整和秘密数据密钥对存储器位置处的数据加密来实现。用于对数据加密(和解密)的基于指针的调整可以从编码指针以及潜在额外上下文信息导出。特别地,对于数据的基于指针的调整可以至少部分基于编码指针中的加密地址片(例如,密文)和编码指针中的元数据来创建。在其他实施例中,可以对存储器地址解密和解码来创建调整,以用于对数据加密/解密。在至少一些实施例中,调整中还可以包括与指针分开存储的上下文信息。
在一个或多个实施例中,用于对嵌入指针中的存储器地址片加密和解密的不同调整可能有变化。例如,不同和/或额外的上下文信息(诸如各种类型的元数据、密码上下文标识符、明文存储器地址的部分或其任何适合的组合)可以在用于对指针中的存储器地址片加密/解密的调整中使用。相似地,用于对编码指针所引用的数据加密和解密的调整也可能有变化。在其他实施例中,编码指针的额外部分可以在基于指针的调整中使用或整个编码指针可以用作基于指针的调整。此外,在至少一些实施例中,在用于对编码指针所引用的数据加密/解密的调整中还可以使用不同和/或额外的上下文信息,诸如元数据、密码上下文标识符、明文地址片或其任何适合的组合。
为了说明基于指针的数据加密的若干实施例,重要的是要首先理解与数据保护和存储器安全相关联的操作和活动。因此,下列基本信息可以视为可以正确解释本公开的基础。
当前的计算技术(例如,用于过程/内核分离的页表、虚拟机管理器、管理运行时等)使用架构和元数据来提供数据保护。例如,在之前的技术方案中,处理器将使用查找表来对关于所有者、存储器大小、位置、类型、版本等的数据的策略或数据编码。动态存储和加载元数据需要额外存储(存储器开销)并且影响性能,特别是对于细粒度元数据(诸如函数即服务(FaaS)工作负载或对象界限信息)更是如此。
密码计算可以解决许多前面提到的问题(以及更多)。密码计算可以利用全新细粒度保护模型使过程分离、用户空间和内核的遗留模式冗余。利用密码计算,保护是用密码的,其中处理器和加速器都利用秘密密钥和密码而以越来越细的粒度提供访问控制和分离。此外,代替当前系统中的虚拟机和过程分离,利用密码计算,个体函数可能变成边界,从而允许经由被加密的指针共享地址空间,其中经加密的指针和密钥对个体数据对象向下提供受控访问。
本文公开的密码计算实施例可以利用密码寻址层的概念,其中处理器基于隐式和显式元数据(例如,上下文信息、密码上下文标识符,等)和/或存储器地址片本身(例如,作为对可调块密码(例如,带密文窃取的基于XOR-加密-XOR的调整码本模式(XTS))的调整)对软件分配的存储器地址(线性/虚拟地址空间,有时称为“指针”)解密。如本文使用的,除通用明文或密文输入和密钥(例如,秘密密钥116(1))外,“调整”还可以指到块密码的额外输入,以及其他。调整包括表示值的一个或多个位。在一个或多个实施例中,调整可以组成块密码的初始化向量(IV)中的全部或部分。在执行地址解密时,如果用于创建调整的信息(例如,隐式和显式元数据、存储器地址的明文地址片,等)对应于通过存储器分配器的存储器地址的初始分配(例如,软件分配方法),则处理器可以正确地对地址解密。否则,随机地址结果将造成错误并且被处理器捕获。这些密码地址(或地址片)可以进一步被处理器用作对数据加密密码的调整,该数据加密密码用于对它们所指的数据(通过密码编码的指针所引用的数据)加密/解密,从而在密码寻址层与数据/代码加密之间创建密码绑定。应注意用作到块密码的输入来对存储器地址加密/解密的调整在本文也称为“地址调整”。相似地,用作到块密码的输入来对数据加密/解密的调整在本文也称为“数据调整”。
通过密码将元数据编码为地址以及它们所引用的数据,密码计算可以减少或消除对用于提供策略和上下文信息/元数据的附加独立存储器/存储的需要。由于只有元数据减少,这在计算行业中可以节省多达数十亿美元(例如,在动态随机存取存储器(DRAM)费用中)。客户在存储器成本中可以获得这些节省同时仍然得到它们利用密码计算所想要的安全性、安全和无错功能性。通过允许有安全推测,密码计算的基本密码分离策略可以允许处理器自由推测并且提供增加的性能。
在其中数据安全性基本上与密码存储器寻址联系起来的密码计算中,对数据的处理以及细粒度密码访问控制是重要的。密码计算变换所有从CPU到GPU、加速器到FPGA等的计算向量。利用密码计算,保护可以用密码,其中处理器和加速器都利用秘密密钥和密码以在越来越细的粒度提供访问控制和分离。此外,代替虚拟机和过程分离,个体函数可以变成边界,地址空间被共享而指针被加密,其中密钥对个体数据对象向下提供受控访问。能力因此可以与密码操作密切相关来对数据对象提供粒度访问控制,同时在系统的每个级别处防止缓冲区溢出、类型混淆和时间(例如,释放后使用)漏洞。密码代码可以本机安全地执行,并且不需要解译器或受管运行时来提供存储器和类型安全。存储器可以从隔离域和容器移向全局共享存储器模型,其中数据基于密码访问控制机制而可访问并且难以扩展的分布式准许、分页和相关联控制结构不复存在。甚至文件可以被直接安全地存储在存储器中(例如,在非易失性存储器模块中,诸如非易失性双内联存储器模块(NVDIMM)),从而被单独加密、通过密码确定大小并且不易受软件错误的影响。这可能对功能安全、可靠性和多租户也有启发,从而潜在地允许有更多推测来提高处理性能。
密码技术继续变得更快且更轻。例如,使用128位块密码的高级加密标准(AES)几十年来是数据加密的主流。同时,存储器寻址现今典型地是64个位。尽管本文的实施例可以参考64部计算机的64位存储器寻址来说明和解释,但所公开的实施例不意在这样受限并且可以容易适应于容纳32个位、128个位或指针的任何其他可用位大小。同样,本文的实施例可以进一步适应于容纳各种大小的块密码(例如,64位、48位、32位、16位等,使用Simon、Speck、可调K密码、PRINCE或任何其他块密码)。
近来出现适合于指针加密的轻量级密码。PRINCE密码例如可以在10nm工艺中需要少至799μm2面积的3个时钟内实现,从而在十分之一的硅面积中提供一半的AES时延。密码计算可以利用这些新的密码,以及其他,从而引入新颖的计算机架构概念,其包括但不限于:(i)密码寻址,即,处理器处的数据指针的加密使用关于所引用数据(例如,嵌入指针的元数据和/或外部元数据)、地址片本身或其任何适合的组合的上下文信息作为调整;以及(ii)核处数据本身的加密,使用通过密码编码的指针或其部分、非密码编码指针或其(一个或多个)部分、关于引用数据的上下文信息或其任何适合的组合作为调整,用于数据加密。可调的多种加密模式可以用于该包括元数据的用途(例如,计数器模式(CTR)和带密文窃取的基于XOR-加密-XOR(XEX)的调整码本模式(XTS))。加密除提供数据机密性外,它的隐式完整性可以允许处理器确定数据是否使用正确的密钥流和调整来正确解密。在一些块密码加密模式中,块密码创建密钥流,其然后与输入块组合(例如,使用XOR操作)来产生加密或解密块。在一些块密码中,密钥流被馈送到下一个块密码内来执行加密或解密。
“元数据墙”可以指另外提取关于存储器操作的元数据的问题,该元数据诸如访问控制、对象类型/大小和版本。现今的计算机架构需要处理器查找元数据,或关于数据的数据,来确定存储器访问是否得到允许。对于元数据的额外存储器访问可能影响性能,从而需要针对元数据的额外存储,并且元数据本身需要得到保护以便提供安全性。采用硬件将用于检测缓冲区溢出的界表形式增加元数据的一些当前技术方案已显示出对于一些工作负载的400%存储器开销具有多达4X性能影响。相似地,影子堆栈元数据启用控制流强制技术,并且存储器标签化使用元数据以用于版本化,并且能力增加元数据用于检验数据类型。存储器标签化不适合于减轻类型混乱以及防止未被初始化的使用变量。另外,尽管存储器标签化的开销可以使用纠错码位而减少,但它可能需要额外装置,这可能增加成本。能力机器还可以使用宽指针来嵌入与指针内联的安全性元数据,从而由于指针大小加倍而施加大量存储器开销(例如,在指针重应用中是25%)。
相比之下,密码计算可以向密码寻址和数据、密码寻址和代码或其组合提供被编码为调整的元数据,从而消除了包含这样的数据所导致的潜在性能和存储器开销。所得的密文可能不需要除秘密密钥以外的额外保护,从而允许重新使用与数据相同的存储器。如在本文进一步论述的,密码计算可以使用计算而不是存储器来解决相同的统一机制的大量漏洞。
图1是根据本公开的至少一个实施例配置有安全存储器访问逻辑的示例计算装置100的简化框图。在示出的示例中,计算装置100包括处理器102,其具有安全存储器访问逻辑150的集和许多寄存器112。该安全存储器访问逻辑150利用关于间接地址114的元数据,其被编码为该间接地址114的未用位(例如,64位地址的非规范位,或预留的地址范围,例如被操作系统预留,使得对应的地址范围的高价位可以用于存储元数据),以便确保对间接地址114所指向的存储器位置的访问安全和/或对这些存储器位置提供访问控制。例如,安全存储器访问逻辑150提供的元数据编码和解密可以防止间接地址114被操纵而导致缓冲区溢出,和/或可以防止程序代码访问它没有准许访问的存储器。当分配存储器(例如,由操作系统在堆中分配)并且采用许多不同方式中的任一个将它提供给执行程序时调用安全存储器访问逻辑150的地址编码逻辑152,这些许多不同方式包括通过使用malloc、alloc或new等函数;或隐式地经由加载器,或由编译器静态分配存储器,等。因此,指向所分配存储器的间接地址114用地址元数据来编码。
地址元数据可以包括有效范围元数据。该有效范围元数据允许执行程序在有效范围内操纵间接地址114的值,但如果使用有效范围之外的间接地址114访问存储器则将破坏间接地址114。备选地或另外,有效范围元数据可以用于识别有效代码范围,例如准许访问程序代码的存储器范围(例如,编码的范围信息可以用于在寄存器上设置显式范围)。可以在地址元数据中编码的其他信息包括对间接地址114的访问(或准许)限制(例如,间接地址114是否可以用于写、执行或读取所引用的存储器)。
在本文将进一步描述的至少一些其他实施例中,其他元数据(或上下文信息)可以在间接地址114的未用位中编码,诸如明文地址片的大小(例如,嵌入间接地址中的存储器地址的明文片中位的数量)、存储器分配大小(例如,间接地址所引用的已分配存储器的字节)、数据或代码的类型(例如,编程语言所定义的数据或代码的类)、准许(例如,间接地址的读、写和执行准许)、数据或代码的位置(例如,存储数据或代码的地方)、要存储指针本身的存储器位置、数据或代码的所有权、间接地址的版本(例如,每当为新分配的存储器创建间接地址时递增的序列号适时确定所引用的已分配存储器的当前所有权)、随机化位的标签(例如,针对与间接地址的关联性而产生的)、特许级别(例如,用户或超级用户(supervisor))、密码上下文标识符(或密码上下文ID)(例如,对每个间接地址随机化或确定唯一的值),等。例如,在一个实施例中,地址元数据可以包括大小元数据,其对间接地址中的明文地址片的大小编码。大小元数据可以规定间接地址中可以被执行程序修改的最低阶位的数量。大小元数据依赖于程序所请求的存储器的量。因此,如果请求16个字节,则大小元数据被编码为4(或在指针的五个高位中是00100)并且指针的4个最低位被指定为可修改位以允许对所请求的16个字节的存储器寻址。在一些实施例中,地址元数据可以包括与间接地址相关联的随机化位的标签,从而让敌手无法预测该标签。敌手可能尝试猜测标签值使得该敌手能够访问指针所引用的存储器,并且与用于生成标签值的确定性方法相比,使标签值随机化可以使得敌手不太可能成功猜出值。在一些实施例中,代替随机化标签值或除随机化标签值之外,指针还可以包括版本号(或其他确定不同的值),从而适时确定所引用的已分配数据的当前所有权。即使敌手能够猜出一个存储器区的当前标签值或版本号,例如因为用于生成版本号的算法是可预测的,但由于敌手没有获得以后将用于对指针的对应加密部分解密的密钥,敌手因此可能仍然不能正确地生成指针的那部分。
地址解码逻辑162检验关于存储器读和写操作以及牵涉“使用”存储器的其他操作(诸如具有存储器操作数的算术指令,例如ADD,和控制转移指令,例如CALL/JMP等)的编码元数据,这些读和写操作利用处理器指令,诸如MOV,其中通用寄存器用作存储器地址用以从存储器读取值(例如,加载)或将值写入存储器(例如,存储)。这些是所考虑的存储器操作数,其可以规定存储器中存储控制转移的目的地址的位置。示例安全存储器访问逻辑150体现为处理器指令的部分(例如,体现为处理器指令集架构的部分),或微代码(例如,被存储在只读存储器中并且由处理器102直接执行的指令)。在其他实施例中,安全存储器访问逻辑150的部分可以体现为硬件、固件或其组合(例如,体现为计算装置100的特许系统组件142所执行的编程代码)。例如,安全存储器访问逻辑150可以被包含在软件中作为指令集仿真器(例如,二进制探测工具,诸如PIN工具),其利用如本文公开的编码地址来仿真指令逻辑。
安全存储器访问逻辑150由计算装置100可执行来为间接地址“内联”提供安全性,例如在计算装置100执行程序(诸如用户空间软件应用)期间。如本文使用的,术语“间接地址”和“指针”每个可以指存储其他数据或指令的存储器位置的地址(例如,虚拟地址或线性地址),以及其他。在示例中,存储其中存储代码或数据的存储器位置的编码存储器地址的寄存器可以充当指针。如此,间接地址114可以体现为例如数据指针(其指数据位置)、代码指针(其指可执行代码的位置)、指令指针或栈指针。间接地址可以被其他术语引用,诸如“指针”、“地址指针”或“指针地址”。如本文使用的,“元数据”可以指关于或涉及间接地址114的信息以及其他,诸如有效数据范围、有效代码范围、指针访问准许、明文地址片的大小(例如,编码为幂(以位计))、存储器分配大小、数据或代码的类型、数据或代码的位置、数据或代码的所有权、间接地址的版本、随机化位的标签、版本、软件的特许级别、密码上下文标识符,等。
如本文使用的,“存储器检索指令”可以指“MOV”或“LOAD”指令或导致数据在一个存储位置(例如,存储器)被读取、复制或另外被访问并且移入另一个存储位置(例如寄存器(其中“存储器”可以指主存储器或高速缓存,例如随机存取存储器的形式,并且“寄存器”可以指处理器寄存器,例如硬件))或访问或操纵存储器的任何其他指令,以及其他。同样如本文使用的,“存储器存储指令”可以指“MOV”或“STORE”指令或导致数据在一个存储位置(例如,寄存器)处被读取、复制或另外被访问并且移入另一个存储位置(例如存储器)的任何其他指令,或访问或操纵存储器的任何指令。
然而,本文公开的间接地址编码/解码技术不限于MOV和/或加载/存储(load/store)指令。例如,诸如调用(call)和跳转(jump)指令等控制转移指令可以适应于采用与在本文关于MOV指令描述的相似的方式处理编码间接地址,其中代码在有效地址范围内执行。同样,考虑到控制转移指令(例如JMP/CALL)所规定的编码地址导致编码地址用于指令指针,从而将有效程序执行限制在有效地址范围内(程序计数器可以有效地正确递增直到它达到编码范围的末端),指令指针(例如,寄存器)可以是范围界限。此外,在一些架构中,任何数量的处理器指令可以具有采用间接地址形式的存储器操作数(例如,诸如ADD、SUB、MUL、AND、OR、XOR等算术操作可以具有采用间接地址和/或源/目的寄存器操作数形式的源/目的存储器引用)。然而,在其他架构中,存储器操作数的格式可以变化。例如,寄存器可以采用某一方式(例如,通过加法)组合来产生有效地址。另外,可以可选地包括其他参数,诸如标度因子,其乘以寄存器值(例如,索引)和/或嵌入被直接添加的指令中的恒定移位值中的一个。此外,应注意尽管说明性实施例指“指令”,但这样的指令可以体现为例如处理器指令、操作系统例程或其他形式的计算机程序代码。
示例安全存储器访问逻辑150包括地址编码逻辑152(其包括元数据编码逻辑156和地址加密逻辑158)、存储器存储指令逻辑170(其包括数据加密逻辑174和地址解码逻辑162)和存储器检索指令逻辑180(其包括数据解密逻辑184和地址解码逻辑162)。通过说明,地址解码逻辑162(其包括地址解密逻辑164和地址形成逻辑166)被包含在存储器存储指令逻辑170和存储器检索指令逻辑180中,但可以包含在其他处理器指令中,或作为独立指令或指令系列,或作为特许系统组件(诸如操作系统内核或虚拟机监视器)执行的高级代码,或作为指令集仿真器。如在下文更详细描述的,地址编码逻辑152和地址解码逻辑162每个使用元数据(例如,有效范围、准许元数据、大小(幂)、存储器分配大小、类型、位置、所有权、版本、标签值、特许级别(例如,用户或超级用户)、密码上下文ID等中的一个或多个)和秘密密钥(例如,秘密密钥116(1))对间接地址114进行操作,以便在存储器分配/访问级别确保间接地址114安全。同样如在下文更详细描述的,数据加密逻辑174和数据解密逻辑184每个使用间接地址和秘密密钥(例如,秘密密钥116(2))的至少一部分来对数据(间接地址114所引用的)进行操作,以便通过将数据加密绑定到间接地址而确保间接地址114所引用的存储器位置处的数据安全。
示例间接地址114体现为寄存器112(例如,处理器102的通用寄存器)。示例秘密密钥116(1)-116(N)可以由特许系统组件142的密钥创建模块148生成,并且存储在寄存器112(例如,专用寄存器或机器特定寄存器(MSR))中的一个中,或存储在处理器102可读的另一个存储器位置中。在一些实施例中,秘密密钥116(1)-116(N)可以存储在仅处理器可读的位置中。在其他实施例中,用于确保间接地址、数据和代码安全的秘密密钥116(1)-116(N)可以存储在另一个存储器位置中,诸如在固件中、在数据存储装置126或另一个数据存储装置的安全部分中或适合于执行本文描述的功能的另一个形式的存储器。在一些实施例中,秘密密钥116(1)-116(N)可以跨安全通信信道传送并且被执行程序(诸如操作系统或虚拟机监视器,例如下文描述的特许系统组件142)恢复。在其中虚拟机从一个机器迁移到另一个的虚拟环境中,和/或在其中在计算装置100上运行的虚拟机、过程或程序在使用秘密密钥确保间接地址和所引用的数据和/或代码安全之后开始睡眠/休眠且后来恢复的情况下,秘密密钥将需要复原和恢复。在这些情况下,在睡眠/休眠模式之前,秘密密钥可以被存储或可能跨(安全)通信信道而传送,并且然后被执行程序(诸如操作系统或虚拟机监视器,例如特许系统组件142)检索/恢复。
应注意本文描述的实施例允许有任意数量的秘密密钥用于特定程序。在一个示例中,相同的秘密密钥可以用于程序中使用的所有间接地址。在另一个示例中,可以对与不同存储器分配相关联的每个间接地址或对与不同存储器分配相关联的每个预定义组的存储器地址使用不同的秘密密钥。在再另外的实施例中,用于地址加密/解密的相同的秘密密钥也可以用于对绑定到该地址的数据加密。在其他实施例中,一个秘密密钥可以用于地址加密/解密,而不同的秘密密钥可以用于被绑定到该地址的数据加密/解密。为了便于解释,本文进一步描述的实施例指“秘密地址密钥”或“地址密钥”,用于指在存储器地址的加密和解密操作中秘密密钥的使用;以及指“秘密数据密钥”或“数据密钥”,用于指在对数据加密和解密的操作中秘密密钥的使用。
在存储器分配操作(例如,“malloc”)时(或期间),存储器分配逻辑146为缓冲区分配存储器范围并且返回间接地址114和元数据(例如,范围、准许元数据、大小(幂)、存储器分配大小、类型、位置、所有权、版本、标签、特许级别、密码上下文ID等中的一个或多个)。例如,存储器分配逻辑146可以对间接地址114中的明文范围信息(例如,在加密之前,在未用/非规范位中)编码,或向指令供应元数据作为一个或多个独立参数,其中(一个或多个)参数规定范围、代码准许信息、大小(幂)、存储器分配大小、类型、位置、所有权、版本、标签、特许级别(例如,用户或超级用户)、密码上下文ID或其某一适合的组合。通过说明,存储器分配逻辑146被包含在特许系统组件142的存储器管理模块144中。存储器分配逻辑146发起地址编码逻辑152。地址编码逻辑152包括元数据编码逻辑156,其用元数据(例如,范围、准许元数据、大小(幂)、存储器分配大小、类型、位置、所有权、版本、标签值、特许级别、密码上下文ID、其某一适合的组合,等)以及例如如果如下文描述的那样对范围元数据编码则潜在地用“调节”对间接地址114编码。地址编码逻辑152将元数据存储在间接地址114的未用部分(例如,64位地址的非规范位)中。对于一些元数据或元数据的组合,间接地址114可以在更大的地址空间(例如,128位地址、256位地址)中编码来容纳元数据或元数据组合的大小。
为了确定有效范围元数据,示例范围规则逻辑选择有效范围元数据来指示间接地址114所引用的缓冲区的大小的上限。地址调节逻辑根据需要调节有效范围元数据使得只要间接地址114指在范围元数据所指示的有效范围内的存储器位置,地址范围中的地址的高地址位(例如,最高有效位)就不改变。这使得能够操纵间接地址114(例如,由执行算术操作的软件,等)而且只要操纵没有导致间接地址114超出有效范围(例如,溢出缓冲区)即可。
在实施例中,地址编码逻辑152使用有效范围元数据来选择待加密的间接地址114的部分(或片)。在其他实施例中,待加密的间接地址114的片可以是先验已知的(例如,高32个位、低32个位,等)。如在下文进一步描述的,地址加密逻辑158使用秘密地址密钥116(1)和地址调整来对间接地址114的所选片(以及在一些实施例中对调节)加密。在存储器访问操作(例如,读、写或执行操作)时,地址解码逻辑162对之前编码的间接地址114解码。为此,如在下文进一步描述的,地址解密逻辑164使用秘密密钥116(1)和地址调整来对间接地址114的加密片(以及在一些实施例中,对加密调节)解密。
间接地址114基于适当操作(例如,地址形成逻辑166)返回到它的初始(例如,规范)形式以便复原间接地址114的初始值(例如,真的初始线性存储器地址)。为此在至少一个可能的实施例中,地址形成逻辑166可以去除间接地址114的未用位中编码的地址元数据,例如使未用位返回它们的初始形式。如果间接地址114成功解码,则存储器访问操作成功完成。然而,如果编码间接地址114已被操纵(例如,被软件无意或被攻击者操纵)使得它的值落在范围元数据所指示的有效范围外(例如,溢出缓冲区),则间接地址114将由于地址解密逻辑164所执行的解密过程而被破坏。被破坏的间接地址将引发错误(例如,一般性保护错误或如果地址未被映射为从分页结构/页表出现则为页错误)。可以导致错误生成的一个条件是稀疏地址空间。在该场景中,被破坏的地址可能着陆在未映射页上并且生成页故障。这样,安全存储器访问逻辑150使计算装置100能够针对缓冲区溢出攻击和类似的利用提供间接地址安全性。本文公开的间接地址安全性技术的实施例也可以用于软件调试目的,或用作访问控制机制,用于防止软件访问该软件没有准许的存储器区域。另外,与其他缓冲区溢出减轻技术相比,所公开的间接地址安全性技术的实施例可以操作而没有任何额外存储器读/写,或没有任何额外指令,或没有任何二进制修改,或不需要重新编译遗留代码。此外,所公开的技术的实施例对可以读取存储器并且改写指针值的敌手以及可以创建/选择任意指针值的敌手做出响应。此外,所公开的技术的实施例可以从非常小的存储器范围扩展到非常大的存储器范围,或可以通过使用不同的编码指针来使其他存储器范围内的存储器范围级联。再进一步,所公开的技术的实施例对于动态存储器分配(例如,由于能够通过编程创建范围编码指针内联)是有效的。另外,所公开的技术的实施例可以扩展来向数据提供码块(代码位置)访问控制。此外,所公开的技术的实施例与x86指令集的64位版本以及ARM、MIPS、PowerPC和通过为包含地址的元数据保留地址范围而包括更宽(例如,大于64位)地址位架构和更小(例如32位)架构的其他处理器架构兼容。
所公开的技术的一些实施例利用地址调节逻辑和地址复原逻辑的方面来支持遗留代码兼容性,如下文描述的。如本文使用的,“遗留代码”可以指被设计成在早期或现在已过时或不再支持的计算机架构上工作的计算机代码的版本。例如,遗留代码可以包括起初为32位处理器开发但现在在64位处理器上运行的软件。“遗留代码”还指没有使用或适应于使用专用指令用于如本文描述的那样对间接地址编码和加密而设计的计算机代码的版本。本文公开的至少一些实施例可以在不使用新的程序指令并且因此不需要重新编译遗留代码的情况下实现。
现在更详细地参考图1,计算装置100可以体现为用于执行本文描述的功能的任何类型的电子装置。例如,计算装置100可以体现为以下而没有限制:智能电话、平板计算机、可穿戴计算装置、膝上型计算机、笔记本计算机、移动计算装置、蜂窝电话、耳机、消息传递装置、车辆远程信息处理装置、服务器计算机、工作站、分布式计算系统、多处理器系统、消费者电子装置和/或配置成执行本文描述的功能的任何其他计算装置。如在图1中示出的,示例计算装置100包括至少一个处理器102,其包含有安全存储器访问逻辑150。
计算装置100还包括存储器122、输入/输出子系统124、数据存储装置126、显示装置128、用户界面(UI)子系统130、通信子系统132、至少一个用户空间应用134和特许系统组件142(其通过说明包括存储器管理器模块144和密钥创建模块148)。在其他实施例中,计算装置100可以包括其他或额外组件,诸如通常出现在移动和/或固定计算机中的那些(例如,各种传感器和输入/输出装置)。另外,在一些实施例中,示例组件中的一个或多个可以包含在另一个组件中或另外形成另一个组件的一部分。计算装置100的组件中的每个可以体现为软件、固件、硬件或软件和硬件的组合。
处理器102可以体现为能够执行本文描述的功能的任何类型的处理器。例如,处理器102可以体现为多核处理器、其他多CPU处理器或处理/控制电路,或多个不同的处理单元或电路(例如,CPU和GPU,等)。处理器102具有许多寄存器112,其包括通用寄存器和专用寄存器。间接地址114和秘密密钥116(1)-116(N)被存储在寄存器112中。计算装置100的存储器122可以体现为能够执行本文描述的功能的任何类型的易失性或非易失性存储器或数据存储。在操作中,存储器122可以存储在计算装置100的操作期间使用的各种数据和软件,以及操作系统、应用、程序、库和驱动器。
存储器122通信地耦合于处理器102,例如经由I/O子系统124。I/O子系统124可以体现为电路和/或组件,用以促进与处理器102、存储器122和计算装置100的其他组件的输入/输出操作。例如,I/O子系统124可以体现为或另外包括存储器控制器集线器、输入/输出控制集线器、固件装置、通信链路(例如,点到点链路、总线链路、线、电缆、光导、印刷电路板迹线等)和/或用以促进输入/输出操作的其他组件和子系统。在一些实施例中,I/O子系统124可以形成芯片上系统(SoC)的一部分并且连同处理器102、存储器122和/或计算装置100的其他组件一起包含在单个集成电路芯片上。
数据存储装置126可以体现为为了数据的短期或长期存储而配置的任何类型的一个或多个物理装置,诸如例如存储器装置和电路、记忆卡、硬盘驱动、固态驱动、闪速存储器或其他只读存储器、是只读存储器和随机存取存储器的组合的存储器装置,或其他数据存储装置。
显示装置128可以体现为能够显示数字信息的任何类型的显示器,诸如液晶显示器(LCD)、发光二极管(LED)、等离子体显示器、阴极射线管(CRT)或其他类型的显示装置。在一些实施例中,显示装置128可以耦合于触屏或其他人机接口装置以允许用户与计算装置100交互。显示装置128可以是用户界面(UI)子系统130的部分。用户界面子系统130可以包括许多额外装置,用以促进用户与计算装置100的交互,其包括物理或虚拟控制按钮或键、麦克风、扬声器、单向或双向静物和/或视频拍摄装置和/或其他。用户接口子系统130还可以包括装置,诸如运动传感器、接近传感器和眼部追踪装置,其可以配置成检测、捕捉和处理牵涉计算装置100的各种其他形式的人类交互。
计算装置100进一步包括通信子系统132,其可以体现为能够在计算装置100与其他电子装置之间启用通信的任何通信电路、装置或其集合。通信子系统132可以配置成使用任何一个或多个通信技术(例如,无线或有线通信)和相关联协议(例如,以太网、Bluetooth™、Wi-Fi™、WiMAX、3G/LTE等)来实施这样的通信。通信子系统132可以体现为网络适配器,其包括无线网络适配器。
示例计算装置100还包括许多计算机程序组件,诸如用户空间应用134和特许系统组件142。用户空间应用134可以体现为经由例如显示装置128或UI子系统130而直接或间接与最终用户交互的任何计算机应用(例如,软件、固件、硬件或其组合)。用户空间应用134的一些示例包括字处理程序、文档查看器/阅读器、web浏览器、电子邮件程序、消息传递服务、计算机游戏、拍摄装置和视频应用等。除其他外,特许系统组件142还促进用户空间应用134与计算装置100的硬件组件之间的通信。特许系统组件142的部分可以体现为能够执行本文描述的功能的任何操作系统,诸如Microsoft Corporation的WINDOWS、Google, Inc.的ANDROID和/或其他。备选地或另外,特许系统组件142的一部分可以体现为能够执行本文描述的功能的任何类型的虚拟机监视器(例如, I型或II型超级用户)。
示例特许系统组件142包括许多计算机程序组件,诸如存储器管理器模块144和密钥创建模块148。特许系统组件142的组件中的每个可以体现为软件、固件、硬件或软件和硬件的组合。例如,特许系统组件142的组件可以体现为操作系统内核、虚拟机监视器或超级用户的模块。存储器管理器模块144对在计算装置100上运行的各种过程分配存储器122的部分(例如,作为虚拟存储器地址的范围)。存储器管理器模块144体现为例如加载器、存储器管理器服务或堆管理服务。密钥创建模块148创建秘密密钥116(1)-116(N)(例如,秘密地址密钥和秘密数据密钥)并且将它们写入一个寄存器或多个寄存器,处理器102对该一个寄存器或多个寄存器进行读访问。为了创建秘密密钥,密钥创建模块148可以执行例如随机数生成器或能够生成可以执行本文描述的功能的秘密密钥的另一个算法。
应注意大量方法可以用于对本文公开的实施例生成或获得密钥。例如,尽管密钥创建模块148示出为计算装置100的部分,但可以使用任何适合的验证过程从任何适合的外部源获得一个或多个秘密密钥,用以安全地将密钥传达给计算装置100,作为那些过程的部分,可以包括生成密钥。此外,特许系统组件142可以是可信执行环境(TEE)的部分、虚拟机、处理器102、协处理器(未示出)或计算装置100中或安全连接到计算装置100的任何其他适合的硬件、固件或软件。此外,密钥可以是“秘密的”,其意指它的值保持隐藏、无法访问、模糊的或另外被保护以防未经授权的行动者(例如,软件、固件、机器、外来硬件组件和人类)。
图2是图示根据本公开的至少一个实施例的图1的安全存储器访问逻辑的应用的简化环境图。在一些实施例中,计算装置100可以在操作期间建立环境200(例如,本机和/或虚拟运行时或“执行”环境)。示例环境200中描绘的各种模块可以体现为硬件、固件、软件或其组合。在环境200中,用户空间应用134(或特许系统组件142,例如在加载用户空间应用134中)可以在计算装置100的操作期间不时地发出存储器分配202。存储器分配202可以根据需要在被传递给处理器102之前被特许系统组件142的存储器分配逻辑146转换(例如,编译或解译)。在处理器102中,响应于存储器分配202来执行地址编码逻辑152(例如,代替常规的“malloc”指令/函数调用)。而常规malloc指令仅仅分配存储器并且返回(不安全的)指针,地址编码逻辑152对间接地址204编码,该间接地址204包括元数据205(例如,范围准许信息、大小(幂)、存储器分配大小、类型、位置、所有权、版本、标签、特许级别、密码上下文ID或密钥或其任何组合,等),如本文描述的,并且返回编码间接地址206。元数据可以采用明文格式嵌入间接地址或指针(例如,标准64位寄存器或放大寄存器,诸如128个位或256个位,用于适应更多元数据)中、嵌入向指针加密/解密指令和数据访问指令提供的另一个操作数内、存储在控制寄存器中、存储在存储器中的表中或经由其任何组合提供。例如,大小(幂)元数据和标签值可以嵌入指针中并且密码上下文ID可以存储在控制寄存器中。
相似地,用户空间应用134或特许系统组件142可以不时地发出存储器存储211,其可以被处理器102作为使用间接地址114从寄存器112(或其他存储单元)读取并且写入存储器122或高速缓存的处理器指令(例如,STORE、MOV指令)来处理。使用STORE指令作为示例,存储器存储指令逻辑170仅在成功执行地址解码逻辑162来对编码间接地址206解码并且还基于数据调整和秘密数据密钥116(2)成功执行数据加密逻辑174来对待存储在间接地址204所指向的存储器位置处的数据加密之后才存储数据。地址解码逻辑162的成功执行基于地址解密逻辑164的成功执行,该地址解密逻辑使用地址调整和秘密地址密钥116(1)来对编码间接地址206的加密地址片解密。
相似地,用户空间应用134或特许系统组件142可以不时地发出存储器加载220,其可以被处理器102作为使用间接地址114从存储器122读取并且写入寄存器112的处理器指令(例如,LOAD、MOV指令)来处理。使用LOAD指令作为示例,存储器检索指令逻辑180仅在成功执行地址解码逻辑162来对编码间接地址206解码之后才执行存储器访问。地址解码逻辑162的成功执行基于地址解密逻辑164的成功执行,该地址解密逻辑使用地址调整和秘密地址密钥116(1)来对编码间接地址206的加密地址片解密。一旦返回间接地址204并且访问存储器122来从间接地址204所指向的存储器位置加载数据,所加载的数据可以基于数据调整和秘密数据密钥116(2)通过执行数据解密逻辑184来解密。数据解密逻辑184的成功执行依赖于用于创建数据调整来对数据解密的间接地址的部分和用于创建数据调整的额外元数据(如有的话)是否对应于间接地址所指向的存储器位置的初始分配。
尽管地址解码逻辑162示出为与图2中的存储器存储指令逻辑170和存储器检索指令逻辑180分开的模块,但应理解地址解码逻辑162可以并入指令逻辑170和/或180或可以体现为独立指令集。此外,应理解备选地或除LOAD、STORE和MOV指令(例如,具有存储器操作数的算术指令、调用、JMP等)之外,地址解码逻辑162还可以并入其他类型的指令或被其引用。例如,诸如调用和JMP等控制转移指令可以为代码加载编码指针地址以执行进入处理器的程序计数器寄存器(例如,指令指针)(例如,RIP,其中RIP是64位代码中的指令指针寄存器)。指令指针寄存器然后可以被程序查询并且因此,当前的程序计数器地址将是编码形式(对当前程序计数器位置的偏移)。
如果地址解码逻辑162成功地对编码间接地址206解码,则初始间接地址204被返回给特许系统组件142并且完成存储器访问,或程序执行在新的程序计数器位置开始(在控制流改变的情况下),该编码间接地址206包括在编码间接地址中成功对加密地址片解密的地址解密逻辑164。如果编码间接地址206未成功解码,则引发错误。基于存储器存储211的成功完成或失败,适当的检验或错误信号213被返回给用户空间应用134。相似地,基于存储器加载220的成功完成或失败,适当的检验或错误信号222被返回给用户空间应用134。
图3A是图示与图2中示出的存储器检索指令逻辑180相关联的操作序列的简化序列图。存储器加载由存储器检索指令逻辑180基于编码间接地址206发起。地址解码逻辑162在301A获得秘密地址密钥116(1)并且在301B获得地址调整208。秘密地址密钥116(1)和地址调整208被地址解码逻辑162用于在301C对编码间接地址206解码。如果编码间接地址206包括存储器地址的加密地址片,则地址解码逻辑162可以对编码间接地址206中的加密地址片解密。如果编码间接地址206被地址解码逻辑162成功解码,则在302输出解码间接地址204。
数据解密逻辑184在301D获得秘密数据密钥116(2)并且在301E获得数据调整209,它们被数据解密逻辑184用于在305对加密数据210解密。如将在本文进一步描述的,在各种可能实施例中,从编码间接地址204导出数据调整209。应注意在至少一些实施例中,在305,数据解密逻辑184可以在接收加密数据之前并且与地址解码逻辑162并行地开始它的解密算法。在该实施例中,计数器模式块密码例如可以基于数据调整209和秘密数据密钥116(2)来执行加密操作以生成密钥流,一旦接收加密数据210就可以使用该密钥流。
在303,存储器检索指令逻辑180基于在302被地址解码逻辑162输出的间接地址204来访问存储器122。在304,从存储器122检索(例如,加载、读取、移动等)加密数据210。在305,向数据解密逻辑184提供加密数据210,该数据解密逻辑184可以使用已经生成的密钥流来对加密数据210解密(例如,通过执行异或(XOR)函数)。如果加密数据210被数据解密逻辑184成功解密,则在306输出解密数据212。
图3B是图示与图2中示出的存储器存储指令逻辑170相关联的操作序列的简化序列图。存储器存储由存储器存储指令逻辑170基于编码间接地址206而发起。地址解码逻辑162在321获得秘密地址密钥116(1)并且在322获得地址调整208。秘密地址密钥116(1)和地址调节208被地址解码逻辑162用于在323对编码间接地址206解码。如果编码间接地址206包括存储器地址的加密地址片,则地址解码逻辑162可以对编码间接地址206中的加密地址片解密。如果编码间接地址206被地址解码逻辑162成功解码,则在324输出解码间接地址204。
数据加密逻辑174在325获得秘密数据密钥116(2)并且在326获得数据调整209,它们被数据加密逻辑174用于在327对未经加密的数据216加密。如将在本文进一步描述的,在各种可能实施例中,从编码间接地址204导出数据调整209。如果未经加密的数据216被数据加密逻辑174成功加密,则在328输出加密数据210。在329,存储器存储指令逻辑170基于间接地址204访问存储器122,并且在330,将加密数据210存储在存储器122中。应注意地址解码逻辑162和数据加密逻辑174可以被并行、部分并行、相继或按任何其他顺序或时序执行。一些实施例可以使用地址的未经加密部分(部分地址)查找转换后备缓冲器(TLB),来看看TLB条目中是否存在地址的匹配部分,从而继续进行该TLB地址映射同时完成地址解码/解密的加密部分。然而,加密数据210直到地址解码逻辑162和数据加密逻辑174都被成功执行才存储在存储器122中。
现在参考图4,示出用于确保间接地址安全的示例过程400。过程400的部分可以由计算装置100的硬件、固件和/或软件(例如,由执行地址编码逻辑152的处理器102)执行。过程400响应于存储器分配(例如,通过存储器管理器模块)而开始。在框410,计算装置100获得间接地址、地址范围和对间接地址编码所需要的其他输入(例如,码块标识符、指令指针和/或调整的元数据,如本文描述的)。在框412中,计算装置100确定调用代码(例如,发起存储器分配的代码)是否被授权访问在框410接收的间接地址(例如,间接地址204)。为此,计算装置100可以通过对调用代码检验指令指针或调用方特许级别信息来执行访问控制检查,可以从例如存储器管理器模块144的堆管理器获得该指令指针或调用方特许级别信息。如果计算装置100确定调用代码未被授权访问间接地址,则引发错误(414)。如果计算装置100确定调用代码被授权访问间接地址,则计算装置100进行到框416。在框416,计算装置100确定间接地址的未用(例如,非规范)地址位来执行地址范围编码或其他元数据编码(例如,大小(幂)元数据、标签值等)。为此,计算装置100可以仅仅使用间接地址的更高(例如,最高有效)未用/非规范位。应注意编码地址不必在架构上是非规范的。相反,未用/非规范地址可以仅仅是被例如特许系统组件142预留的存储器范围,用以启用如本文公开的地址编码。
在框148,计算装置100创建元数据(例如,有效范围和/或准许数据)并且将元数据存储在在框416中选择的间接地址的未用/非规范位。通过说明,元数据指示间接地址所指向的缓冲区的大小的上限。为了创建元数据,计算装置100将间接地址值转换成中心位置,其中最高有效规范地址位对于有效地址范围不改变。在一些实施例中,范围元数据包括“指数”,用于确定存储器范围大小的2的幂(有效地确定可变和不可变地址位的数量)。在一些情况下,“调节”用于如下文描述的那样推动值到2的幂范围的末端。在其他实施例中,当需要对缓冲区“下溢”寻址(如与缓冲区“溢出”相对)时,调节可以用于推动缓冲区到2的幂范围的开端。使用指数元数据,可以定义任何2的幂存储器范围(例如,2、4、8、16…2∧64)。
下面是范围元数据编码的简单示例。地址0000b-0011b适合范围0-3,其中两个高位不改变。然而,如果修改指针而转到索引4,则高位中的一个将改变。因此,有效范围元数据可以编码为[2](对于对范围4编码的两个高位)并且有效范围元数据可以存储在较高的非规范位(例如,“[2]00xxb”)中。在该示例中,指数的大小将是2个位(例如,值[1-4]),用以涵盖在示例中使用的4位地址。下文的表1图示许多额外的简化示例。
实地址范围 | 大小 | 编码地址 | 注释 |
1001b-1100b | 4个字节 | [2]{3}11xx | 调节+3以使全部适应11xxb |
1001b-1101b | 5个字节 | [3]{1}1xxx | 调节+1到范围末端 |
1110b-1111b | 2个字节 | [1]{0}111x | 适应2的最低幂 |
1101b-1110b | 2个字节 | [1]{1}111x | 调节+1以使全部适应111xb |
0000b-1111b | 16个字节 | [4]{0}xxxx | 全范围 |
1010b-1010b | 1个字节 | [0]{0}1010 | 精确匹配 |
1011b-1101b | 3个字节 | [2]{2}11xx | 调节+2到范围末端 |
表1:地址编码示例
在表1中,编码地址使用与浮点格式相似的格式来表示。在表1的第三列的编码地址中,括号中的数字(例如,[2])是指数或有效范围元数据;大括号中的数字(例如,{3})是调节值,并且调节值右边的地址指示其中存储有效范围元数据和调节值的未用/非规范位。在框420中,计算装置100确定要应用于有效范围的调节(或“偏移”),并且将调节值存储在间接地址的未用/非规范位中。在一些实施例中,调节用于推动编码范围到2的幂边界的末端。这对缓冲区大小设置非常特定的上界限。这样,可以创建初始(未编码)有效地址范围的编码版本。可以设计编码版本使得高位的最小数量将随着有效范围而改变(例如,使得高位的加密将在解密时检测/放大对编码地址的修改)。编码是可逆的,使得只要在范围内修改它就返回初始规定有效地址范围。在上文的示例中,十进制范围0-3(二进制0000b-0011b)可以编码为[2]{0}00xxb(其中“xx”意指那些位对范围可以取任何值:00、01、10、11)。在另一个示例中,十进制范围1-4(0001b-0100b)可以编码为[2]{-1}00xxb(其中减去调节以便使高位保持不变)。备选地,相同的十进制范围1-4(0001b-0100b)可以编码为[2]{3}01xxb(这时增加调节3以便使高位保持不变)。利用任一表示,编码版本解码回初始地址范围1-4。在再另一个示例中,如果缓冲区大小是4KB,则可以使用具有4个字节分辨率的10位调节值。
其他实施例可以使用带符号的调节值(例如,2补数),其中缓冲区可以根据调节的符号(+/-)被调节到2的幂的边界的开端或末端。这样的实施例根据调节符号可以提供保护以防止缓冲区溢出或下溢情形。在未用/非规范地址(例如,在当前64位处理器中)中16个位可用的情况下,可用位中的10个可以用于调节并且剩余的6个位可以用于有效范围元数据(例如,指数值/2的幂)。如果指数值达到4KB页之外的范围,则调节可以按2的倍数展开以允许在甚至更大的2的幂的范围内调节大的缓冲区(注意在一些实施例中,4096个字节用10位调节值而完全涵盖,从而在高(2的幂)位将改变之前允许调节 “调节”缓冲区而以4KB页中的最后4个字节结束)。这样的调节(例如,递增1)将每次对缓冲区位置调节4个字节。在其他实施例中,初始调节大小和字大小的任何其他选择是可能的。在另一个示例中,如果指数具有值13,则调节值可以乘以2使得调节仍然可以包含整个2的幂的范围(在该情况下,如果每次调节8个字节,则是两个4KB页),等等(例如,指数值14意指调节值乘以4,并且指数值15意指调节值乘以8等等,从而允许调节包含整个2的幂范围)。
在框422,计算装置100对间接地址的一部分加密,其中待加密的该间接地址的部分通过有效范围元数据(例如,指数/2的幂)和调节值来确定。有效范围元数据确定待加密的编码地址的最高有效地址位的数量(例如,下到最小数量,因此一些地址位将总是被加密)。在一些实施例中,调节值也被加密(例如,为块密码创建合理的块大小)。在一些实施例中,在有效范围元数据中识别的所使用位/规范地址的最高有效位使用有效范围元数据(其可以包括或可以不包括调节值)作为地址调整、利用秘密地址密钥(例如,秘密地址密钥116(1))来加密。在图示的实施例中,因为处理器使用有效范围元数据明文来确定解密的位的数量,有效范围元数据(例如,指数/2的幂)因此将未被加密。然而,有效范围元数据(例如,指数/2的幂)在可调块密码的情况下可以用作调整(并且由此影响加密位)。可以用作调整的其他数据值包括但不一定限于:存储在间接地址的未用位中的数据、缓冲区大小的上限、选为缓冲区大小的上限的2的幂的边界的指数、施加于2的幂的边界的调节值、码块标识符、指令指针数据、元数据中编码的准许信息、版本号(在重新指派/撤销之前分配给程序的指针时有用,版本可以被寄存器中的处理器维持)和/或本文描述的其他元数据(例如,明文地址片大小、存储器分配大小、类型、位置、所有权、标签、特许级别、密码上下文ID或其任何适合的组合)。
如本文使用的,除通常的明文或密文输入和密钥(例如,秘密密钥116(1)-116(N))之外,“调整”还可以指到块密码的第二输入,以及其他。在至少一些实施例中,调整可以组成块密码的初始化向量(IV)中的全部或部分。对两个高规范位加密使计算装置100能够检测间接地址何时非法改变,因为加密算法将导致非法改变的高位产生敌手不确定的随机序列位,其可能在使用非法改变的间接地址时导致错误。
待加密的间接地址的部分(例如,高的使用/规范位)使用密码模式加密算法(诸如可调块密码)、使用有效范围元数据和调节(例如,在上文的示例中,是[2]{-1})作为调整来加密。可调块密码的一些示例包括:XOR-加密-XOR(XEX)、Liskov、Rivest和Wagner(LRW),和带密文窃取的基于XEX的调整码本模式(XTS)。可以使用其他位扩散方法,在该方法中密文中任何单个位改变导致跨整个解密明文改变。如期望的话,备选实施例可以通过使用仍然实现与块密码类似的合理位扩散的非密码方法来权衡安全性和性能。
为加密选择的密码可以使用具有位可选或另外可变块大小(例如,具有可以被构造来利用调整的适当块大小的任何块密码或相似的扩散算法)的算法或允许有带调整的固定块大小、使用剩余的未加密位(例如,该固定块大小以外的附加位)的算法在硬件中实现。具有位可选块大小的密码可以接受位长度参数作为输入(在一些情况下,连同明文一起待加密),该位长度参数规定要对明文中的多少个位加密。在一些情况下,位长度参数规定明文中相同数量的位,并且在其他情况下,位长度参数规定明文中少于整个明文长度的位数量。密码使用加密密钥(其可以具有与位长度参数相同或不同的长度)对明文位加密。在加密密钥长于位长度参数的情况下,可以在密码中使用等于位长度参数的密钥的位的子集。密码使用包括至少两个逻辑AND操作和两个逻辑XOR操作的逻辑操作序列对来自明文的与位长度参数规定的一样多的位加密。对明文位和密钥位两者都执行操作中的每个;即,对至少一个明文位和至少一个密钥位执行操作中的每个。采用该方式,可以实现明文与密文之间的混合和扩散。根据本公开的该位长度可参数化密码可以称为K密码。
K密码还可以配置成接收调整输入使得加密(和解密)基于加密密钥和调整输入。例如,调整输入可以增加到K密码所生成的密码调度中的一定数量的循环密钥(roundkey)。调整输入可以具有与循环密钥相同的长度并且可以采用任何适合的方式配置,包括在本文参考各种实施例描述的调整输入。
在一些实施例中,密码具有足够的位扩散使得对加密地址位做出的任何位改变在被解密时将同样影响(级联通过)所有位位置。考虑到任何改变或界限违规,这为被破坏的地址提供了基础。使用该方法,如果敌手试图篡改元数据(例如,指数或调节值,或被加密的最高有效位),则所得的解码地址将被损坏。在64位地址空间中,地址破坏将导致错误的概率很高,从而允许特许系统组件142(例如,操作系统/执行程序/VMM/备选模式/调试跟踪/管理处理器/子系统,等)捕捉地址破坏(和指针访问或界限违规)。
在上文的示例中,如果间接地址/指针值递增超过3,则这样修改间接地址/指针将破坏高规范位并且导致敌手无法控制的非确定性存储器访问。例如,超出缓冲区大小一个字节将导致随机存储器访问,其页出错概率很高。这是由于确保即使一位改变也将扩散通过所有最高有效位的密码的位扩散性质。由于调节,其推动值到2的幂范围的末端,缓冲区溢出导致加密地址位被破坏。
密码调整可以扩展来包括码块标识符,用以对准许哪些码块(例如,调用代码的块)使用间接地址/指针来访问存储器提供访问控制。另外,指令指针(其可以称为“程序计数器”)信息或范围可以编码为指针加密调整(在本文也称为“地址调整”)的部分。指令指针信息可以用于限制什么代码可以访问什么数据的范围。例如,所有代码可以设置在64位地址空间内的固定存储器块内。具有相似访问准许的代码可以一起分组在相同的块或范围内。地址调整可以包括对于从中执行指令的存储器块的标识符。这样,代码和数据可以相关联,并且访问受控制,使得来自不同码块的敌手将不能使用加密指针访问受保护块的数据,因为如果错误的码块标识符用作地址调整则加密指针将没有正确解码。此外,当码块调用(例如,malloc)来向它自己分配存储器时,malloc可以使用调用代码的存储器块而返回加密地址以确保对所分配存储器的私有访问(只要所分配的存储器没有被释放并且然后重新分配给另一个码块即可)。备选地,识别调用代码的其他方法可以在地址调整中使用,诸如保护密钥。再进一步,针对读/写/执行访问的被处理器102用于控制对存储器访问的元数据可以用作加密地址位的地址调整的部分。另外,指令指针自身可以表示为编码指针(例如,基于范围的)。在该情况下,元数据和加密地址位可以用作识别访问数据指针的码块或请求存储器分配/指派的“调整”的部分。在424,编码间接地址可以是返回存储器管理器144的输出和控制。
现在参考图5,示出用于对间接地址解码的示例过程500。过程500的部分可以由计算装置100的硬件、固件和/或软件(例如,由执行安全mov逻辑和/或地址解码逻辑162的处理器102)执行。过程500响应于诸如读、写或执行操作(例如,MOV指令)等存储器访问操作而开始。当然,不同的处理器架构可以通过指令的不同名称或不同选项/参数来引用“MOV”功能性。如此,所公开的实施例适用于跨不同架构的所有类型的“MOV”功能性,而不管用于引用这样的功能性的术语如何。此外,MOV指令是一个示例,并且可以访问存储器来读/写数据的任何指令可以应用本文公开的地址编码和解码方法。
在框510中,计算装置100获得编码间接地址(例如,编码地址206,其可以从寄存器112获得)。在框512,计算装置100确定在框510获得的编码地址是否具有未用或非规范位。如果计算装置100确定编码地址没有未用/非规范位(例如,无论地址范围是32位、64位、128位或备选架构需要无论什么范围,地址都没有落在非规范或另外被保留的地址范围内),则引发错误(514)。如果计算装置100确定编码地址具有未用/非规范位(例如,地址落在规范或被保留地址范围内),则计算装置100进行到框516。在框516,计算装置100使用在图4的框422中使用的加密算法的解密算法对等体并且使用与图4的框422中的加密算法所使用的相同的秘密密钥和调整来对编码地址的加密部分解密。
在框518,计算装置100“取消”对加密地址中的范围元数据进行的调节(例如,通过从间接地址的完整解密值中减去未用/非规范位中的解密调节值)。在框520,计算装置100通过例如去除未用/非规范位来使解密间接地址返回它的初始(例如,规范)形式。
在框522,计算装置100使用框520输出的解码地址作为“真”(例如,虚拟或线性)存储器地址(例如,作为指针)。在框524,计算装置100确定在框522用作存储器地址/指针的解码地址是否是被破坏地址。如果解码地址被破坏,则引发错误(514)。如果解码地址未被破坏,则计算装置100在框526使用解码地址作为存储器地址/指针成功完成存储器访问操作。
这样,过程500允许计算装置100检验范围编码间接地址并且在将范围编码地址转换为实存储器地址之前实施嵌入式范围检查。另外,无效调节值(例如,超出2的幂的范围的调节值)可以用于以一定概率确定破坏何时发生以及被保留来检测破坏何时发生的无效地址值或元数据。即使未检测到破坏,但所得的地址对于敌手将不是确定的(并且因此不可用)。除上文描述的缓冲区溢出减轻技术外,存在本文公开的指针地址编码技术的其他应用。例如,处理器指令可以被特许级别或调用方位置授权(例如,指令指针块或堆管理器范围)所限制。在程序代码本身可以控制它自己的指针和范围的情况下可以增加额外指令。这些指令可以使用更大的编码指针范围作为输入,并且如果执行该指令的代码属于拥有初始(超集)缓冲区指针(其可以通过指令指针来确定)的码块则可以产生较小/相等的范围指针(更加有限制性),其落入较大缓冲区的范围内。例如,存储器管理器模块144可以分配调用栈并且向该调用栈提供大范围指针(例如,针对栈指针)。被授权作用于调用栈的代码段然后可以使用该处理器指令来将子范围指针编码到在堆栈上隐式创建的缓冲区。为此,编译器可以在执行堆栈操作时自动增广代码(创建的局部变量,等),因此,保护了堆栈上甚至个体的数据结构或个体变量。即,所公开的技术启用将缓冲区大小向下编码至个体变量大小(例如,32位整数可以编码为指向4字节缓冲区的指针)。
相似地,拥有指针的码块可以使用相似的指令以基于初始通过对目标/接收码块生成新编码的指针(例如,通过选择更小的缓冲区大小指派给另一个码块)而将控制/所有权转移到另一个/不同的码块。这样的指令将取所得的缓冲区大小、初始数据指针和目标代码范围(指针被指派的)的编码指针作为输入参数。这样的指令可以使用调用码块的指令指针作为调整来对输入编码指针解码,如果输入范围小于输入编码指针则使范围减少,并且在产生输出编码指针(就规定范围的区间来看,现在对新指派的码块可访问)时使用指向目标码块/范围的输入编码指针作为调整的部分。其他输入参数可以是例如额外元数据,诸如目标代码的读/写/执行准许(可能作为初始的子集)。
为了提供访问控制,指令指针或包括用相似指数标识的范围、调节和加密间接地址位的编码指令指针可以用作调整的部分。指令指针相似地可以编码为存储程序的存储器的可执行范围/缓冲区。在用作数据指针(例如,间接地址114)的调整时,指令指针可以通过不同的程序代码段来控制对数据的访问。此外,编码指令指针值可以被程序查询,用于RIP相对寻址(例如,指令指针寄存器可以被程序读取并且然后用于调用/跳转到程序有效范围内的相对偏移,或通过使用编码指令指针值来读/写程序有效范围内的数据)。
另外,可以创建数据指针并且它被新的处理器指令(或操作系统例程)转换,从而允许数据指针(例如,间接地址114)的所有权扩展到其他代码/程序范围。即,数据指针的所有者程序/代码(其的指令指针范围用作该数据指针的调整的部分)可以调用例如操作系统例程(或处理器指令),其将产生可以被另一个程序/代码范围使用的新的数据指针。在该情况下,新的指令/操作系统例程将对如本文描述的那样被编码的初始数据指针解码并且使用新的程序/代码范围元数据作为调整来对范围重新编码,由此产生这样的数据指针,其在从新地址范围内操作的指令指针访问时将正确解码。新的指令/例程也可以取更小的范围编码作为参数,由此允许拥有初始数据指针的程序将数据缓冲区大小子集化为新的程序/代码范围可访问的较小的存储器区。
此外,64位堆栈指针可以如本文描述的那样被编码,并且如此,在入栈和出栈、符合已分配的堆栈范围的调用和返回时应相应地被处理器102更新。在将MOV指令解码到堆栈指针之后,为了直接存储器访问效率,处理器102可以选择对堆栈指针的解密版本高速缓存,然而,处理器102可以继续追踪范围条件来确保不发生堆栈溢出。
利用指令指针相对寻址,程序计数器寄存器可以被读取并且用于计算位置无关代码(PIC)和数据的偏移。指令指针也可以被编码使得遗留指令指针相对位置无关代码仍将正确运作。在该情况下,编码指令指针寄存器在存储器中可以具有符合被重定位的程序代码和数据(包括文本段)的区间的范围。除存储器访问外,PIC程序可以基于RIP相对寻址而利用间接跳转(JMP)和调用。如此,可以修改JMP和CALL指令来处理编码指针地址,从而将它们转换成与MOV指令相似的实际线性存储器地址。在指针界限以外的指令指针相对跳转和调用可以导致跳转/调用指令的目标地址被破坏,其很可能与错误一起被捕获。加载器还可以固定可重定位符号表来对它们相应的代码段和存储器位置的函数指针的区间正确编码。该指令指针-范围指针还可以用作灵活的代码块/标识符调整,用以访问具有它们相关联代码的控制数据指针。另外,调用栈上的编码范围指针可以被加密以在调用与返回之间提供控制流完整性,同时在返回而被解密的时候保留范围编码。实际上不是6位指数元数据的所有值都被使用(例如,64位寻址)。例如,在64位寻址中,超出48的值将与非规范位冲突并且因此将从未被利用。因此,可以重新定义48/57以上的指数值来指示可以定义调节区的其他解译。应注意数字57基于五级分页。高阶指数值的该解译允许交替使用未用/非规范地址位,从而与所公开的地址编码机制共存。其他实施例可以使用这些未定义值来选择性地确定调节数据存在还是不存在。例如,超过48的指数值可以指示缓冲区不存在/不需要调节,并且仅2的幂有效,从而将2的幂设置为回到开始而无需调节。该方法可以通过选择性地确定编码地址需要什么元数据并且使可用地址位选择性地扩展到之前为调节值保留的空间内而使得地址空间能够被更好利用。
图6是根据本公开的至少一个实施例的示例指针610的图。特别地,图6示出采用其基本格式的通过密码编码的64位指针(地址)(使用指数(幂)元数据而不是偏移)。在一些实例中,指针610可以是图4的过程400的输出。在示出的示例中,编码指针包括大小(指数)元数据部分602(例如,在示出的示例中是5个位),其指示指针610的可变明文部分608(例如,在示出的示例中是6个位)的大小(例如,包括指针610的该可变明文部分608的许多低阶地址位,这些位可以被软件自由操纵用于指针运算)。在一些实施例中,大小部分602可以包括指示基于2的幂的大小的幂(指数)元数据位。
如在图6中示出的,大小元数据部分602可以指示组成不可变明文部分606和可变明文部分608的位的数量。在某些实施例中,组成不可变明文部分606和可变明文部分608的位的总数量可以是恒定的,其中相应部分的大小由大小元数据部分602支配。例如,如果幂元数据值是0,则没有可变明文位并且全部的27个剩余地址位(即,不可变明文部分606)用作调整,用以从地址片(即,线性地址位的子集)生成密文部分604,其中密文部分604与不可变明文部分606相邻并且比不可变明文部分606的更高有效位。作为另外的示例,如果幂元数据值是1,则有一位可变明文,如果幂元数据值是2,则有2位可变明文,多至27位的可变明文,从而导致没有不可变明文位(606)。可变明文部分608可以被软件操纵,例如用于指针运算或其他操作。指针610的密文部分604(例如,在示出的示例中是32个位)可以用小的可调块密码(例如,32位块大小的SIMON、SPECK或可调K密码,或其他可变位大小可调块密码)来加密。剩余的地址位组成不可变明文部分606(例如,在示出的示例中是21个位)并且用作用于对密文部分604加密的可调块密码的调整的部分。尽管这些位也是地址的明文(非加密)部分,但它们无法像可变明文部分608的位那样被软件修改(例如,指针运算)而不会导致密文部分604不正确解密。图6中示出的基本指针格式允许通过密码描述对象大小以及它们在存储器中的位置。在一些情况下,除指针之外,还可以提供指数/幂/大小元数据部分602作为独立参数;然而,在一些情况下(例如,如示出的),大小元数据部分602的位可以与指针610集成以在某些情况下提供遗留兼容性。
还应注意在备选实施例中,大小元数据部分602可以指示组成不可变明文部分606的位的数量,并且从而支配剩余的位数量来组成可变明文部分608。例如,如果幂元数据值是0,则没有不可变明文位(606)并且全部27个剩余地址位(即,可变明文部分608)可以被软件操纵。作为另外的示例,如果幂元数据值是1,则有一位不可变明文,如果幂元数据值是2,则有2位不可变明文,多至27位不可变明文,从而导致没有可变明文位(608),并且因此,没有可以被软件操纵的位。
同样,尽管指针610基于针对密文部分604使用32个位来图示和描述,但指针格式不意在这样受限制。待加密的地址片可以基于容易获得的32位块加密密码来选择。然而,相反可以使用任何其他块大小(例如,27、16、变量等)的加密密码。如果调节密文位的数量(向上或向下),则可以相应地调节待编码的剩余地址位(例如,不可变和可变部分)。例如,如果密文部分被调节为16个位,则组合不可变和可变明文部分(606和608)可以在43个位中编码。然而,在该场景中,额外位可以增加到大小元数据部分602,其中组合的不可变和可变部分减少至42个位,使得大小元数据部分602可以指示任何可能数量的位(例如,0-42个位)来组成不可变明文部分606和可变明文部分608。
在一个或多个实施例中,指针610的大小元数据部分602可以容纳特殊值来指示软件如何使用指针来处理指针610。在一个实施例中,可以定义特殊值来指示指针被视为常规或遗留指针(例如,未被视为通过密码编码的指针)。例如,保留值11111和00000可以指示指针是常规或遗留指针(因为这些是用户与超级用户空间之间的较高线性地址位的遗留非规范编码)。任何其他值可以指示指针被编码为通过密码编码的指针。因此,两个类型的指针(例如,常规和通过密码编码)都可以潜在地在相同的地址空间中使用。在其他实施例中,通过密码编码的指针中的最高有效位中的一个或多个可以被保留来指示指针是遗留指针还是通过密码编码的指针。例如,两个最高有效位可以编码为保留位。当这些保留位具有相同的值时,这指示指针是遗留指针。在再另一个实施例中,两个最高有效位可以编码为标签/版本号(例如,随机或确定不同的值)。然而,指定额外位作为保留位必须丢弃来自指针的其他区的位。在一个示例中,如果两个位用作保留位或标签/版本位,则可以从较低部分(不可变明文位606和可变明文位608)丢弃两个其他位,如果指针大小保持相同的话。
当处理器采用密码模式运行并且使用编码指针(地址)(例如,采用与图6的指针610相同或相似方式格式化的指针)访问存储器来获得实际线性/虚拟地址存储器位置时,处理器采取编码地址格式并且使用大小/幂/指数元数据位(例如,图6的602)确定的可变数量的不可变明文位(例如,图6中的606)和秘密密钥来对密文部分(例如,图6的604)解密。在一些实例中,可以包括大小/幂/指数元数据和/或其他元数据或上下文信息作为调整的部分,以用于对密文部分604解密(在本文也称为“地址调整”)。如果地址不正确解密,则由于试图用被破坏的线性/虚拟地址进行存储器访问,处理器可以导致一般性保护错误(#GP)或页错误。
如本文使用的,“上下文信息”意在包括与以下有关的任何元数据或其他信息:存储器分配、它的相关联存储器地址、它的相关联指针、为其分配存储器的软件和/或已分配的存储器的内容。例如,上下文信息可以包括但不限于以下中的一个或多个:指示被分配的存储器的字节的大小、指示组成指针的不可变和可变明文(地址)部分的位的数量的大小、包含与存储器地址相关联的随机化位的标签、指示对已分配的存储器中存储的数据的访问准许的准许信息、可以用于重新指派/撤销之前指派给程序的指针的指针版本号、存储在已分配的存储器中的数据的类型或类别、指示为其分配存储器的软件的用户或超级用户模式的特许级别,以及密码(密码的)上下文标识符,其包括存储器地址的随机化或确定的唯一值。一个或多个指针编码实施例可以使用上下文信息的任何单个项作为调整(地址调整或数据调整)的部分,或可以使用上下文信息项的任何适合的组合。
上下文信息可以存储在任何类型的存储中,其可以基于特定需要和实现。例如,上下文信息的一个或多个项可以嵌入标准大小(例如,64位)的指针(诸如指针610)中。在该场景中,代替大小元数据或除大小元数据外,上下文信息可以存储在最高位(602)中。对于上下文信息的存储的其他示例类型包括但不一定限于将上下文信息嵌入已被放大来适应更多或更大调整的指针(例如,128位指针、265位指针等)中、将上下文信息嵌入提供给指针加密指令和数据访问指令的另一个操作数内和/或将上下文信息存储在控制寄存器中。控制寄存器可以自动被指令选择以用作密码输入(例如,如果只有一个寄存器存储该类型的调整)。否则,可以使用某一其他指令操作数来选择控制寄存器,该某一其他指令操作数诸如指针本身中或配有为特定操作数编码实施例配置的数据访问指令(例如,特殊加载和存储指令)的上下文操作数中的字段。例如,访问指令的索引字段可以用于选择包含数据(或代码)的密钥或调整的寄存器。一般而言,对于只在切换上下文时更新的调整,用于调整的(一个或多个)项可能尤其适合存储在寄存器中。与特定指针更密切相关联的其他调整可能更适合嵌入指针中或在指令操作数中传递。然而,如之前指出的,上下文信息的任何项可以嵌入或存储在任何类型的存储中。
图7A-7D是通过图形表示指针610的大小部分602中的各种编码的分配的图。对应于加密地址片604的明文的指定值所涵盖的每个地址空间部分根据大小字段(例如,大小部分602)的宽度而包含一定数量的分配槽。支持更大数量的分配槽是可取的,从而为软件在它如何设置分配方面提供灵活性。支持大量分配槽的系统还为在指定量的数据内减轻存储器安全漏洞提供更高程度的密码多样性,因为指针和数据的加密被绑定到包括大小字段的指针编码中的分配槽(它的大小和它的地址两者)。也就是说,在分配或重新分配对象时,软件在它可以从更大数量的不同分配槽挑选时可以更有效地减轻存储器安全漏洞,使得不太可能需要重新使用之前分配的槽,该槽可能仍然被旧指针引用。如果敌手有能力生成指向所猜测槽的指针,则具有更大空间的可能槽还使敌手猜出当前被占据的槽的概率减小。这可以不被包括在每个威胁模型中,但在诸如包括器自己的定制分配器并且从而可以生成新的指针以在其分配内实施存储器安全的库之类的场景中是现实的。约束受损或恶意库访问其授权区以外的存储器并且从而将该该库视为潜在敌手,这是可取的。
软件可以进一步通过对没有活动分配的页取消映射并且通过使分配在不同槽之间移动而进一步强化存储器分配。如果负责使分配移动的软件能够识别引用被移动的分配的所有指针,使得那些指针可以被更新来引用新的位置,则后面的强化方法可以是可行的。
不包括大小字段而相反只包括标签字段的指针编码提供许多潜在分配槽,其被确定为如上文定义的地址空间部分内的字节对齐范围的总数量。然而,指针和数据的加密仅绑定到标签值。这使得敌手更易于驾驭来收获足够的指针而仿真地址空间部分内的所有标签值并且因此收集对于指针的加密部分的所有可能对应值,所述指针可以被重新用于访问在地址空间部分中具有任何标签值的数据的。
在一些实施例中,指针根本没有被加密,因此只有数据加密被绑定到标签值并且地址空间部分实际上是当前模式的整个可访问地址空间。例如,支持四级分页的Intel架构处理器的普遍操作系统的软件约定针对应用定义47位的地址宽度。
因此,相对于不包括大小字段的编码,不准许敌手基于猜测的分配槽和标签值直接生成加密指针而相反只准许敌手破坏现有指针(包括编码中的大小字段)的威胁模型可以使敌手获得对分配的访问的概率大大减小。在包括大小字段的指针编码中,敌手不可能对分配槽生成有效的加密指针,对于这些分配操槽,敌手之前没有观察到指向该确切分配槽的指针。然而,如果指针编码中不包括大小字段,则敌手可以破坏地址位来指向地址空间部分内与其他元数据(例如,标签值)匹配的任何地方,并且成功访问该数据。
地址空间部分内的分配槽的数量可以如下对包括大小字段的指针编码来计算:
其中n是所支持的大小的数量,并且Ai是具有大小i的分配槽的集。下列等式可以用于计算n和Ai:
其中位宽度(字段)指示被命名字段的位宽度。
在一些实施例中,由于限制大小值的范围的其他约束,n可以小于上文计算的最大值。大小字段没有必要表示每个可能分配大小。常见大小可以通过间接表示公共分配值的较小集而用较小大小字段来表示(例如,大小值0表示单个数据元素或代码分配,大小值1指示16B分配,大小值2指示64B分配等等,或任何其他组合)。相似地,大小可以包含例如隐式偏移,其表示中间分配值(例如,大小值1指示16B分配,大小值2指示偏移8个字节的16B分配,或任何其他组合)。
在图7A-7D中描绘各种示例地址空间布局。在图7A中,一个位的图形表示700图示对对应于加密地址片604的明文的指定值的1个位标签值702编码和对可以适应单个大分配或两个小分配的地址空间的1个位大小值704编码之间的差异,因为该示例中的较大大小值是较小大小值的两倍大。嵌入指针中的1个位标签值702提供值0或1,并且分配槽并不会通过它们在地址空间部分内的位置而区分开。然而,嵌入指针中的1个位大小值704为对象提供三个截然不同的分配槽,其将指针和数据加密绑定到大小字段的值和指针中的不可变明文位字段的值。大小值零(大小0)为对象定义一个分配槽,而大小值一(大小1)为对象定义两个分配槽。
注意试图猜测地址空间部分内的任意位置的标签值或大小值的敌手同样有可能猜对。然而,敌手可能之前知道相对于用于提供密码多样性的标签值使大小字段的有效性降低的目标分配的可能大小值。例如,敌手可能知道包含敏感数据的某一存储器映射文件的近似大小范围,这可能使敌手能够猜测足以涵盖映射的最小2的幂的大小。备选地,敌手可能知道在某一app中最流行的大小范围并且如果app中的所有数据具有同样的敏感性则优先以涵盖最多存储器的大小(即,使大小乘以具有该大小的分配的数量而最大化的大小)为目标。考虑到敌手可能通过访问对象中的相邻区域来公开或破坏大的对象中的额外信息而在成功猜测上探究,对较大大小可以给予附加权重,即使它们涵盖略小一些的总面积也如此。也可以对敌手可能知道、更有可能包含尤其敏感信息的特定大小给予附加权重。
在图7B中,2位图形表示710图示对2位标签值712编码与对2位大小值714编码之间的差异。嵌入指针中的2位标签值712提供值0至3。然而,嵌入指针中的2位大小值714对对象启用十五个可能分配槽的分配。大小值零(大小0)为对象定义一个分配槽,大小值一(大小1)为对象定义两个分配槽、大小值二(大小2)为对象定义四个分配槽,并且大小值三(大小3)为对象定义八个分配槽。然而,列出的分配操作数量只是在单个地址空间部分内计算。地址空间可以包含许多地址空间部分,例如对于图6中示出的指针编码的1024个用户模式地址空间部分,其基于具有四级分页的Intel架构上的普遍操作系统的寻址约定。因此,未被示出,由如图6中的5位的大小字段在每个地址空间部分内提供的范围从0到27的分配槽的数量可以计算如下:
这可以乘以对应于加密地址片604的明文的可能截然不同的值的数量来基于具有四级分页的Intel架构上的普遍操作系统的寻址约定计算在整个地址空间内提供的分配槽的总数量:
图7C示出编码空间冗余的图形表示720,其具有3位表示随时间的版本的重叠分配槽。在一些场景中,可以在大小部分中编码的某些大小值可能太大而不能被表达成用于指示指针的不可变和可变明文部分中位的数量。相反,这些冗余大小可以用于向存储器分配引入时间维度,即,版本。因此,嵌入指针中的大小部分722可以对于相同对象大小既对大小值编码又对随时间的版本化或改变编码。例如,如果大小部分具有三个位,则可以对八个不同大小值(0至7)编码,这在第一地址层724中定义十五个可能分配槽。如果另一个位被添加到大小部分,则可以编码的大小值的数量加倍为16。如果不可变和可变部分只包含八个位,则比可能位范围(8个位)有更多的大小值(0至15)可用于对分配槽位置编码。因此,额外大小值(8至15)在第二地址层726中可以定义十五个可能分配槽。第一和第二地址层724和726可以表示在相同存储器空间中为相同对象大小创建的指针的不同版本(或不同时间)。这样,存储器分配器一次可以在存储器空间中的特定位置分配特定大小的对象、释放所述对象并且然后在相同(现在被释放)的位置但利用不同版本重新分配相同大小的另一个对象,以便实行地址相关数据解密。这样,由于不同的版本号,指向相同对象大小的相同存储器位置的之前(被释放)指针值无法访问在相同位置具有相同大小的新分配对象的加密数据。采用相似方式,用于指示大小和版本的位的数量可以增加,从而在存储器空间中的任何位置对于任何大小的任何对象允许有大量版本。
图7D示出编码空间冗余的图形表示730,其具有3位重叠和集中分配槽。在一些场景中,当程序频繁释放和重新分配具有相同的较小大小的存储器时,大小部分732可以使用版本化。在图7D的场景中,大小2和3是最常见的被释放并且然后被重新分配的存储器大小。因此,利用3位总大小+版本中的2位大小部分(即具有一个版本位),而不是每个大小具有两个版本,版本可以集中于一个大小。例如,编码对于大小2和3对象可以分别具有三个版本736和734,并且对于大小0对象仅具有一个版本739且对于大小1对象具有一个版本738。因此,集中对大部分被分配的(一个或多个)大小的环绕使对于该特定(一个或多个)大小的版本化达到最大(例如,大小2和3有许多版本,其他大小一个版本)。这与之前描述的其中每个大小编码映射到单个大小的实施例形成对比,而不管版本如何。在后者实施例中,大小编码与大小之间的映射根据版本变化。在该示例中,编码与大小之间的一对一映射可以用于版本0,而两个编码可以映射到版本1的大小2和3中的每个。
大小和标签/版本元数据在安全攻击检测中可能特别有利。当将某一存储器分配给第二指针(在其被释放后)时可能发生释放后使用攻击。如果再次使用初始指针并且它指向重新分配的存储器内的某个地方并且改变数据,则这可以用于读取或破坏存储器。版本化元数据可以允许在通过使数据加密/完整性依赖于指针版本(例如,使用利用之前释放的版本编码的指针将不会正确地对使用利用新版本编码的指针分配且写入的数据进行解密)而使用错误的版本(旧指针)时防止和/或检测到这样的攻击。其他实施例可以基于版本值(例如通过使用版本作为进入密钥表的索引)而选择不同的数据加密/解密密钥。
转向图8,图8是图示根据至少一个实施例用于对通过密码编码的指针解码的硬件组件的图。在该示例中,指针810基于已分配存储器的存储器地址(例如,线性或虚拟地址)来通过密码编码,如本文之前描述的(例如,图6的指针610)。指针810包括大小部分802、密文部分804、不可变明文部分806和可变明文部分808。地址密码单元820用于对指针810解码来获得解密线性地址814。诸如例如地址生成单元(AGU)822、转换后备缓冲器(TLB)和页缺失处理程序(PMH)826等额外硬件单元将经解密的线性地址814变换为物理地址,以用于访问指针810所引用的已分配存储器中的数据。
地址密码单元820包括密码算法,以用于对指针810的密文部分804解密。密文部分804是指向(或引用)已分配存储器的存储器地址的加密片。在至少一个实施例中,地址密码单元820包括块密码,其基于地址密钥818和第二输入(在本文也称为“调整”或“地址调整”)812来执行加密地址片的解密。一般而言,块密码是一种加密算法,其使用对称密钥采用以下方式来对数据块加密:为诸如位扩散和混乱等性质(其对于防止敌手可预测地操纵解密地址片是很重要的)提供机密性。根据特定块密码要求,至少一些块密码实施例包括初始化向量(IV),其是随机、伪随机或非重复的固定大小的输入。对于使用需要初始化向量的块密码的实施例,地址调整812可以组成初始化向量中的全部或部分。在一些实施例中,地址调整可以包括来自指针(例如,在图8的示例中是大小元数据部分802)、来自另一个寄存器、来自存储器和/或来自指令操作数的上下文信息的一个或多个项。
本文公开的实施例允许有各种指针编码,并且因此,允许有各种调整。调整(地址调整或数据调整)可以包括随机值、对于不同存储器分配的确定不同值、无法被随机化或生成为任意值的语义含义或其任何适合的组合。随机性和/或确定不同的值可以用作调整(或作为调整的部分),用于使密码多样化。这样的调整在本文称为“密码上下文标识符”或“密码上下文ID”并且可以采取随机调整(或初始化向量)、由可信软件生成并且控制的确定性调整(或初始化向量)或随机密码密钥的形式。然而,某些调整可以具有无法被随机化或生成为任意值的语义含义。例如,上下文信息中的大小字段被CPU用于选择指针位范围以用于处理。因此,编码指针(诸如指针810)的大小部分对于每个大小值具有定义明确的解译。
在图8中示出的实施例中,地址调整812整个从指针810获得而没有在其他存储位置(例如,寄存器、其他存储器、指令操作数)中的额外查找。地址调整812包括不可变明文位(例如,806)、可变明文位(例如,808)的填充(padding)和大小元数据(例如,802)。填充可以是用于充填(fill)明文地址的可变、可修改部分(即,可变明文部分808)的任何保留值。例如,填充可以是全零、全一或任何其他指定值。如果大小元数据未定义任何可变明文部分(例如,如果大小值=0),则不需要填充。相反,如果大小元数据将可变明文部分定义为包括所有的明文地址位(例如,如果大小值=27),则不对不可变明文部分编码并且整个27个位用填充(例如,全零)来充填。在示例指针810中,不可变明文部分包括21个位并且填充包括6个位。地址密钥818可以采用如本文之前描述(例如,关于图1的特许系统组件142和密钥创建模块148)的任何适合的方式生成或获得。
任何适合的块密码密码算法可以实现为地址密码单元820。例如,小的可调块密码(例如,可以使用SIMON、SPECK、可调K密码(采用32位块大小)、或其他可变位大小可调块密码)。高级加密标准(AES)提供各种块密码,其可以采用许多方式实现来实现诸如密文804等数据块的加密/解密。例如,带密文窃取的基于AES xor-加密-xor(XEX)的调整码本模式(AES-XTS)可能是适合的。在其他实施例中,可以实现AES计数器(CTR)操作模式。
一旦密文部分804的解密成功,则地址密码单元820还可以基于线性地址的解密片生成经解密的线性地址814。经解密的线性地址片与不可变明文部分和可变明文部分808连接。另外,可以对经解密的线性地址片的最高有效位执行符号扩展来填充高位或将其设置为特定值。
图9是根据至少一个实施例试图使用通过密码编码的指针910来访问存储器的示例敌手920(例如,恶意软件、恶意用户、机器人、有缺陷的软件等)的图900。图9中示出的示例图示通过密码算法使用上下文信息903(例如,上下文信息,诸如对象的大小、对象的类型、对象的位置、所有权信息、访问控制、准许)作为地址调整904来对存储器地址片加密以获得密文而在对地址902加密。秘密地址密钥906还可以被加密算法使用。具有加密地址片(密文)的通过密码编码的指针910然后对软件可访问,并且如果被正确操纵(例如,仅可变明文位)并且在指针返回CPU时CPU可以提供相同的隐式信息,则将对正确的初始地址解码。
除其他目的外,地址调整还意在当指向重叠存储器区的指针在不同时间有效时将那些指针互相区分开并且防止敌手猜出正确的地址调整值和加密指针片来获得对存储器的未经授权访问。敌手没有正确的隐式信息(诸如访问函数处于错误的存储器位置)或指针的密文部分而未被正确改变,则处理器将不正确地对地址解码,从而导致不良/出错的存储器访问。例如,在示出的示例中,元数据调整(例如,地址位、对象(大小、类型和/或位置)、所有权、访问控制、准许等)和秘密地址密钥用于对虚拟地址加密。如果敌手修改到解密过程的输入(例如,改变编码指针值或提供错误的大小信息),如由修改输入909指示的,则指针可以被解密为随机(或不良)地址922,其可以导致错误924,如示出那样。另一方面,如果如在图的顶部分支中示出的那样使用正确的(一个或多个)调整904和秘密地址密钥906,则可以从解密过程获得正确的存储器地址902。
图10是根据至少一个实施例试图使用通过密码编码的指针1010来访问存储器的另一个示例敌手1020(例如,恶意软件、恶意用户、机器人、有缺陷的软件等)的图1000。特别地,在示出的示例中,基于秘密地址密钥1006和包括上下文信息的两个项的地址调整来对指针1010加密。在该示例中,上下文信息包括大小值1003A(例如,指针中不可变位的数量或指针中可变位的数量)和所有者元数据1003B(例如,被访问的软件和/或数据的所有者)。然而,如本文之前描述的,上下文信息的任何适合的项、存储器地址的部分或其适合的组合可以用作调整,以便对嵌入指针的存储器地址片(例如,密文部分604、804)加密。嵌入指针的存储器地址片可以用所包括的多级上下文元数据多次加密。在其他实施例中,嵌入指针的存储器地址片可以用包含上下文信息的一个或多个项、存储器地址的一部分或其任何适合的组合的地址调整加密一次。
数据加密则可以依赖于指针编码。例如,当对关于存储器存储(写)操作的数据加密时,处理器可以取指针1010中的编码地址的密文作为数据调整来对编码指针1010所引用的数据加密。在这里,处理器可以使用可调块密码和秘密数据加密密钥以使用编码地址密文作为数据调整的部分来对数据加密。根据密码的调整大小,指针的明文部分还可以用作数据调整的部分。例如,64位寄存器的存储可以使用具有64位块大小的PRINCE密码,并且编码指针密文(604)和对于该64位块的偏移可以用作数据调整。相似地,32位块大小密码(例如,SPECK、SIMON、可调K密码)可以当采用32位模式运行时被使用或可以用于加密和存储32位大小的寄存器(使用编码地址密文(604)和对于该32位存储器块的偏移作为数据调整)。相似地,诸如AES等较大大小的块密码可以用于使用编码存储器地址密文(604)和对于128位存储器块的偏移作为数据调整来将128位AVX寄存器存储到存储器。备选地,较小的块大小密码(例如,64位)可以用于部分加密和存储较大寄存器128位,从而用针对上半部分的数据调整对上半部分加密并且用不同的数据调整单独对下半部分加密。应注意在至少一些实现中,根据块密码块大小和指针大小,则整个指针或其任何所选内容可以用作块密码的数据调整或数据调整的部分。例如,图8的指针810可以用作数据调整,以用于用具有128位块大小的AES计数器模式密码对数据加密。
与在图9中一样,在图10的图中,由于指针值解码到不良地址1022,用无效编码地址(例如,修改的密文1009)对加密数据1030解密因此将导致错误,或即使解密地址有效(未出错),则该位置处的数据也可以用不同的调整加密(例如,导致无效密钥流)。因此,即使敌手试图未经授权的访问并且猜测导致解密指针引用目标存储器的地址调整,该存储器也采用将它绑定到授权指针这样的方式来加密。因此,敌手的访问可能只返回混淆数据或如果完整性被强制则引发可检测到的完整性违规。
采用该方式,数据密码可以依赖于密码地址编码。存储器管理器可以通过从堆分配不同大小的对象以确保指针中的密文对于每个malloc/new指令总是不同的来利用这点。例如,当释放8个字节分配时,存储器中该相同位置的下一个重新分配可以被给予4个字节的分配来对新分配的缓冲区产生不同的密文(604)。如果被释放的8字节分配指针后来被不正确地重新用于访问存储器位置,则当前4字节位置的内容将用不同的密钥流/调整来加密使得被释放的8字节分配指针将未正确地对新数据解密。
在一些实施例中,数据完整性可以由处理器基于熵或模式测试来隐式验证,因为用错误的调整/密钥流解密的数据可以表现得很随机(与将展现模式的经正确解码数对比)。隐式完整性是一种优化,其中处理器每次查找存储器中存储的对应于(加密)数据的完整性值(例如,消息验证代码/MAC)。当处理器从存储器加载寄存器时,它可以检验用于加载寄存器/端口的存储器的对应部分的隐式完整性,或如果熵不确定,则处理器可以查找存储器的该部分的完整性值(例如,基于它的存储器地址,从该存储器地址加载寄存器)来检验存储器的内容属于该密钥流/调整。如果存储器中的完整性值与被加载到寄存器内的存储器(数据)内容不匹配,考虑到当前编码地址(调整,密钥流),处理器可以生成完整性违规(异常/错误)。
对所有权操作的写可以用于使存储器的内容从使用一个密钥流变为使用另一个密钥流,并且这可以是特许操作(例如,由存储器管理器执行,或通过与DECRYPTPTR一起使用的准许来确定)来分配存储器而没有导致完整性违规。所有权的写入可以改变数据和对应的完整性值(例如,ICV/MAC)来使写入的数据内容与新的密钥流/调整匹配。同时,使用用于将寄存器内容存储到(写入)存储器来首先检验在使用正确的密钥流/调整,常规写入首先将从存储器读取旧的数据/完整性值(这是对所有权检查的读取)。这样,试图改写属于别人(不同的密钥/调整)的存储器被检测到且被阻止。
图11和12是图示根据本文描述的实施例用于对数据解密的示例块密码。在图11和12中图示的块密码不意在为限制性的,因为各种大小的许多不同可调块密码可以用于根据本文公开的实施例的特定需要和实现来对数据(和存储器地址片)加密和解密。
图11示出用于对通过密码编码的指针(诸如指针610或810)所引用的加密数据解密的带密文窃取的基于高级加密标准(AES)XEX的调整码本模式(XTS-AES)解密流1100。AES是块密码,其对数据块(例如,固定长度的位组)进行操作。XTS-AES算法是AES算法的操作模式。XTS-AES是使用相同的秘密数据密钥和相同的数据调整执行XTS-AES加密规程和XTS-AES解密规程的可调块密码。例如,Prince-XTS块密码1106可以基于数据调整1104和秘密数据密钥1105执行数据加密并且还可以使用相同的数据调整1104和相同的数据密钥1105执行加密数据的对等解密。
参考解密流1100,在通过Prince-XTS块密码1106对数据加密之后,当被加密数据后来被软件访问(例如,加载或存储指令,等)时,在1102在缓冲区中加载加密数据并且将其馈送进Prince-XTS块密码1106。数据调整1104和数据密钥1105也被输入到块密码1106。数据调整1104可以包括密文(例如,604)和与引用加密数据的存储器位置的指针的偏移。在至少一个实施例中,偏移可以包括指针的不可变明文部分(例如,606)和可变明文部分(例如,608)。块密码1106使用数据调整1104和数据密钥1105对加密数据解密。解密数据可以在1110被加载到端口内以供软件使用。
图12示出用于对通过密码编码的指针(诸如指针610或810)所引用的加密数据解密的高级加密标准(AES)计数器模式(AES-CTR)解密流1200。AES-CTR算法是AES算法的操作模式。AES-CTR是可以使用相同的秘密数据密钥和相同的数据调整在AES-CTR模式加密规程和AES-CTR模式解密规程中使用的块密码。例如,在AES-CTR模式加密规程中,AES-CTR块密码基于秘密数据密钥对数据调整加密来创建密钥流,其然后使用XOR操作对数据块加密。在对等AES-CTR解密规程中,AES块密码基于相同的秘密数据密钥对相同的数据调整加密来创建密钥流,其然后使用XOR操作对加密数据的对应块解密。
在示例中,在调用解密流1200之前,在AES-CTR模式加密规程中对数据加密。在AES-CTR模式加密规程中,AES-CTR模式块密码1206基于秘密数据密钥1205对数据调整/初始化向量(IV)1204加密来创建密钥流1207。密钥流1207在XOR操作1208中使用来对数据块加密。这可以对多个数据块执行,其中AES-CTR块密码1206对待加密的每个数据块的新数据调整加密。可以通过使数据调整中的计数器递增来计算该新数据调整。计数器(或调整/IV)1204可以包括密文(例如,604)和与引用加密数据的存储器位置的指针的偏移。在至少一个实施例中,偏移可以包括指针的不可变明文部分(例如,606)和可变明文部分(例如,608)。在完成AES-CTR模式加密规程并且生成加密数据之后,在软件访问加密数据(例如,加载或存储指令,等)时可以调用解密流1200。在解密流1200中,AES-CTR模式加密规程生成的加密数据在1202被加载到缓冲区内。AES-CTR模式块密码1206基于相同的秘密数据密钥1205对相同的数据调整/IV 1204加密来创建密钥流1207。在XOR操作1208中使用密钥流1207来对AES-CTR模式加密规程之前生成的加密数据的对应块解密。这可以对每个块使用新的数据调整(例如,通过使数据调整中计数器递增而计算)来对每个加密数据块执行。解密数据可以在1210被加载到端口内以供软件使用。
一般而言,在对数据加密/解密时,避免在指定分配内对每个块使用相同的调整/IV有利的。因此,调整/IV中的值根据被处理的特定块的位置而变化。在诸如AES-CTR模式(例如,1206)等某些块密码中,初始化向量(IV)包含该概念,因为在生成密钥流的后续块时它被变换(例如,递增)。然而,本文的实施例允许软件从任何存储器访问指令访问分配的任何块。因此,访问的相对偏移必须被包含在调整/IV中。包含在指针中编码的线性地址的偏移是在本文描述的使用偏移的各种实施例中实现此的一个可能方式。
还应注意在1203指示的操作可以与获得待解密的加密数据的操作并行执行。用于获得加密数据的操作包括对通过密码编码的指针解密来形成线性地址并且使用该线性地址来定位加密数据。加密数据然后可以在1202存储在缓冲区中。
图13是图示根据一个或多个实施例用于访问加密数据的示例过程1300的简化流程图,其中加密被绑定到包括加密存储器地址片(例如,密文部分604、804)的指针。图13的流程图图示在一个或多个实施例中实现某些类型的加密/解密技术时可能的并行处理。特别地,如果实施例使用AES-CTR操作模式(例如,图12)用于对数据加密和解密,则用于对数据解密的计数器模式操作中的一些(例如,AES-CTR模式块密码加密操作1320)可以与用于访问待解密的数据的操作(例如,数据访问操作1310)并行执行。
在1312,对通过密码编码的指针(例如,610)解密来获得指针的密文部分(例如,604)的明文。在1314,对指针中的存储器地址解码。例如,解密地址片与较低地址位(例如,不可变明文部分606)连接。另外,偏移(例如,可变明文部分606)可以与线性地址组合(例如,与不可变明文部分连接)。在下文进一步描述的另一个实施例中,解密地址片可以与外部存储(例如,在寄存器中)的较高地址位连接。一旦对存储器地址解码并且获得明文线性地址,就使用任何适合的操作获得存储器中的加密数据的物理地址。在1316,获得加密数据并且基于存储器中的物理地址将其存储在缓冲区中。
为了提高处理中的效率,AES-CTR模式块密码加密操作1320可以与数据访问操作1310并行执行。AES-CTR模式块密码加密操作包括在1322从通过密码编码的指针导出数据调整(例如,初始化向量)。如之前描述的,数据调整可以包括指针密文部分(604)、不可变明文部分606和可变明文部分608的填充。然而,其他实施例可以使用指针的部分的不同变化或组合。此外,其他实施例可以使用从与外部上下文信息组合的编码指针导出的某些数据。在1324,计数器模式块密码通过基于秘密数据密钥对数据调整加密来计算计数器模式密码流(密钥流)。在1326,密码流被存储在缓冲区中。可以基于使调整值递增并且用秘密数据密钥对新数据调整加密来计算额外的密码流。密码流可以存储在缓冲区中使得可以对加密数据的所有块(或高速缓存线)解密。一旦在1316存储加密数据,就可以对每个经缓冲的密码流和加密数据1316的对应块或高速缓存线执行XOR操作。每个XOR操作1330对于相关联的块或高速缓存线产生解密数据1332的块,其可以被软件根据需要加载、读取、重新加密或另外操纵。
图14是图示根据至少一个实施例获得通过密码编码的指针所引用的数据的示例过程1400的简化流程图,其中数据的加密被绑定到指针中的编码线性地址的密文部分。过程1400中的至少一些部分可以被计算装置100的硬件、固件和/或软件执行。在示出的示例中,在1401,通过密码编码的指针1410中的64位编码线性地址被加载到通用寄存器(GPR)内。编码线性地址的密文部分1404(例如,图6的604)使用大小(幂)元数据部分1402(例如,图6的602)和不可变明文部分1406(例如,图6的606)作为地址调整的部分来被解密。尽管地址调整1416和1415被独立指示,但该信息可以采用任何适合的方式组合为单个地址调整,以用于输入到解密算法1420,诸如可调块密码(例如,XTS-AES、LRW等)。在1412,大小元数据部分1402用于确定待用作调整1415的不可变明文部分1406中的位的数量。在至少一些实施例中,外部上下文信息或元数据1414的额外的一个或多个项也可以用作解密算法1420的调整1415的部分。解密算法1420基于地址调整(例如,地址调整1416和1415的组合)和秘密地址密钥1418对密文部分1404解密。
密文部分1404通过解密算法1420来解密,并且从GPR去除大小元数据部分1402。在去除大小(幂)元数据部分1402并且与选择页的明文地址位的部分连接之后,这导致解密虚拟页号1422,其被转换后备缓冲器转换为物理页号。在1424,执行页表查找来将经解密和解码的VPN 1422转换成物理页号。如果在1426确定未找到物理页号,则在1429引发页错误。如果没有发生错误,则经转换的页地址1428作为存储器物理地址1432存储在寄存器1410中,该存储器物理地址是高速缓存线物理地址1435。指针中未用于虚拟页号的明文位(例如,1408)的剩余部分被用作页偏移1434,用以选择存储器中数据的高速缓存线。在示出的示例中,在明文地址偏移1434确定的位置用所选的高速缓存线1440的内容(即,加密数据)的一部分(例如,块)来加载寄存器1441。
在该示例中,以特定大小粒度(任何适合的大小)用计数器模式(例如,AES计数器模式(AES-CTR))来加密数据,其中编码地址用作计数器值(CTR),潜在地与其他元数据连接(如果在使用中的块密码接受足够大的输入的话)。明文偏移可以包括可变明文部分1408的位。IV+CTR连接值(地址调整值)然后可以在1450基于秘密数据密钥1442来加密。所得的密钥流然后在1452与加载高速缓存线数据进行XOR,所述加载高速缓存线数据以与寄存器存储/加载粒度匹配的粒度使用接口1441而被发送到寄存器或执行单元。因此,当处理器使用编码地址执行数据加载(例如,读取)时,数据可以使用秘密数据密钥1442(例如,过程密钥)来被解密,并且依赖于作为调整的编码指针密文和适当的偏移(考虑到对应于寄存器加载的存储器位置)。这样,数据加密/解密依赖于用于在解码存储器位置访问数据的指针。这样,在存储器中分配的每个数据对象可以通过密码绑定到用于访问该数据的通过密码编码的指针。
图15是图示根据至少一个实施例获得通过密码编码的指针1510所引用的数据的示例过程1500的另一个详细流程图,其中数据的加密被绑定到指针的内容。过程1500的至少一些部分可以由计算装置100的硬件、固件和/或软件执行。在示出的示例中,指针1510体现为64位编码线性地址,其包括2位标签/版本部分1501、5位大小(或幂)元数据部分1502、32位密文部分1504、变位(variable-bit)不可变明文部分1506和变位可变明文部分1508。
一般而言,指针1510具有与本文描述的其他指针(例如,610、810、1410)相似的配置。然而,指针1510包括标签/版本部分1501,其可以是随机或确定不同的值。在其他实施例中,两个较高位可以是保留位,其允许通过密码编码的指针与遗留指针并发使用。例如,最高有效位可以用于指示地址是位于超级用户地址空间(例如,“1”)内还是用户模式地址空间(例如,“0”)内。下一个最高有效位可以设置成超级用户位的相反值来指示指针是通过密码来编码或可以设置成超级用户位的相同值来指示指针未通过密码来编码。在其他实施例中,可以在没有专用保留位的情况下实现遗留编码。相反,遗留编码可以通过对大小元数据部分1502中的特定值(例如,全1、全0)编码而实现。如果指针1510包括标签/版本部分1501,则这些位也可以用特定值(例如,全1、全0)编码以允许并发使用遗留和常规编码。在再其他实施例中,如果例如概念未实现为与遗留程序兼容,则遗留编码可以整个被消除。
应注意大小/幂元数据部分1502可能未被解密,因为它用于确定指针的可变和不可变明文部分中的位的数量,并且因此,确定在地址调整(例如,不可变明文部分1506)中使用的位的数量。然而,标签/版本部分1501未用于确定地址调整的大小。因此,备选地可以包括标签/版本部分1501,作为地址的加密部分(即,密文1504)的部分,只要在地址调整中未使用标签/版本部分1501即可。在该备选实施例中,块密码将具有对应的较大块大小来适应标签/版本部分,或密文中包括的地址位将减少并且在明文部分(即,1506和1508)中将包括对应数量的地址位。另外,应注意,尽管用指针1510中示出的编码来图示过程1500,该指针包括标签/版本(或保留位)部分1501,但过程1500可以用具有大小/幂元数据部分(诸如指针610)的其他指针编码来执行,该大小/幂元数据部分不包括标签/版本(或预留位)部分。在该场景中,标签/版本(或保留位)部分可以简单地从地址调整消除。
在以下三个阶段识别过程1500的操作:地址解密(阶段I)、地址形成(阶段II)和数据解密(阶段III)。在阶段I,嵌入指针1510的线性地址被解密。具体地,编码线性地址的密文部分1504通过诸如可调块密码1520等解密算法使用地址密钥1518和地址调整1516来解密。除零填充1511外,地址调整1516还可以包括标签/版本部分1501、大小元数据部分1502和不可变明文部分1506的位。大小元数据部分1502用于确定不可变明文部分1506中位的数量和可变明文部分1508中位的数量,其等于地址调整1516中填充1511的位的数量。在至少一些实施例中,变量长度元数据1517的额外一个或多个项也可以用作可调块密码1520的地址调整1516的部分。例如,变量长度元数据可以包括如本文之前描述的其他上下文信息或元数据(例如,准许、特许级别、类型、位置、所有权等)。在再另外的实施例中,密码上下文标识符寄存器1515可以用作地址调整1516的部分。密码上下文标识符寄存器1515可以包含与特定功能组(例如,过程、过程的子集、虚拟机(VM)、VM的子集等)相关联的唯一值(例如,随机或确定生成的)。块密码1520可以是如本文指出的任何适合的解密算法(例如,32位块大小密码的可调版本,诸如SIMON、SPECK、K密码,或其他可变块大小密码,或对于较大地址,可以使用PRINCE、XTS-AES块密码、LRW、AES-CTR模式等)。
当编码线性地址的密文1504部分被可调块密码1520解密为解密地址片1524时,则在阶段II可以形成经解码的线性地址1530。如果包括标签/版本部分1501作为地址的加密部分(即,密文1504)的部分,则在形成经解码的线性地址1530时,经解密的基址片1524中的标签/版本部分应用符号扩展位1522来改写。在至少一个实施例中,最高位(例如,标签/版本部分1501和大小部分1502)可以设置成相同的位值(例如,0或1)。另外,不可变明文部分1506和可变明文部分1508的位组成经解码的线性地址1530的较低位。在一些实施例中,处理器可以检查解密地址片1524中的较高位的片是否具有预期值,作为解密地址片1524是否被不正确解密的指示。例如,在一些分页模式中,需要某一数量的较高地址位全部具有相同值(即,全0或全1)。如果解密地址片1524中的对应位具有不同的值,则指示解密地址片1524被不正确解密。一些实施例在该情况下可能生成错误。一些其他实施例可以依赖现有的规范性检查以在该情况下在使用经解码的线性地址1530时生成错误。即使较高位全部具有相同值,这也并没有结论性地指示解密地址片1524被正确解密。一些实施例可以针对当前操作中待访问的最小和最大地址二者的预期位值执行前面提到的检查,使得如果访问的任何部分出界则将可能生成错误。其他实施例可以只需要访问的特定部分(例如,第一字节)在指针的界限内,并且因此只对访问的该部分的指针上的预期位值执行前面提到的检查。其他实施例可以针对写操作检查最小和最大地址,但针对读取只检查单个指针值,依赖于数据密码可能防止部分出界的读取返回正确的明文。
在阶段III,经解码的线性地址1530用于找到待解密的加密数据的存储器位置。加密数据通过诸如密钥流生成器1550等解密算法来解密。在至少一个实施例中,以特定大小粒度(任何适合的大小),密钥流生成器1550可以实现为AES-CTR模式块密码。在该实施例中,通过密码编码的指针的内容用作初始化向量(IV)或数据调整1544,其中明文偏移(例如,1508)用作计数器值(CTR)。密钥流1551的生成可以不等待解密地址片1504完成就开始。密钥流生成器1550基于数据密钥1542对数据调整1544加密来生成密钥流1551。数据调整1544的值在用作到密钥流生成器的输入之前可以被调节为与0全等(以密钥流生成器1550的块大小为模)。数据调整1544的值可以使某一适合数量的最低有效位设置成0来满足该要求,并且可以丢弃密钥流1551的前缀来说明(account for)该调节。丢弃的密钥流1551的字节的数量可以通过从数据调整1544的未经调节值减去数据调整1544的调节值来计算。该调节可以对小于块大小的对象修改指针中的不可变明文1506的值。然而,数据加密可以间接绑定到经修改的不可变位的值,因为那些位可以包含在用于生成密文1504的调整中。如果待解密的存储器跨过一个或多个块对齐边界,则可以对后续块重新调用密钥流生成器1550,其中每当它被重新调用时数据调整1544增加等于块大小的量。可能不需要所生成的密钥流1551的后缀并且因此将它丢弃。然后对密钥流1551和从经解码的线性地址1530所引用的存储器位置选择的加密输入数据块(或高速缓存线)1546执行XOR操作1552。加密输入数据块1546的粒度与从密钥流生成器1550输出的密钥流1551匹配,并且XOR操作1552产生经解密的输出数据块1554。同样,当将数据存回高速缓存/存储器时可以执行相同的操作,其中来自处理器寄存器的明文数据可以与对编码地址1544的密钥流输出1551进行XOR,并且所得加密数据被写回存储器。
转向图16,图16是根据本公开中的至少一个实施例的通过密码编码的指针的另一个实施例的图。特别地,图16示出采用加密基址(EBA)格式的通过密码编码的64位指针1610(地址)(在本文也称为“EBA指针”)。在示出的示例中,EBA指针包括超级用户位(S位)1601A、编码指示符位(E位)1601B、动态上下文查找位(D位)1601C、4位标签/版本部分1602、32位加密基址(EBA)部分1604和25位偏移部分1606。利用典型的规范编码,与最高有效位相邻并且不是编码地址的部分的位具有与最高有效位相同的值以便视为规范的(例如,常规或非通过密码编码的指针)。在用于57位分页的64位寄存器中,最高有效的7个位未用作57个地址位的部分。在EBA指针1610的实施例中,七个最高有效位可以包括三个较高位1601A-1601C和四个标签/版本位1602。
可以对指针的两个较高位(例如,1601A、1601B)编码来指示指针是通过密码编码的指针而不是常规指针,使得两个类型的指针都可以潜在地在单个地址空间中使用。例如,超级用户位1601A用于指示编码线性地址是在超级用户地址空间(例如,“1”)中还是用户模式地址空间(例如,“0”)内。编码指示符位1601B可以指示指针是通过密码编码的指针还是遗留指针(即,未通过密码编码)。例如,编码指示符位1601B可以设置成超级用户位1610A的相反值来指示指针通过密码来编码,或可以设置成超级用户位1601A的相同值来指示指针未通过密码来编码。在其他实施例中,可以不使用较高位1601A和1601B。相反,在没有专用位的情况下可以通过对标签/版本部分1602中的特殊值(例如,全1、全0)编码来指示指针未通过密码编码而实现遗留编码。这些特殊值(即,全1、全0)是用户与超级用户空间之间的较高线性地址位的遗留非规范编码。标签/版本部分中的任何其他值可以指示指针被编码为具有标签/版本部分的通过密码编码的指针。因此,两个类型的指针(例如,常规和通过密码编码有标签/版本部分)可以潜在地在相同的地址空间中使用。在再其他实施例中,如果例如概念未实现成与遗留程序兼容,则遗留编码可以整个被消除。可选的动态上下文查找位1601C可以用于指示如何获得上下文信息以供在地址调整中使用来对指针中和/或数据调整中的编码线性基址片解密以对加密数据解密。例如,动态上下文查找位1601C可以指示是静态(例如,在寄存器中、嵌入代码中)还是动态(例如,在存储器中)获得上下文信息。然而,该特征是可选的,并且在至少一些实施例中,上下文信息可以存储在一致位置(例如,存储器中的存储结构)中。
标签/版本部分1602可以在地址调整和数据调整中使用,并且可以是对特定有效指针所引用的存储器区或存储器分配唯一的数量或值。在一个示例中,标签/版本部分1602是随机化的位串(例如,4个位或任何其他适合的值)。在另一个示例中,标签/版本部分1602是确定值,诸如每当对特定存储器分配生成指针时递增预定义量的序列号。可以在任何适合的粒度(例如,通过程序、通过特定线性地址等)实现版本化。标签/版本部分向地址调整和/或数据调整的加密添加多样性。然而,在没有标签/版本部分的情况下,使用调整中的上下文信息或使用调整中的上下文信息和较高地址位可以使地址加密和数据加密足够安全。
在EBA指针1610中,对数据的线性基址编码。64位指针可能没有足够空间来对数据的整个基址编码。因此,对基址片加密并且将它存储在指针中。在该示例中,基址的位3至34被加密并且组成EBA指针1610的加密基址部分1604。未嵌入指针1610中的较高地址位(UAB)与指针分开存储。当对指针解码时,较高地址位可以从与数据(或代码)相关联的表条目、从独立寄存器、从数据访问指令中的操作数或从涵盖多个对象(或代码段)的寄存器中取出。指针中剩余的25个位包括数据内的偏移。该偏移规定指针1610指向的基址以外的字节的数量。典型地,偏移部分1606设置成零。然而,指令可以定义成基于特定需要和实现使偏移部分1606初始化为任何期望数量,这应是明显的。偏移可以被软件操纵,例如对于指针运算或其他操作。EBA指针1610的经加密的基址部分1604(例如,在示出的示例中是32个位)可以用小的可调块密码(例如,32位块大小的SIMON、SPECK或K密码,或其他变位大小可调块密码)来加密。
图17是在对具有经加密的基址的指针(诸如EBA指针1610)编码和解码时可以使用的示例上下文信息1700的图。在至少一个实施例中,上下文信息1700是与指针分开存储并且可以被动态访问来检索对编码线性地址片以及可能地由该线性地址所引用的数据加密或解密所需要的上下文信息的一个表条目。在该示例中,上下文信息1700包括较高地址位(UAB)字段1702、存储器分配大小字段1704、类型字段1706和准许字段1708。
UAB字段1702包括要与来自指针1610的解密基址连接的较高位。例如,经加密的基址部分1604可以仅包含线性地址的32个位(加密)(例如,位3至34),上下文信息1700中的UAB字段1702可以包含22个位,并且最低三个位(位0-2)可以设置成“0”来使基址与8字节边界对齐。最低三个位可以不在指针中编码。一旦对经加密的基址部分1604解密,UAB字段1702中的位就可以从存储器中存储的上下文信息1700或从寄存器获得并且与经解密的基址片连接。设置成“0”的较低三个位也可以在地址末端连接。
上下文信息可以嵌入代码(例如,在指令操作数中)中或可以存储在存储器中。应注意如果较大寄存器(例如,128位寄存器、256位寄存器等)用于通过密码编码的指针,则整个基址可以在指针中编码。然而,对于64位寄存器,经加密的基址部分(例如,1604)可能太窄而不能规定完整的基址。因此,在存储器访问请求(例如,加载、存储)期间,较高地址位可以从另一个存储位置取出。在一些场景中,高地址位可以例如与其他上下文信息一起存储在存储器中。在其他场景中,高地址位(例如,1702)可以存储在寄存器中,而其他上下文信息中的一些或全部存储在存储器中。在该场景中,上下文信息1700中的UAB字段1702可以固定为零,因为要与经解密的基址片连接的较高地址位可以由控制寄存器隐式供应。
在指针1610所引用的存储器位置,存储器分配大小字段1704可以用数据的确切大小来编码。存储器分配大小字段1704可以局限于25个位来匹配指针1610中的偏移部分1606的宽度。当执行数据访问时,由处理器检查指针1610中的偏移部分1606来确保它未超出存储器分配大小字段1704中的值。
类型字段1706可以包含十四个位并且用于规定不同类的编程语言。在某些编程语言中,通过使用针对特定类的对象的指针来获得不同类的数据(或对象)并且然后试图基于不同类来对待数据,可以导致错误。因此,在为数据分配存储器并且生成指针时,可以确定数据类型(例如,对象类型)并且将其存储为指针的上下文信息1700中的部分。当在程序中访问指针时,规定为上下文信息1700的部分的类型信息可以与程序中规定的预期类型ID相匹配来减轻类型混乱漏洞。
准许字段1708可以包含3个准许位(XWR)。这是分页准许顶部的准许层,所述分页准许诸如读、写和执行。准许可以基于对分页准许和上下文准许执行的交叉操作来确定。例如,如果准许位指示指针仅可读,则即使页表说所被映射的存储器可写,那么写访问也将被处理器拒绝,因为选择了限制性最大的准许。在另一个示例中,如果上下文准许指示存储器可读并且可写,但页表说它仅可读,则可以拒绝写访问。
图18A-18B图示获得通过密码编码的指针1810的实施例所引用的数据的示例过程1800A-1800B的详细流程图,其中数据的加密被绑定到指针的内容。过程1800A-1800B中的至少一些部分可以由计算装置100的硬件、固件和/或软件执行。在示出的示例中,指针1810体现为64位编码线性地址,其包括保留部分,该保留部分包括超级用户位(S位)1801A、编码指示符位(E位)1801B和动态上下文查找位(D位)1801C。指针1810还包括标签/版本部分1802、经加密的基址部分1804和偏移部分1806。一般而言,指针1810具有与指针1610相似的配置。
在以下三个阶段中识别过程1800A-1800B的操作:地址解密(阶段I)、地址形成(阶段II)和数据解密(阶段III)。在阶段I,嵌入指针1810的线性地址被解密。具体地,编码线性地址的EBA部分1804通过诸如可调块密码1820等解密算法使用地址密钥1818和地址调整1816来解密。地址调整1816可以包括标签/版本部分1802的位。备选地,只要在地址调整中未使用标签/版本部分1802,标签/版本部分1802就可以被解密为EBA部分1804的部分。在该备选实施例中,块密码将具有对应的较大块大小来适应标签/版本部分,或可以从上下文信息供应更长的较高地址位的片。无论是否被加密,标签/版本部分1802都可以在数据调整中使用以用于数据加密。另外,上下文信息1809的一个或多个项可以包括在地址调整1816中。例如,来自上下文信息1809的存储器分配大小字段1812、类型字段1813和准许字段1814的位可以包括在地址调整1816中。在另外的实施例中,明文较高地址位1811还可以用作地址调整1816的部分。在再另外的实施例中,密码上下文标识符寄存器1815可以用作地址调整1816的部分。密码上下文标识符寄存器1815可以包含与特定功能组(例如,过程、过程的子集、虚拟机(VM)、VM的子集等)相关联的唯一值(例如,随机或确定生成的)。在至少一些实施例中,变量长度元数据1817的额外一个或多个项也可以用作可调块密码1820的地址调整1816的部分。例如,变量长度元数据可以包括如本文之前描述的其他上下文信息或元数据(例如,特许级别、位置、所有权,等)。块密码1820可以是如本文指出的任何适合的解密算法(例如,XTS-AES块密码、LRW、AES-CTR模式等)。
当编码线性地址的EBA部分1804被可调块密码1820解密为经解密的基址片1824时,则在阶段II可以形成经解码的线性地址1830。首先,如果标签/版本部分1802被加密为EBA部分1804的部分,则在形成经解码的线性地址1830时应从经解密的基址片1824排除标签/版本部分。接着,可以从寄存器中的上下文信息(或从如本文之前描述的其他存储)获得较高地址位1811并且它与经解密的基址片1824连接。在至少一些实施例中,基本对齐位1825与经解密的基址片1824连接来形成最低有效位。这也可以通过执行适当数量的移位的左移操作而完成。在该示例中,基本对齐位1825包括三个位。基本对齐位1825设置成零以便使地址与8字节边界对齐。通过将指针1810的偏移部分1806中的偏移增加到经解密的基址1826以获得线性地址位1834,来形成经解码的线性地址1830。同样,超级用户位1801A在未用/非规范位(例如,相邻的六个位1832)中被复制,并且所有未用/非规范位与线性地址位1834连接。在一些实施例中,被复制来充填经解码的线性地址1830中的更高有效位的线性地址位1834是最高有效位。
在阶段III,经解码的线性地址1830用于找到待解密的加密数据的存储器位置。另外,经解码的线性地址1830和编码指针1810可以用于创建数据调整1844以用于对加密数据解密。如在图18A的阶段II中示出的,数据调整1844可以包括编码指针1810的标签/版本部分1802以及经解码的线性地址1830的线性地址位1834。另外,可以包括S位1801A并且根据需要复制它例如来充填任何剩余的未用/非规范位1833。另外,在数据调整1844中可以包括其他上下文信息。例如,在调整中可以包括密码上下文ID寄存器1815和/或在调整中还可以包括任何其他变量长度元数据1836。变量长度元数据1836可以包括如本文之前描述的其他上下文信息或元数据(例如,特许级别、位置、所有权、类型、准许、存储器分配大小等)。包括存储器分配大小和线性地址位1834结合以下中的一个或多个对于数据调整1844可以是特别有利的:(1)类型;(2)标签/版本;(3)类型和标签/版本;(4)密码上下文ID;或(5)密码上下文ID和准许级别。使用IV/数据调整1844中的明文线性地址位1834而不是加密指针位(例如EBA 1804)使具有不同界限、准许或其他元数据的多个指针能够同时引用相同分配,并且全部对数据正确加密和解密使得可以使用该组中的任何指针来访问它。在IV/数据调整1844中可以包括这样的元数据,其不被准许在可以同时用于访问相同存储器的指针组内变化,因为数据在使用该组中的某一指针而被访问时,如果之前它是使用该组内具有IV/数据调整1844中所包括的不同元数据的另一个指针来对它加密,则包括被准许在该组内变化的元数据可以导致该数据被不正确解密。
在一些实施例中,添加经解密的基址1826(或经解密的基址片1824)的副本作为数据调整1844的部分,这可以是有利的。为了说明该方法的优势,考虑其中对象A被分配和释放并且随后对象B在重叠位置被分配的相继重叠存储器分配。即使两个分配在分开时间重叠,但利用相同标签/版本的不同基址,使用指向重叠存储器位置的悬垂(dangling)指针将没有对甚至对象B的重叠部分启用正确解密,因为它们具有不同的基址。
通过经解码的线性地址1830获得的加密数据在图18B中示出的阶段III中被解密。一旦数据密钥1842变得可用并且已计算IV/数据调整1844(这可能需要等待EBA 1804被解密),数据解密就可以开始。加密数据通过诸如密钥流生成器1850等解密算法来解密。在至少一个实施例中,密钥流生成器1850可以在特定大小粒度(任何适合的大小)实现为AES-CTR模式块密码。在该实施例中,从经解码的线性地址1830(例如,线性地址位1834、超级用户位1801A、两个复制位1833)以及从编码指针(例如,标签/版本部分1802的标签位)导出密钥流生成器1850的数据调整1844(或初始化向量)。数据调整1844可以另外包括外部上下文信息(例如,密码上下文ID寄存器1815和/或其他变量长度元数据1836)。密钥流生成器1850基于数据密钥1842对数据调整1844加密来生成密钥流1851。在用作到密钥流生成器的输入之前,数据调整1844的值可以被调节为与0全等(以密钥流生成器1850的块大小为模)。数据调整1844的值可以使某一适合数量的最低有效位设置成0来满足该要求,并且可以丢弃密钥流1851的前缀来说明该调节。要丢弃的密钥流1851的字节的数量可以通过从数据调整1844的未经调节值减去数据调整1844的调节值来计算。如果待加密的存储器跨过一个或多个块对齐边界,则可以对后续块重新调用密钥流生成器1850,其中每当密钥流生成器1850被重新调用时数据调整1844增加等于块大小的量。可能不需要所生成的密钥流1851的后缀并且因此将它丢弃。然后对密钥流1851和从经解码的线性地址所引用的存储器位置选择的加密输入数据块(或高速缓存线)1846执行XOR操作1852。加密输入数据块1846的粒度与从密钥流生成器1850输出的密钥流1851匹配,并且XOR操作1852产生经解密的输出数据块1854。
图19是用于对存储器创建和使用通过密码编码的指针的示例过程1900的流程图。过程1900中的至少一部分可以由计算装置100的硬件、固件和/或软件执行。在图19中示出的示例中,在1902,处理器执行软件程序的函数所请求的存储器分配。例如,malloc(存储器分配)指令可以在C编程语言软件中使用来为数据动态请求存储器(例如,变量、缓冲区、阵列等)。malloc指令在堆上分配存储器并且还在堆栈上分配指针。在一个或多个实施例中,存储器分配指令(诸如malloc)配置成生成指向已分配存储器的通过密码编码的指针。通过密码编码的指针可以具有任何适合的配置,诸如指针610、810、1410、1510、1610、1810或其任何其他适当的变化。特别地,通过密码编码的指针包括对于已分配存储器的线性地址的加密片。通过密码编码的指针还包括额外元数据(例如,大小、标签等),以及潜在地包括保留位。在至少一些实施例中,指针包括对于线性地址的偏移或可变部分。
在1904,通过密码编码的指针返回函数。在1906,通过密码编码的指针可以被加载到通用寄存器(GPR)内。软件程序可以操纵对编码指针定义的数据结构的界限内的指针。例如,如果采用与指针610、810、1410或1510相同或相似的配置对指针编码,则可变明文部分(例如,608、808、1408、1508)可以被操纵(例如,运算、乘法等)来访问已分配存储器中的数据结构内的不同字节。在一个示例中,如果采用与指针1610或1810相同或相似的配置来对指针编码,则可以在存储器分配大小元数据(例如,1704)所定义的界限内操纵偏移部分(例如,1606、1806),该存储器分配大小元数据可以存储在上下文信息寄存器中(例如,作为上下文信息1700的部分)。
在1910,数据访问指令(诸如读指令)由软件程序执行并且包括对于指针的存储器操作数。存储器操作数可以是包含指针的寄存器。对于其中上下文信息与指针分开的实施例中,指令可以包括采用另一个寄存器形式的存储器操作数或对于上下文信息的立即操作数。
在1912,对指针解码来找出加密数据。对指针解码可以通过执行解密算法(例如,块密码,诸如XTS-AES、LRW、AES-CTR模式等)以基于秘密地址密钥和地址调整来对加密地址片(例如,密文部分604、804、1404、1504、EBA部分1604、1804)解密而实现。地址调整包括与指针相关联的至少一个元数据值。例如,元数据值可以包括嵌入指针内的一个或多个元数据项(例如,大小元数据部分602、802、1402、1502、标签/版本部分1602、1802,不可变明文部分606、806、1406、1506,其他上下文信息等)、一个或多个外部上下文信息项(例如,存储在上下文信息寄存器中、存储在要动态访问的表中或作为指令中的立即操作数被传递的元数据)和/或密码上下文标识符寄存器。为了形成经解码的线性地址,根据指针的特定编码(例如,不可变明文部分606、806、1406、1506,可变明文部分608、808、1408、1508、较高地址字段1702、1811),解密地址片与其他线性地址片连接。根据指针编码和地址寄存器大小(例如,最高有效位1801A、1832的复制、符号扩展1522等),也可以向解密线性地址增加偏移并且额外较高位可以被填充或设置成特定值。
在1914,在通过使用解码线性地址访问加密数据之后,可以通过执行解密算法(例如,块密码,诸如XTS-AES、LRW、AES-CTR模式等)以基于秘密数据密钥和数据调整来对数据解密而计算解密数据。数据调整值至少部分从通过密码编码的指针导出。例如,数据调整可以包括来自指针的加密地址片(例如,密文部分604、804、1404、1504,EBA部分1604、1804)和/或来自指针的解密地址片(例如,1524、1824)。其他明文线性地址位可以与加密地址片连接。如果在调整中使用解密地址片,则它可以与其他明文地址位连接以便获得实际线性存储器地址并且可以向线性存储器地址增加偏移以用作调整(或调整的部分)。在至少一些实施例中,数据调整还可以包括通过密码编码的指针的其他部分或甚至通过密码编码的指针的整个内容。在一个或多个实施例中,数据调整节个从通过密码编码的指针导出。在另外的实施例中,数据调整可以包括上下文信息(例如,存储在上下文信息寄存器中、存储在要被动态访问的表中或作为指令中的立即操作数被传递的元数据)的一个或多个项,和/或密码上下文标识符寄存器。同样在1914,解密数据可以被加载在通用寄存器(GPR)中。
如果程序正确地对指针解码,则数据可以被正确解密。然而,如果指针被不正确解码为不正确的线性地址,则可能发生页错误。即使不发生页错误,但不正确的线性地址可能访问随机存储器并且将试图使用无效数据调整对来自该随机存储器的数据解密。因此,在一个或多个实施例中提供两级保护。
在1916,可以对GPR中的数据执行操作。一般而言,可以根据软件程序来操纵解密数据。在1918,确定存储指令的一个或多个存储器操作数。例如,编码指针可以作为存储指令的操作数而被提供。
在1920,对通过密码编码的指针解码来形成解码线性地址,如本文之前描述那样。待存储的数据通过执行加密算法(例如,块密码,诸如XTS-AES、LRW、AES-CTR模式等)以基于秘密数据密钥和数据调整对GPR中的数据加密而被加密,如之前描述那样。数据调整至少部分从通过密码编码的指针导出。对GPR中的当前数据执行数据加密来使解密过程R反转。如果GPR中的当前数据被修改,则新加密的数据将与之前在1912从存储器检索的加密数据不同。一旦数据被加密,它可以基于解码线性地址存储在存储器中。
在1922,存储器可以被解除分配,并且因此,通过密码编码的指针被释放。
图20是根据至少一个实施例使用通过密码编码的指针来访问存储器的示例过程2000的流程图。过程2000的至少一些部分可以由计算装置100的硬件、固件和/或软件执行。在图20中示出的示例中,如在2002指示的,处理器基于与本文之前描述的指针(例如,610、810、1410、1510、1610、1810)相似的指针中编码的地址来执行加载/存储操作。在2004,处理器从立即值或从寄存器获得编码地址(例如,指针610、810、1410、1510、1610或1810)。在2006,处理器然后确定地址/指针是否是非规范的/被编码。如果地址是规范的/未被编码,则在2008,处理器生成一般性保护错误。
如果地址是非规范的/被编码的,则在2010,处理器使用可调块密码对地址位(例如,密文部分604、804、1404、1504、EBA部分1604、1804)解密,该可调块密码诸如XOR-加密-XOR(XEX)块密码模式、带密文窃取的基于XEX的调整码本模式(XTS)块密码模式或Liskov、Rivest和Wagner(LRW)块密码模式。在一些实施例中,地址/指针中的幂位(例如,大小元数据部分602、802、1402、1502)指示/确定指针中可以用作可调块密码的地址调整的明文地址位的数量。一些编码(例如,EBA)可以使用与指针分开存储的明文较高地址位。另外,编码元数据本身(例如,幂/大小位、标签/版本位等)也可以包括在地址调整中。在一些实施例中,在地址调整中可以包括外部上下文信息。例如,这样的上下文信息可以包括元数据,诸如存储器分配大小、类型、准许、特许级别、位置、所有权或其任何组合。在再另外的实施例中,在调整中可以包括密码上下文ID寄存器。
在一些情况下,处理器可以通过不包括低阶位(未示出)作为对密文的调整而在这些低阶位的幂界限内允许有指针运算。在一个示例中,在计算有效地址(其之后被转换为物理地址)时可以采用某些寻址模式(允许存储器操作数规定要对地址执行的运算)执行指针运算。在2014,过程然后可以去除非规范位(例如,幂位、标签位、保留位)并且用所得的解密地址以在加载/存储操作中生成真线性/虚拟存储器地址。额外地址位(例如,不可变明文部分606、806、1406、1506的位、较高地址字段1702、1811中的位)可以与解密地址片连接来形成整个地址。同样,可以向线性地址增加偏移(例如,1606、1806)以在已分配的存储器中选择特定位置。在2016,做出关于地址是否被破坏的确定。如果确定地址被破坏,则在2018,处理器可以生成一般性保护错误、页错误等。如果地址未被破坏,则在2020,处理器可以使用解密地址完成存储器加载/存储操作(例如,MOV操作)。
图21-23是根据至少一个实施例与使用可调块密码来对存储器地址加密/解密有关的示例过程的流程图。图21-23的过程中的至少一些部分可以由计算装置100的硬件、固件和/或软件执行。在流程图中,可调块密码(例如,使用XTS-AES或LRW块密码模式)用于对存储器地址(线性或虚拟)加密。存储器分配器(例如,来自glibc的malloc、new或其他软件分配方法)可以利用密码指令集架构(ISA)来创建编码存储器地址/指针(例如,通过密码编码的指针610、810、1410、1510、1610、1810)。
图21中示出的过程2100可以在2102以存储器分配器(例如,malloc指令)被软件程序发起而开始。在2104,调用方(例如,软件程序中的函数)请求一定数量的存储器。例如,调用方可以请求16个字节的存储器。在2106,做出关于堆是否有足够存储器可用于满足所请求的存储器分配的确定。如果有足够的堆存储器可用于满足所请求的存储器分配,则在2112,拥有存储器的特许组件(例如,操作系统(OS)或虚拟机管理器(VMM))授权大部分的存储器。特许组件为过程或虚拟机设置秘密地址密钥和秘密数据密钥,并且因此,可以使用该秘密地址密钥、地址密钥和处理器使用的密码算法计算编码指针值。该编码存储器地址指针可以具有一定范围,分配器可以基于存储器分配库函数的地址(OS内核所加载的代码的位置)而利用该范围。OS也可以将该指针绑定到过程的上下文,在所述过程中操作存储器分配。内核可以指派具有访问任何数据的能力的函数(基于其在存储器中的位置)。
如果在2106确定堆没有足够可用存储器来满足所请求的存储器分配,则在2108,内核使用秘密地址密钥对指向堆的指针编码。在2110,内核使编码堆指针返回存储器管理器。一般而言,内核对过程分配额外堆存储器并且使指向该额外存储器的编码指针返回过程内的存储器管理器模块。存储器管理器模块然后基于对程序内的存储器分配例程的调用将已分配的存储器区细分。内核生成编码指针,其涵盖被传递到存储器管理器模块的控制的大的区,并且然后存储器管理器模块生成编码指针,其涵盖个体对象分配。
从该第一编码,分配器可以在2120调用新的处理器指令,其可以被格式化为与以下相同或相似:
SCOPE GPRx,大小:GPRx中的编码指针、旧指针中的旧大小、新大小改变指针幂
对于SCOPE指令,从通用寄存器(GPR)中的编码指针值获得oldSize并且在另一个寄存器中规定newSize。初始指针是在知道地址密钥和地址调整的情况下由OS内核或其他特许软件提供的地址编码。
处理器可以执行SCOPE指令,并且在2122,使用oldSize(例如,602)相关联数量的中间地址位(例如,606)作为调整以及秘密地址密钥来对编码指针解密,所述秘密地址密钥最初由特许软件针对对于在非特许过程中运行的软件是不可读的过程(例如,在模型特定寄存器或控制寄存器中)配置。在2126,大小值(例如,602)变为新的减小的大小值。在2128,处理器则可以针对与存储器分配器使用相同秘密地址密钥的相同上下文计算在规定的起始偏移用新的减小的大小(幂)位(例如,602)重新加密的新的编码指针值。也就是说,在2122被解密的地址片(例如,604)基于相同的秘密地址密钥和新的调整使用密码算法(例如,可调块密码,诸如XTS-AES、LRW、AES-CTR等)来重新加密,其中新的调整包括新的减小的大小元数据(例如,602)和新的数量的不可变明文地址位(例如,606)。不可变明文地址位是‘新的’,因为大小元数据中的改变改变了不可变明文地址位中所包括的位的数量。在该实施例中,因为新大小元数据减少,不可变明文地址位的数量增加并且可变明文地址位减小。在其他配置中,使大小元数据减少可以导致不可变位的数量减少。该新的地址(其中可变地址位的数量减小)表示可以供调用存储器分配器的函数使用的堆的较小范围,只要它留在指定大小内(例如,可以只操纵未被用作地址调整的部分的可变明文位608)即可,从而允许存储器分配器分配如图6图示的适当大小的存储器。在2130,通过密码编码的地址片可以通过通用寄存器输出。指针的编码版本(具有加密地址片和新大小元数据)可以在2114被返回给调用方(例如,软件程序的函数)。
在2116,调用方可以仅在已分配范围内使用所接收的通过密码编码的指针。当程序函数试图利用存储器分配器返回的编码地址时,它可以开始用编码地址(指针)写入数据。利用存储器操作符的任何指令(例如,MOV、ADD、SUB等)可以使用编码地址作为存储器操作数。相似地,程序可以对已分配数据使用SCOPE指令向下进一步识别较大存储器结构内的个体数据类型,从而造成分配大小(例如,幂位602)进一步减少。
现在参考图22,图22图示用于对编码存储器地址(指针)片加密的示例过程2200。当程序想限制指针的所有权(例如,在有准许的情况下对特定函数提供访问控制)时,它可以调用与以下相似地被格式化的加密指针指令(ENCRYPTPTR)2202:
ENCRYPTPTR GPRx、上下文;用上下文(寄存器)调整加密的寄存器(GPR)中的指针值
如在图22中示出的,在2204,在诸如通用处理器寄存器(GPR)等寄存器中访问编码存储器地址,并且在另一个寄存器中访问地址调整的上下文信息。在2206,处理器则确定编码地址是否是非规范的/被编码的。如果编码地址是规范的/未被编码的,则在2208,处理器生成一般性保护错误。如果编码地址是非规范的/被编码的,则在2210,加密指令可以取规定GPR(处理器寄存器)中的编码指针的密文部分,并且另外用来自被用作调整(和秘密数据密钥)的另一个寄存器的上下文信息来对它加密。加密可以使用块密码模式(诸如如在图22中示出的XEX、XTS-AES或LRW模式)来执行。在一些实施例中,上下文信息可以规定函数(通过它的存储器范围,或虚拟页号)和准许以用于对编码指针解密。在2212,用所计算的密文来替换寄存器内容并且完成指令,如在2214指示那样。
图23图示用于继执行图22的ENCRYPTPTR指令之后在某一时刻对编码存储器地址(指针)片解密的示例过程2300。经授权的函数(如由虚拟页号或存储器中其代码的位置所定义)则可以调用与以下相似地被格式化的解密指令(DECRYPTPTR)2302:
DECRYPTPTR GPRx,上下文;考虑到函数位置在上下文内,对GPR中的指针值解密
如在图23中示出的,在2304,在诸如通用处理器寄存器(GPR)等寄存器中访问编码存储器地址,并且在另一个寄存器中访问地址调整的上下文信息。在2306,处理器则确定编码地址是否是非规范的/被编码。如果编码地址是规范的/未被编码,则在2310,处理器生成一般性保护错误。如果编码地址是非规范的/被编码,则在2308,如果上下文反映访问控制决策(使用调用方函数的位置),则存储器可以检验执行解密指令的代码落在所规定的上下文范围或虚拟页号内,否则它可以在2310生成错误。如果执行指令的代码落在规定范围内,则在2312,处理器可以使用秘密地址密钥和地址调整(由上下文信息形成)将指针解密到规定的GPR中。
在一些实例中,软件可以对GPR中的该解密值执行指针运算(例如,加法、减法或乘法)以索引化到阵列或数据结构(例如,如在图20中示出的)。它然后可以使用该GPR作为存储器引用(指针)来访问存储器中的数据(加载/存储操作)。此外,在一些实例中,经解密的GPR值可能无法被软件读取,如在2314确定的,并且读取寄存器或使寄存器移到存储器或使寄存器的内容移到另一个寄存器的任何尝试可以导致用初始上下文对存储在其中的值重新加密。在提供加密指针的准许的情况下,授权函数可以有准许对指针重新加密,其中对其选择的另一个授权函数(或多个函数,例如使用较大的存储器范围)使用ENCRYPTPTR指令(基于上下文参数中规定的新存储器范围或虚拟页号)。这样,加密指针值可以从一个授权函数传递到下一个。准许还可以限制对所引用指针的数据的访问,例如只读、读和写或执行。
图24是图示获得由另一个实施例的编码指针2410所引用的数据的示例过程2400的详细流程图,其中数据的加密被绑定到指针的内容。过程2400中的至少一些部分可以由计算装置100的硬件、固件和/或软件执行。在示出的示例中,指针2410体现为64位编码线性地址,其包括7位标签/版本部分2402和57位可变明文地址部分2408。标签/版本部分2402可以包括时间安全位,每当针对所请求的存储器分配而对指针编码时随机生成该时间安全位。备选地,标签/版本部分2402可以包括对于所请求的存储器分配的版本号或任何确定的唯一值。例如,标签/版本部分2402可以是按顺序递增的数字,每当针对所请求的存储器分配而对指针编码时生成该数字。尽管可以使用任一方法,但在其中地址位中没有一个被加密的实施例中,具有随机生成的位的标签可以提供更大的保护来防止攻击,因为随机生成的位比确定不同的值(诸如按顺序递增的数字)更难以确定。对于本文公开的其中地址的一部分被加密的其他实施例,版本可以更加可取,因为加密提供保护来防止攻击,并且版本号使用更少的资源来生成。
应注意标签/版本部分2402和地址部分2408可以配置有不同数量的位(例如,5位标签/版本部分和59位地址部分2408等)。在其他实施例中,可以对额外位编码以允许编码指针2410与遗留指针并发被使用。例如,编码指针可以分配有2位保留部分、5位标签/版本部分和57位明文地址部分。在该实施例中,2位保留部分可以被指派为超级用户位和编码位指示符。超级用户位可以指示地址是位于超级用户地址空间(例如,“1”)内还是用户模式地址空间(例如,“0”)内。编码位指示符可以设置成超级用户位的相反值来指示指针被编码(例如,利用标签/版本位)或可以设置成超级用户位的相同值来指示指针未被编码。在其他实施例中,可以在没有专用位的情况下实现遗留编码。相反,遗留编码可以通过对标签/版本部分2402中的特定值(例如,全1、全0)编码而实现。在再其他实施例中,如果例如概念未实现成与遗留程序兼容,则遗留编码可以整个被消除。
在以下两个阶段识别过程2400的操作:地址形成(阶段I)和数据解密(阶段II)。过程2400不包括地址解密阶段,因为编码线性地址未被加密。相反,在可变明文地址部分2408中对线性地址编码。
在阶段I,经解码的线性地址2430可以由编码指针2410形成。在至少一个实施例中,不是线性地址的部分的最高位2422(标签/版本部分2402)可以设置成相同的位值(例如,0或1)。可变明文地址部分2408的位组成经解密的线性地址2430的较低位。
经解码的线性地址2430用于找到在阶段II中待解密的加密数据的存储器位置。加密数据通过诸如密钥流生成器2450等解密算法来解密。在至少一个实施例中,在特定大小粒度(任何适合的大小),密钥流生成器2450可以实现为AES-CTR模式块密码。在该实施例中,编码指针的内容用作初始化向量(IV)或数据调整2444。特别地,与明文地址部分2408的位连接的标签/版本部分2402的随机生成位形成数据调整(或IV),以用于对加密数据解密。密钥流生成器2450基于数据密钥2442对数据调整2444加密来生成密钥流2451。然后对密钥流2451和从经解码的线性地址2430所引用的存储器位置选择的加密输入数据块(或高速缓存线)2446执行XOR操作2452。经加密的输入数据块2446的粒度与从密钥流生成器2450输出的密钥流2451匹配,并且XOR操作2452产生经解密的输出数据块2454。另外,在一些实施例中,其他上下文信息也可以在数据调整2444中使用,所述其他上下文信息包括例如存储器分配大小、类型、准许、特许级别、位置、所有权、密码上下文ID寄存器或其任何组合。
使指针的标签/版本部分并入数据加密/解密可以用作使存储器版本化的方式并且可以防止某些恶意攻击,即使线性地址整个嵌入指针中作为明文(即,没有加密片)也如此。例如,因为标签/版本位被并入数据加密,释放后使用攻击(即,在底层对象已被释放并且潜在地甚至被重新分配给不同的对象之后访问悬垂指针)和出界访问因此可以被减轻。如果启用完整性检查,则两个场景都有很高的概率导致完整性检查违规。如果未启用完整性检查,则释放后使用攻击或出界访问应导致数据破坏,其仍然可足以保护数据机密性。
在数据加密/解密中使用的标签/版本部分也可以减轻未经初始化的使用漏洞。当从被分配但未用初始值充填的缓冲区读取数据时发生未经初始化的使用。未经初始化的使用可以通过使对象的所有权写入延迟直到该对象被初始化而被检测到。所有权写入指向存储器发出写入而没有首先从该存储器区读取(作为存储器写入惯例)。软件可以适应于在使对象初始化来避免完整性检查违规时使用所有权写入,如果使用嵌入指针中的标签/版本值(与之前用于在存储器中写入当前值的任何标签/版本值不同)来读取存储器区则另外将会发生该完整性检查违规。
软件可以进一步适应于检测对悬垂指针(例如,释放后使用)或未经初始化对象的尝试访问。如果启用完整性检查,则存储器分配器(例如,malloc指令、释放指令)可以适应于将置零密文注入新分配的(例如,malloc指令)存储器区或被释放的(例如,释放指令)存储器区。这在访问悬垂指针或未经初始化的对象时可以导致生成完整性错误。
图25是用于使用嵌入指针中的信息通过密码对指针编码的示例过程2500的流程图。存储器分配器(例如,malloc)可以在2502调用新的处理器指令,其可以与以下那样相同或相似地被格式化:
EncodePtr rd;其中rd是被指令嵌入在适当位置的指针
EncodePtr指令配置有访问秘密地址密钥的特许以对存储器地址加密。然而,秘密地址密钥对软件程序不可访问。因此,存储器分配器可以配置有足够的特许来调用EncodePtr指令。
过程2500的部分可以由计算装置100的硬件、固件和/或软件(例如,由执行地址编码逻辑152的处理器102)执行。过程2500响应于存储器分配(例如,通过存储器管理器模块)而开始。在2504,计算装置100确定线性地址的未用(例如,非规范)地址位来执行标签/版本或大小元数据编码。为此,计算装置100可以仅仅使用间接地址的更高(例如,最高有效)未用/非规范位。应注意编码地址在架构上不必是非规范的。相反,未用/非规范地址可以仅仅是被例如特许系统组件142预留的存储器范围,以用于启用如本文公开的特定编码。在2506,计算装置100用随机或确定生成的位创建标签/版本并且对在2504选择的线性地址的未用/非规范位中的标签/版本编码。相邻于标签/版本部分而对线性地址的剩余明文地址位编码。如在2508指示那样,完成指令。
通过限制租户生成新指针(除超级用户授予该租户的那些新指针之外),可以支持多租户工作负载,但从租户已经拥有的其他指针通过仅仅调节偏移或使用SCOPE指令而生成的新指针除外。
限制代码访问
如本文之前指出的,如本文描述的用于访问数据的编码指针也可以适应于控制代码提取。这包括具有标签/版本部分的通过密码编码的指针(例如,1610、1810)以及具有标签/版本部分的未通过密码编码的指针(例如,2410)。此外,如果例如通过增加地址寄存器大小、通过减少嵌入指针中的地址位的数量和/或减少嵌入编码指针中的其他元数据位的数量来添加标签/版本部分,则其他编码指针格式(例如,610、810、1410、1510)也可以用于控制代码提取.
典型地,由处理器基于指令指针寄存器的内容自动执行代码提取,该指令指针寄存器诸如RIP,其是64位指令指针寄存器。在用于控制代码提取的实施例中,在诸如RIP等指令指针寄存器(例如,64位寄存器)中包括标签/版本位来将代码区的加密绑定到该RIP。在本文描述的具有标签/版本部分的指针(诸如具有EBA的通过密码编码的指针(例如,1610、1810)或没有加密地址位的编码指针(例如,2410))可以存储在RIP中,用以提取代码区并且将代码区的数据加密绑定到引用该代码区的指针。对于包括其他元数据(例如,大小位)的指针格式,则该元数据也可以包括在RIP中。供在代码提取期间使用的上下文信息(如有的话)可以存储在RIP寄存器旁边的专用寄存器中。间接分支指令可以规定经更新的上下文信息(例如,在立即操作数中)。
对于在加密和解密操作中不包括上下文信息的指针格式,RIP寄存器的内容可以用于对代码区加密/解密。对于使用上下文信息的EBA格式指针和其他指针,RIP寄存器、专用寄存器和立即操作数(在一些场景中)可以用于对代码区加密/解密。代码区的该加密/解密通过防止分支目标注入而有助于限制可以被程序执行的代码。分支目标注入可以在ROP和JOP攻击中使用,在所述攻击中敌手在代码片段之间跳转来执行不意在由代码执行的一系列操作。根据本文公开的实施例格式化的代码指针迫使潜在敌手猜测或获得标签/版本位值。每当加载程序来加强代码加密保护时,标签/版本位对每个代码区可以被随机化为不可预测的值。使用具有在EBA实施例下面分层的基于指针的数据加密的加密基址指针(例如,1610、1810)可以通过迫使潜在敌手猜测或获得目标代表区的有效加密基址片以及该区的有效标签/版本而进一步加强代码加密保护。
具有存储器分配大小上下文信息的EBA格式指针可以指示可以执行程序(例如,函数)的特定部分所处的界限。在执行代码访问时,持有上下文信息的专用寄存器被处理器隐式使用。在执行分支或调用指令时,新的扩展分支/调用指令用于规定专用寄存器的经更新的上下文信息(例如,在指令的中间操作数中)使得新函数中的访问可以获得成功。
强制所有间接分支使用合法目标的前向代码指针保护可以通过采用EBA格式和采用包含标签/版本部分的其他指针格式的指针的加载时生成和修复(fix-up)或这些指针的运行时生成而通过概率来检查。这可以适应于函数和其他间接分支目标(例如,C编程语言中的switch语句)。
编码指针也可以用于确保导入函数安全。导入函数是一种库文件,其根据需要被动态推入程序的地址空间。因此,函数在不同的程序中可以被推入不同的位置。另外,用于对指针加密/解密的密钥也改变。因此,指针值可能需要在它被加载到不同程序时改变。典型地,大部分二进制结构具有这样的段,其包括关于导入函数的地址的信息。该段在本文称为全局函数表。全局函数表的一个示例是针对可执行和链接格式(ELF)文件的程序性链接表(PLT)。对导入它们自己在二进制内的任何引入表示为与全局函数表开始处的偏移(例如,在全局偏移表(GOT)中)。对于使用具有标签/版本部分但没有上下文信息的指针格式的实施例,在加载时,全局函数表中的实际地址可以通过生成和包括新生成的标签/版本位而被指针(例如,2410)代替。对于使用具有标签/版本部分并且还具有上下文信息的指针格式(例如,EBA格式指针1610、1810)的实施例,在加载时,全局函数表中的实际地址可以通过生成和包括新生成的标签/版本位而被指针代替,其中指针被绑定到指示目的代码区的大小的上下文信息(例如,函数、没有控制流转移的基本块,或编译单元)。
对于普通指针(例如,没有引用导入函数),与可执行代码(例如,ELF文件)相关联的元数据存储在可执行文件中。元数据指示可执行文件中代码指针的位置以及所述代码指针所引用的对象。一旦加载可执行文件,可执行文件中的代码指针就被更新。在加载可执行文件时,软件组件(例如,加载器)可以搜查代码指针的列表并且根据它们的特定编码格式(例如,加密片(诸如EBA)、非加密地址位,等)来对它们编码。
对应代码区(例如,函数、没有控制流转移的基本块或编译单元)则可以相应地被加密。函数可以包含一个或多个基本块,其可以具有单个入口点和出口点。一般而言,与直接分支连接的基本块(例如,要跳转的多个字节嵌入代码中而不是寄存器中)可以具有相同的上下文信息。然而,在基本块之间转移的间接分支(例如,C编程语言中的switch语句)可能使用不同的上下文信息。编译单元是这样的文件,其可以具有所包括的文件。因此,可以基于特定实现和需要在不同粒度定义代码区。
较细粒度策略可以潜在地减轻更多漏洞。然而,如果使用基于块密码的代码加密方案(其需要用截然不同的标签加密的代码对齐到块边界),则这样的策略可以增加代码大小。备选地,未增加代码大小的细粒度保护可以通过使用基于流密码的加密方案(例如,AES-CTR模式)来实现。
可以执行相似的指针标签化操作来更新嵌入全局变量中的代码指针、指向未经由全局函数表而被调用的其他代码或函数的间接分支目标,或非位置无关程序中的代码指针。
将数据加密绑定到指针验证代码
指针验证代码包括嵌入指针区中的消息验证代码(MAC)。指针验证代码在指针的地址部分上计算并且还可以包含上下文信息,诸如指针引用的数据或代码的类型的标识符(ID)或作为调整值的指针的存储位置。
在访问数据或代码之前,可以根据指针的地址部分和预期上下文信息重新计算指针验证代码。如果经重新计算的指针验证代码与嵌入指针中的那个匹配,则指针被视为有效的,以供在访问地点使用。该检查可以减轻类型混乱和至少一些出界漏洞。例如,如果编译器知道相关数据类型的大小,并且如果它包括基于该信息的静态或动态界限检查,则类型检查足以检验相关联界限检查的正确性。
在其他场景中,诸如变量长度阵列等一些数据类型没有预定长度。为了减轻对这样的数据类型的出界访问,数据加密可以被绑定到指针验证代码。例如,来自用于访问对象的指针的指针验证代码可以用作数据加密的调整值。访问对象界限以外的数据的任何尝试将导致概率很高的不正确解密,因为将用不同的调整值来对其他对象加密。这可以导致混乱数据被读取或完整性违规被生成(如果完整性检查是活动的话)。如果在写入之前执行所有权读取,则将数据加密绑定到指针验证代码还可以用于检测出界写入。所有权读取是一种读操作,其先于大部分写入,从而确保在写入它们之前当前硬件线程拥有相关高速缓存线的所有权。
假设用具有不同类型或基址的对象重新分配被释放的位置,释放后使用/悬垂指针漏洞还可以通过将数据加密绑定到指针验证代码而减轻。试图使用悬垂指针来访问经重新分配的对象导致用于对当前数据加密的调整值与悬垂指针中的指针验证代码之间失配。
就像对于其他指针格式一样,未经初始化的使用也可以通过使对象的所有权写入延迟直到对象被初始化而被检测到。
在执行对使用经验证的指针所引用的对象内的非零偏移的存储器访问时,诸如Intel®IA-32架构等一些指令集架构供应经验证的指针作为基址寄存器值,其中标度、索引和移位值指示偏移。这使CPU能够获得基址值,在检查指针验证代码时应使用该基址值。其他地址传递机制在备选架构上可能是适合的。
示例架构
图26是图示根据至少一个实施例的示例密码计算环境2600的框图。在示出的示例中,密码寻址层2610遍布示例计算向量中央处理器(CPU)2602、图形处理单元(GPU)2604、人工智能(AI)2606和现场可编程门阵列(FPGA)2608。例如,CPU 2602和GPU 2604可对存储器2612中存储的数据共享相同虚拟地址转换,并且密码地址可建立于这个共享虚拟存储器。它们可对给定执行流共享相同进程密钥,以及计算相同调整以便对通过密码编码的地址进行解密,并且沿用相同密码算法对这类编码的地址所引用的数据解密。
经组合,本文描述的能力可以实现密码计算。存储器2612可以在存储器分级结构的每一级来加密,从高速缓存的第一级至高速缓存的最后一级并且进入系统存储器中。将密码地址编码绑定到数据加密可以允许极细粒度对象边界和访问控制,从而实现一直到甚至单独功能及其功能即服务的对象的细粒度安全性容器。调用栈上的通过密码编码返回地址(取决于其位置)还可以实现控制流完整性,而无需影子栈元数据。因此,能够仅仅根据密码寻址和相应密码数据绑定以密码方式执行数据访问控制策略和控制流中的任一个。
图27-29是可以根据本文公开的实施例使用的示范计算机架构的框图。一般来说,可以使用用于处理器和计算系统的本领域已知的任何计算机架构设计。在示例中,用于膝上型、台式、手持PC、个人数字助理、平板、工程工作站、服务器、网络装置、服务器、电器、网络集线器、路由器、交换机、嵌入式处理器,数字信号处理器(DSP)、图形装置、视频游戏装置、机顶盒、微控制器,智能电话、移动装置、可佩戴电子装置、便携媒体播放器、手持装置和各种其他电子装置的本领域已知的系统设计和配置也适合于本文描述的计算系统的实施例。一般来说,用于本文所公开实施例的适当计算机架构可以包括但不限于图27-29中图示的配置。
图27是根据实施例的处理器的示例图示。处理器2700是可以与本文所示和所述的实现结合使用的一种类型的硬件装置(例如处理器102)的示例。处理器2700可以是任何类型的处理器,诸如微处理器、嵌入式处理器、数字信号处理器(DSP)、网络处理器、多核处理器、单核处理器或者执行代码的另一装置。尽管图27中仅图示一个处理器2700,但处理元件备选地可以包括多于一个图27所示的处理器2700。处理器2700可以是单线程核,或者对于至少一个实施例,处理器2700可以是多线程的,因为它可以包括每核多于一个硬件线程上下文(或者“逻辑处理器”)。
图27还图示根据实施例、耦合到处理器2700的存储器2702。存储器2702可以是大量存储器中的任一个(包括存储器分级结构的各种层),如本领域的技术人员已知或者以其它方式可得到的。这样的存储器元件能够包括但不限于随机存取存储器(RAM)、只读存储器(ROM)、现场可编程门阵列(FPGA)的逻辑块、可擦除可编程只读存储器(EPROM)和电可擦除可编程ROM(EEPROM)。
处理器2700可以执行与本文详述的算法、过程或操作相关联的任何类型的指令。一般来说,处理器2700可以将元件或产品(例如数据)从一种状态或事物变换成另一种状态或另一种事物。
可以是将要由处理器2700所执行的一个或多个指令的代码2704可以存储在存储器2702中,或者可以存储在软件、硬件、固件或者其任何适合的组合中,或根据情况并且基于特定需要而存储在任何其他内部或外部组件、装置、元件或对象中。在一个示例中,处理器2700可以跟随代码2704所指示的指令的程序序列。每个指令进入前端逻辑2706,并且由一个或多个解码器2708来处理。解码器可以生成作为其输出的微操作(诸如采用预定义格式的固定宽度微操作),或者可以生成反映原始代码指令的其他指令、微指令或控制信号。前端逻辑2706还包括寄存器重命名逻辑2710和调度逻辑2712,它们一般分配资源并且将与指令对应的操作进行排队以供执行。
处理器2700还可以包括执行逻辑2714,该执行逻辑2714具有一组执行单元2716a、2716b、2716n等。一些实施例可以包括专用于特定功能或者功能集的许多执行单元。其他实施例可以仅包括一个执行单元或者能够执行特定功能的一个执行单元。执行逻辑2714执行代码指令所指定的操作。
在代码指令所指定的操作的执行完成之后,后端逻辑2718可以引退代码2704的指令。在一个实施例中,处理器2700允许无序执行,但是要求指令的有序引退。引退逻辑2720可以采取多种已知形式(例如,重排序缓冲器或类似物)。采用该方式,在代码2704的执行期间,至少根据解码器所生成的输出、寄存器重命名逻辑2710所利用的硬件寄存器和表以及执行逻辑2714所修改的任何寄存器(未示出),来变换处理器2700。
尽管图27中未示出,但处理元件可以随处理器2700包括芯片上的其他元件。例如,处理元件可以包括随同处理器2700的存储器控制逻辑。处理元件可以包括I/O控制逻辑,和/或可以包括与存储器控制逻辑集成的I/O控制逻辑。处理元件还可以包括一个或多个高速缓存。在一些实施例中,非易失性存储器(诸如闪速存储器或熔丝)也可随处理器2700被包含在芯片上。
图28A是图示根据本公开的一个或多个实施例的示范有序流水线和示范寄存器重命名、无序发出/执行流水线的框图。图28B是图示根据本公开的一个或多个实施例、将要包含在处理器中的有序架构核和示范寄存器重命名、无序发出/执行架构核的示范实施例的框图。图28A-28B中的实线框图示有序流水线和有序核,而虚线框的可选添加图示寄存器重命名、无序发出/执行流水线和核。在给定有序方面是无序方面的子集的情况下,将描述无序方面。
图28A中,处理器流水线2800包括提取级2802、长度解码级2804、解码级2806、分配级2808、重命名级2810、调度(又称作分发或发出)级2812、寄存器读/存储器读级2814、执行级2816、回写/存储器写级2818、异常处理级2822和提交级2824。
图28B示出处理器核2890,所述处理器核2890包括耦合到执行引擎单元2850的前端单元2830(它们两者均耦合到存储器单元2870)。处理器核2890和存储器单元2870是可以与本文所示和所述的实现结合使用的硬件类型(例如处理器102、存储器122)的示例。核2890可以是精简指令集计算(RISC)核、复杂指令集计算(CISC)核、超长指令字(VLIW)核或者混合或备选核类型。作为又一个选项,核2890可以是专用核(例如网络或通信核)、压缩引擎、协处理器核、通用计算图形处理单元(GPGPU)核、图形核或类似物。另外,处理器核2890及其组件表示示例架构,所述示例架构可用来实现逻辑处理器及其相应组件。
前端单元2830包括耦合到指令高速缓存单元2834的分支预测单元2832,该指令高速缓存单元2834耦合到指令转换后备缓冲器(TLB)2836,该指令TLB单元2836耦合到指令提取单元2838,该指令取单元2838耦合到解码单元2840。解码单元2840(或解码器)可以对指令解码,并且生成作为输出的一个或多个微操作、微代码入口点、微指令、其他指令或者从原始指令所解码或得出或者以其他方式反映原始指令的其他控制信号。解码单元2840可使用各种不同的机制来实现。适当机制的示例包括但不限于查找表、硬件实现、可编程逻辑阵列(PLA)、微码只读存储器(ROM)等。在一个实施例中,核2890包括存储某些宏指令的微代码(例如在解码单元2840中或者以其它方式在前端单元2830内)的微代码ROM或另一介质。解码单元2840耦合到执行引擎单元2850中的重命名/分配器单元2852。
执行引擎单元2850包括重命名/分配器单元2852,其耦合到引退单元2854和一组一个或多个调度器单元2856。(一个或多个)调度器单元2856表示任何数量的不同调度器,包括保留站、中心指令窗口等。(一个或多个)调度器单元2856耦合到(一个或多个)物理寄存器堆单元2858。(一个或多个)物理寄存器堆单元2858的每个表示一个或多个物理寄存器堆,其中不同的寄存器堆存储一个或多个不同的数据类型,诸如标量整数、标量浮点、打包整数、打包浮点、向量整数、向量浮点、状态(例如,作为将要执行的下一个指令的地址的指令指针)等。在一个实施例中,(一个或多个)物理寄存器堆单元2858包括向量寄存器单元、写屏蔽寄存器单元和标量寄存器单元。这些寄存器单元可提供架构向量寄存器、向量屏蔽寄存器和通用寄存器(GPR)。在本文描述的至少一些实施例中,寄存器单元2858是能够与本文所示和所述的实现结合使用的硬件类型(例如寄存器112)的示例。(一个或多个)物理寄存器堆单元2858被引退单元2854重叠,以图示可以实现寄存器重命名和无序执行的各种方式(例如使用(一个或多个)重排序缓冲器和(一个或多个)引退寄存器堆;使用(一个或多个)将来文件、(一个或多个)历史缓冲器和(一个或多个)引退寄存器堆;使用寄存器映射和寄存器池等)。引退单元2854和(一个或多个)物理寄存器堆单元2858耦合到(一个或多个)执行集群2860。(一个或多个)执行集群2860包括一组一个或多个执行单元2862和一组一个或多个存储器访问单元2864。执行单元2862可执行各种操作(例如移位、加法、减法、乘法)并且对各种类型的数据(例如,标量浮点、打包整数、打包浮点、向量整数、向量浮点)执行。尽管一些实施例可以包括专用于特定功能或功能集合的多个执行单元,但其他实施例可以仅包括一个执行单元或者全部执行全部功能的多个执行单元。执行单元2862还可以包括:地址生成单元(例如822),以计算供核用来访问主存储器(例如存储器单元2870)的地址;以及页缺失处理程序(PMH)(例如826)。
(一个或多个)调度器单元2856、(一个或多个)物理寄存器堆单元2858和(一个或多个)执行集群2860示为可能是多个的,因为某些实施例创建某些类型的数据/操作的独立流水线(例如标量整数流水线、标量浮点/打包整数/打包浮点/向量整数/向量浮点流水线和/或存储器访问流水线,其各具有其自己的调度器单元、(一个或多个)物理寄存器堆单元和/或执行集群—以及在独立存储器访问流水线的情况下,实现只有这个流水线的执行集群具有(一个或多个)存储器访问单元2864的某些实施例。还应当理解,在使用独立流水线的情况下,这些流水线的一个或多个可以是无序发出/执行,而其余的是有序的。
存储器访问单元2864的集耦合到存储器单元2870,其包括耦合到数据高速缓存单元2874(其耦合到第2级(L2)高速缓存单元2876)的数据TLB单元2872。在一个示范实施例中,存储器访问单元2864可以包括加载单元、存储地址单元和存储数据单元,它们中的每个耦合到存储器单元2870中的数据TLB单元2872。指令高速缓存单元2834还耦合到存储器单元2870中的第2级(L2)高速缓存单元2876。L2高速缓存单元2876耦合到一个或多个其他等级的高速缓存,并且最终耦合到主存储器。另外,页缺失处理程序(例如页缺失处理程序826)还可以包含在核2890中,以便在数据TLB单元2872中没有找到匹配时查找页表中的地址映射。
通过示例,示范性寄存器重命名、无序发出/执行核架构可以按如下所述实现流水线2800:1) 指令提取2838执行提取和长度解码级2802和2804;2) 解码单元2840执行解码级2806;3) 重命名/分配器单元2852执行分配级2808和重命名级2810;4) (一个或多个)调度器单元2856执行调度级2812;5) (一个或多个)物理寄存器堆单元2858和存储器单元2870执行寄存器读/存储器读级2814;执行集群2860执行运行级2816;6) 存储器单元2870和(一个或多个)物理寄存器堆单元2858执行回写/存储器写级2818;7) 各种单元可包含在异常处理级2822中;以及8) 引退单元2854和(一个或多个)物理寄存器堆单元2858执行提交级2824。
核2890可支持一个或多个指令集(例如x86指令集(其中具有随较新版本已经添加的一些扩展);MIPS Technologies(Sunnyvale,CA)的MIPS指令集;ARM Holdings(Sunnyvale,CA)的ARM指令集(其中具有可选附加扩展,诸如NEON)),包括本文描述的(一个或多个)指令。在一个实施例中,核2890包括支持打包数据指令集扩展的逻辑(例如AVX1、AVX2),由此允许供许多多媒体应用使用的操作使用打包数据而被执行。
应当理解,核可支持多线程运行(执行操作或线程的两个或更多并行集合),并且可采用多种方式这样做,包括时间切片多线程运行、同时多线程运行(其中单个物理核为物理核同时多线程运行的线程中的每个提供逻辑核)或其组合(例如,时间切片提取和解码以及此后的同时多线程运行,诸如在Intel®Hyperthreading技术中)。相应地,在至少一些实施例中,可支持多线程包体(enclave)。
尽管在无序执行的上下文中描述寄存器重命名,但是应当理解,寄存器重命名可用于有序架构中。尽管处理器的所示实施例还包括独立指令和数据高速缓存单元2834/2874和共享L2高速缓存单元2876,但是备选实施例可以具有用于指令和数据的单个内部高速缓存,诸如例如第1级(L1)内部高速缓存或者多级内部高速缓存。在一些实施例中,系统可以包括内部高速缓存以及核和/或处理器外部的外部高速缓存的组合。备选地,高速缓存全部可以在核和/或处理器外部。
图29图示根据实施例、采用点对点(PtP)配置所布置的计算系统2900。特别是,图29示出一种系统,其中处理器、存储器和输入/输出装置通过许多点对点接口来互连。一般来说,本文所述计算系统或计算装置(例如计算装置100)中的一个或多个可以采用与计算系统2900相同或相似的方式来配置。
处理器2970和2980可以实现为单核处理器2974a和2984a或者多核处理器2974a-2974b和2984a-2984b。处理器2970和2980各自可以包括由其相应一个或多个核所使用的高速缓存2971和2981。共享高速缓存(未示出)可以包含在任一个处理器中或者两个处理器外部,但是仍然经由P-P互连与处理器连接,使得如果使处理器被置于低功率模式,则任一个或两个处理器的本地高速缓存信息可以存储在共享高速缓存中。应当注意,本文描述的一个或多个实施例可以在计算系统(例如计算系统2900)中实现。此外,处理器2970和2980是可以与本文所示和所述的实现结合使用的硬件类型(例如处理器102)的示例。
处理器2970和2980各自还可以包括集成存储器控制器逻辑(MC)2972和2982,以便与存储器元件2932和2934通信,所述存储器元件2932和2934可以是本地附连到相应处理器的主存储器的部分。在备选实施例中,存储器控制器逻辑2972和2982可以是与处理器2970和2980分开的分立逻辑。存储器元件2932和2934可以存储将要由处理器2970和2980在实现本文概述的操作和功能性中使用的各种数据。
处理器2970和2980可以是例如与其他附图结合论述的处理器等的任何类型的处理器。处理器2970和2980可以分别使用点对点(PtP)接口电路2978和2988、经由点对点(PtP)接口2950来交换数据。处理器2970和2980各自可以使用点对点接口电路2976、2986、2994和2998、经由单独点对点接口2952和2954来与输入/输出(I/O)子系统2990交换数据。I/O子系统2990还可以使用接口电路2992(该接口电路2992可以是PtP接口电路)、经由高性能图形接口2939来与高性能图形电路2938交换数据。在一个实施例中,高性能图形电路2938是专用处理器,诸如例如高吞吐量MIC处理器、网络或通信处理器、压缩引擎、图形处理器、GPGPU、嵌入式处理器或类似物。I/O子系统2990还可以与显示器2933通信,以用于显示由人类用户可查看的数据。在备选实施例中,图29中图示的PtP链路的任一个或全部可实现为多点总线而不是PtP链路。
I/O子系统2990可以经由接口电路2996与总线2910通信。总线2910可以具有通过它通信的一个或多个装置,诸如总线桥接器2918、I/O装置2914和一个或多个其他处理器2915。经由总线2920,总线桥接器2918可以与诸如用户接口2922(诸如键盘、鼠标、触摸屏或其他输入装置)、通信装置2926(诸如调制解调器、网络接口装置或者可通过计算机网络2960通信的其他类型的通信装置)、音频I/O装置2924和/或数据存储装置2928之类的其他装置通信。数据存储装置2928可以存储可以由处理器2970和/或2980所执行的代码和数据2930。在备选实施例中,总线架构的任何部分可以用一个或多个PtP链路来实现。
程序代码(诸如代码2930)可以应用于输入指令,以执行本文描述的功能并且生成输出信息。输出信息可采用已知方式应用于一个或多个输出装置。出于本申请的目的,处理系统可以是计算系统2900的组成部分,并且包括具有处理器(诸如例如数字信号处理器(DSP)、微控制器、专用集成电路(ASIC)或者微处理器)的任何系统。
程序代码(例如2930)可以通过高级程序性或面向对象的编程语言来实现,以便与处理系统通信。如果期望的话,程序代码还可通过汇编或机器语言来实现。实际上,本文描述的机制的范围并不局限于任何特定编程语言。在任何情况下,语言可以是编译或解译语言。
至少一个实施例的一个或多个方面可以通过机器可读介质上存储的、表示处理器内的各种逻辑的代表指令来实现,所述指令在由机器读取时使该机器制备执行本文所述技术中的一个或多个的逻辑。称作“IP核”的这类表示可以存储在有形机器可读介质上,并且提供给各种客户或制造机构,以加载到实际制作逻辑或处理器的制备机器中。
这样的机器可读存储介质可以非限制性地包括通过机器或装置所制造或形成的产品的非暂时有形布置,其中包括:例如硬盘等存储介质;任何其他类型的磁盘,包括软盘、光盘、紧致盘只读存储器(CD-ROM)、可重写紧致盘(CD-RW)和磁光盘;半导体器件,诸如只读存储器(ROM)、诸如动态随机存取存储器(DRAM)、静态随机存取存储器(SARAM)等随机存取存储器(RAM)、可擦除可编程只读存储器(EPROM)、闪速存储器、电可擦除可编程只读存储器(EEPROM)、相变存储器(PCM);磁卡或光卡;或者适合于存储电子指令的任何其他类型的介质。
相应地,本公开的实施例还包括非暂时有形机器可读介质,所述机器可读介质包含指令或者包含设计数据(诸如硬件描述语言(HDL)),所述设计数据定义本文描述的结构、电路、设备、处理器和/或系统特征。这样的实施例又可以称为程序产品。
图29中描绘的计算系统是可以用来实现本文论述的各个实施例的计算系统的实施例的示意图示。将会理解,图29中描绘的系统的各种组件可以组合在芯片上系统(SoC)架构中或者以能够实现本文所提供示例和实现的功能性和特征的任何其他适当配置来组合。
在一些情况下,指令转换器可用来将指令从源指令集转换成目标指令集。例如,指令转换器可将指令转化(例如使用静态二进制转化、包括动态编译的动态二进制转化)、变形、模拟或者以其他方式变换成将要由核来处理的一个或多个其他指令。指令转换器可以采用软件、硬件、固件或其组合来实现。指令转换器可以在处理器上、处理器外或者部分处理器上和部分处理器外。
图30是根据本公开的实施例、与软件指令转换器用来将源指令集中的二进制指令转换成目标指令集中的二进制指令相对照的框图。在图示的实施例中,指令转换器是软件指令转换器,但是备选地,指令转换器可采用软件、固件、硬件或者它们的各种组合来实现。图30示出可以使用x86编译器3004来编译高级语言3002的程序,以生成x86二进制代码3006,所述x86二进制代码3006可以由具有至少一个x86指令集核的处理器3016本地地执行。具有至少一个x86指令集核的处理器3016表示可以通过兼容地执行或者以其他方式处理下列方面来执行与具有至少一个x86指令集核的Intel处理器基本上相同的功能的任何处理器:(1) Intel x86指令集核的指令集的大部分;或者(2) 针对在具有至少一个x86指令集核的Intel处理器上运行的应用或其他软件的对象代码版本,以取得与具有至少一个x86指令集核的Intel处理器基本上相同的结果。x86编译器3004表示可操作以生成x86二进制代码3006(例如对象代码)的编译器,所述x86二进制代码2506可以在具有或没有附加链接处理的情况下在具有至少一个x86指令集核的处理器3016上执行。类似地,图30示出可以使用备选指令集编译器3008来编译高级语言3002的程序,以便生成备选指令集二进制代码3010,所述备选指令集二进制代码3010可以由没有至少一个x86指令集核的处理器3014(例如具有执行MIPS Technologies(Sunnyvale,CA)的MIPS指令集和/或执行ARM Holdings(Sunnyvale,CA)的ARM指令集的核的处理器)本地地执行。指令转换器3012用来将x86二进制代码3006转换为可以由没有x86指令集核的处理器3014本地地执行的代码。这个转换的代码不可能与备选指令集二进制代码3010是相同的,因为能够进行这个操作的指令转换器难以制作;然而,转换的代码将实现一般操作,并且由来自备选指令集的指令来组成。因此,指令转换器3012表示软件、固件、硬件或者其组合,其经过模拟、仿真或者任何其他过程允许处理器或者没有x86指令集处理器或核的另一电子装置执行x86二进制代码3006。
尽管根据某些实现和一般关联方法来描述本公开,但是这些实现和方法的变更和置换将对于本领域的技术人员是清楚的。例如,本文描述的动作可以采用与如所述顺序不同的顺序来执行,并且仍然实现期望结果。作为一个示例,附图中描绘的过程不一定要求所示的特定顺序或依次顺序来实现预期结果。在某些实现中,多任务和并行处理可以是有利的。其他变化落入以下权利要求书的范围之内。
本文呈现的架构仅通过示例来提供,并且预计是非排他和非限制性的。此外,所公开的各种部分预计只是逻辑划分,而无需必然表示物理分离硬件和/或软件组件。某些计算系统可以在单个物理存储器装置中提供存储器元件,而在其他情况下,存储器元件可以在功能上跨许多物理装置分布。在虚拟机管理器或超级用户的情况下,功能的全部或部分可以采取通过虚拟化层运行的软件或固件的形式来提供,以提供所公开逻辑功能。
要注意,对于本文所提供的示例,可以在单个计算系统方面来描述交互。然而,这只是为了清楚起见和举例而进行。在某些情况下,可更易于通过仅引用单个计算系统来描述流程的给定集的功能性中的一个或多个。此外,用于深度学习和恶意软件检测的系统是容易可缩放的,并且可以跨大量组件(例如多个计算系统)以及更复杂/精密布置和配置来实现。相应地,所提供的示例不应当限制范围或者禁止如潜在地应用于大量其他架构的计算系统的广义教导。
如本文所使用的,除非另加明确相反说明,否则词语‘...中的至少一个’的使用表示所述项、元件、条件或活动的任何组合。例如,‘X、Y和Z中的至少一个’意在表示下列任一个:1)至少一个X,但不是Y并且不是Z;2)至少一个Y,但不是X并且不是Z;3)至少一个Z,但不是X并且不是Y;4)至少一个X和至少一个Y,但不是Z;5)至少一个X和至少一个Z,但不是Y;6)至少一个Y和至少一个Z,但不是X;或者7)至少一个X、至少一个Y和至少一个Z。
另外,除非另加明确相反说明,否则术语‘第一’、‘第二’、‘第三’等预计区分它们修饰的特定名词(例如元件、条件、模块、活动、操作、权利要求元素等),而不旨在指示修饰名词的任何类型的顺序、分级、重要性、时间序列或者分级结构。例如,‘第一X’和‘第二X’旨在表示不一定受两个元素的任何顺序、分级、重要性、时间序列或分级结构所限制的两个独立X元素。
说明书中提到“一个实施例”、“实施例”、“一些实施例”等指示所描述的(一个或多个)实施例可以包括特定特征、结构或特性,但是每一个实施例都可能或者可不必然包括那个特定特征、结构或特性。此外,这样的词语不一定指同一实施例。
尽管本说明书包含许多具体实现细节,但是这些不应当被理解为对任何实施例或者可要求保护的范围的限制,而是应当被理解为对特定实施例特定的特征的描述。本说明书中在独立实施例的上下文中描述的某些特征也能够在单个实施例中组合地实现。相反,在单个实施例的上下文中描述的各种特征也能够单独在多个实施例中或者以任何适当的子组合实现。此外,尽管特征在上文中可描述为通过某些组合来起作用并且甚至最初这样要求保护,但是来自要求保护的组合的一个或多个特征在一些情况下可以脱离组合,并且要求保护的组合可针对子组合或者子组合的变化。
类似地,上述实施例中的各种系统组件和模块的分离不应当被理解为在全部实施例中都要求这种分离。应当理解,所述程序组件、模块和系统一般可以共同集成在单个软件产品中或者封装到多个软件产品中。
因而,描述了本主题的特定实施例。其他实施例落入本公开的范围之内。许多其他更改、置换、变更、改变和修改对于本领域的技术人员是可确定的,并且旨在本公开包含如落入所附权利要求书的范围之内的所有这样的更改、置换、变更、改变和修改。
其他注释和示例
下列示例关于根据本说明书的实施例。系统、设备、方法和机器可读存储介质实施例可以包括下列示例中的一个或组合:
示例A1提供处理器,其包括核,用以执行指令,该核包括:第一寄存器,用于存储指向存储器位置的编码指针,其中在该编码指针的第一位中存储第一上下文信息并且在该编码指针的第二位中存储存储器位置的存储器地址片。处理器进一步包括电路,用于:对编码指针解码来获得存储器位置的存储器地址;使用通过对编码指针解码而获得的存储器地址来访问存储器位置处的加密数据;以及基于第一密钥和第一调整来对加密数据解密,该第一调整包括至少部分从编码指针导出的一个或多个位;
在示例A2中,示例A1的主旨可以可选地包括其中:对编码指针解码包括通过至少部分基于第二调整(包括一个或多个其他位)来对编码指针中的存储器地址片解密而生成经解密的存储器地址片。
在示例A3中,示例A1的主旨可以可选地包括其中:对存储在编码指针的第二位中的存储器地址片解密至少部分基于第二密钥。
在示例A4中,示例A2-A3中的任一个的主旨可以可选地包括其中:从第一寄存器、指令的操作数和控制寄存器中的至少一个获得第二调整的一个或多个其他位。
在示例A5中,示例A2-A4中的任一个的主旨可以可选地包括其中:第二调整包括以下中的至少一个:存储器地址的明文片位;大小位,其指示存储器地址的特定明文片的位的数量;存储器分配大小位,其指示在编码指针所引用的存储器位置处分配的存储器的量;标签位,其表示与编码指针相关联的随机值;准许位,其指示对存储器位置授权的访问级别;类型位,其指示存储器位置中的加密数据的类别;版本位,其表示与编码指针相关联的确定不同的值;特许级别位,其指示用户级别或超级用户级别;以及密码上下文标识符位,其表示对于特定函数组的唯一值。
在示例A6中,示例A2-A5中的任一个的主旨可以可选地包括其中:电路进一步用于响应于请求分配存储器的一部分而:获得对于存储器位置的存储器地址;以及生成指向存储器位置的编码指针。生成指向存储器位置的编码指针包括将第一上下文信息存储在编码指针的第一位中;以及通过至少部分基于第二调整而对存储器地址中的一个或多个位的位的子集加密来生成存储器地址片。
在示例A7中,示例A2-A6中的任一个的主旨可以可选地包括其中:对编码指针解码包括使经解密的存储器地址片与存储器地址的明文片连接。
在示例A8中,示例A7的主旨可以可选地包括其中:在编码指针中或在第二寄存器中存储存储器地址的明文片。
在示例A9中,示例A7-A8中的任一个的主旨可以可选地包括其中:第一调整包括:存储在编码指针的第一位中的第一上下文信息;以及至少使用与存储器地址的明文片连接的经解密的存储器地址片和编码指针中的偏移而生成的线性地址。
在示例A10中,示例A1-A9中的任一个的主旨可以可选地包括其中:编码指针的第一位被随机化或依次递增。
在示例A11中,示例A1-A8中的任一个的主旨可以可选地包括其中:在编码指针的不可变明文位中存储存储器地址的第二片,并且在编码指针的可变明文位中存储存储器地址的第三片。
在示例A12中,示例A11的主旨可以可选地包括其中:第一调整包括编码指针的第一位、编码指针的第二位、编码指针的不可变明文位以及编码指针的可变明文位。
在示例A13中,示例A11-A12中的任一个的主旨可以可选地包括其中:第一上下文信息包括大小元数据,其以2的幂指示编码指针的不可变明文位中或编码指针的可变明文位中所包括的位的第一数量。
在示例A14中,示例A13的主旨可以可选地包括其中:基于大小元数据指示位数量大于编码指针的不可变明文位或编码指针的可变明文位的位的最大允许数量,大小元数据将时间维度编码到存储器位置。
在示例A15中,示例A1的主旨可以可选地包括其中:编码指针的第一位被随机化并且存储器地址采用明文格式存储在编码指针中的一个或多个其他位中。
在示例A16中,示例A15的主旨可以可选地包括其中:第一调整包括编码指针的第一位和采用明文格式存储存储器地址的编码指针中的一个或多个其他位。
在示例A17中,示例A1-A16中的任一个的主旨可以可选地包括其中:第一调整的一个或多个位整个从编码指针导出。
在示例A18中,示例A1-A16中的任一个的主旨可以可选地包括其中:从指令的操作数和控制寄存器中的至少一个获得第一调整的一个或多个位中的至少一些。
在示例A19中,示例A1-A18中的任一个的主旨可以可选地包括其中:第一调整包括以下中的至少一个:位大小,其指示存储器地址的特定明文片的位的数量;存储器分配大小位,其指示在编码指针所引用的存储器位置处分配的存储器的量;标签位,其表示与编码指针相关联的随机值;准许位,其指示对存储器位置授权的访问级别;类型位,其指示存储器位置中的加密数据的类别;版本位,其表示与编码指针相关联的确定不同的值;特许级别位,其指示用户级别或超级用户级别;和密码上下文标识符位,其表示对于特定函数组的唯一值。
在示例A20中,示例A1-A19中的任一个的主旨可以可选地包括其中:编码指针包括第三位,其指示编码指针是否要与遗留软件程序一起使用。
示例M1提供方法,其包括:将指向存储器位置的编码指针存储在寄存器中,其中第一上下文信息存储在该编码指针的第一位中并且存储器位置的存储器地址片存储在该编码指针的第二位中。该方法进一步包括:对编码指针解码来获得存储器位置的存储器地址;基于第一密钥和至少部分从编码指针导出的第一调整来对数据加密;以及使用通过对编码指针解码而获得的存储器地址来将加密数据存储在存储器位置处。
在示例M2中,示例M1的主旨可以可选地包括其中:对编码指针解码包括通过至少部分基于第二调整(包括一个或多个其他位)来对编码指针中的存储器地址片解密而生成经解密的存储器地址片。
在示例M3中,示例M2的主旨可以可选地包括其中:对存储在编码指针的第二位中的存储器地址片解密至少部分基于第二密钥。
在示例M4中,示例M2-M3中的任一个的主旨可以可选地包括其中:从第一寄存器、指令的操作数和控制寄存器中的至少一个获得第二调整的一个或多个其他位。
在示例M5中,示例M2-M4中的任一个的主旨可以可选地包括其中:第二调整包括以下中的至少一个:存储器地址的明文片位;大小位,其指示存储器地址的特定明文片的位的数量;存储器分配大小位,其指示在编码指针所引用的存储器位置处分配的存储器的量;标签位,其表示与编码指针相关联的随机值;准许位,其指示对存储器位置授权的访问级别;类型位,其指示存储器位置中的加密数据的类别;版本位,其表示与编码指针相关联的确定不同的值;特许级别位,其指示用户级别或超级用户级别;以及密码上下文标识符位,其表示对于特定函数组的唯一值。
在示例M6中,示例M2-M5中的任一个的主旨可以可选地包括其中:响应于请求分配存储器的一部分,方法进一步包括:获得对于存储器位置的存储器地址;以及生成指向存储器位置的编码指针。生成包括将第一上下文信息存储在编码指针的第一位中并且通过至少部分基于第二调整来对存储器地址中的一个或多个位的位的子集加密而生成存储器地址片。
在示例M7中,示例M2-M6中的任一个的主旨可以可选地包括其中:对指针解码进一步包括使经解密的存储器地址片和存储器地址的明文片连接。
在示例M8中,示例M7的主旨可以可选地包括其中:存储器地址的明文片存储在编码指针中或第二寄存器中。
在示例M9中,示例M7-M8中的任一个的主旨可以可选地包括其中:第一调整包括:存储在编码指针的第一位中的第一上下文信息;以及至少使用与存储器地址的明文片连接的经解密的存储器地址片和编码指针中的偏移而生成的线性地址。
在示例M10中,示例M1-M9中的任一个的主旨可以可选地包括其中:编码指针的第一位被随机化或依次递增。
在示例M11中,示例M1-M8中的任一个的主旨可以可选地包括其中:在编码指针的不可变明文位中存储存储器地址的第二片,以及其中:在编码指针的可变明文位中存储存储器地址的第三片。
在示例M12中,示例M11的主旨可以可选地包括其中:第一调整包括编码指针的第一位、编码指针的第二位、编码指针的不可变明文位以及编码指针的可变明文位。
在示例M13中,示例M11-M12中的任一个的主旨可以可选地包括其中:第一上下文信息包括大小元数据,其以2的幂指示编码指针的不可变明文位中或编码指针的可变明文位中所包括的位的第一数量。
在示例M14中,示例M13的主旨可以可选地包括其中:基于大小元数据指示位数量大于编码指针的不可变明文位或编码指针的可变明文位的位的最大允许数量,大小元数据将时间维度编码到存储器位置。
在示例M15中,示例M1的主旨可以可选地包括其中:编码指针的第一位被随机化并且存储器地址采用明文格式存储在编码指针中的一个或多个其他位中。
在示例M16中,示例M15的主旨可以可选地包括其中:第一调整包括编码指针的第一位和采用明文格式存储存储器地址的编码指针中的一个或多个其他位。
在示例M17中,示例M1-M16中的任一个的主旨可以可选地包括方法,其进一步包括:将第一调整的一个或多个位整个从编码指针导出。
在示例M18中,示例M1-M16中的任一个的主旨可以可选地包括方法,其进一步包括:从指令的操作数和控制寄存器中的至少一个获得第一调整的一个或多个位中的至少一些。
在示例M19中,示例M1-M18中的任一个的主旨可以可选地包括其中:第一调整包括以下中的至少一个:位大小,其指示存储器地址的特定明文片的位的数量;存储器分配大小位,其指示在编码指针所引用的存储器位置处分配的存储器的量;标签位,其表示与编码指针相关联的随机值;准许位,其指示对存储器位置授权的访问级别;类型位,其指示存储器位置中的加密数据的类别;版本位,其表示与编码指针相关联的确定不同的值;特许级别位,其指示用户级别或超级用户级别;和密码上下文标识符位,其表示对于特定函数组的唯一值。
在示例M20中,示例M1-M19中的任一个的主旨可以可选地包括其中:编码指针包括第三位,其指示编码指针是否要与遗留软件程序一起使用。
示例C1提供具有在其上存储代码的一个或多个计算机可读介质,其中代码可执行以促使机器:将指向存储器位置的编码指针存储在寄存器中,其中第一上下文信息存储在该编码指针的第一位中并且存储器位置的存储器地址片存储在该编码指针的第二位中。该代码可执行以促使机器进一步:对编码指针解码来获得存储器位置的存储器地址;使用通过对编码指针解码而获得的存储器地址来访问存储器位置处的加密数据;以及基于第一密钥和第一调整对加密数据解密,该第一调整至少部分从编码指针导出。
在示例C2中,示例C1的主旨可以可选地包括其中:对编码指针解码包括通过至少部分基于第二调整(包括一个或多个其他位)来对编码指针中的存储器地址片解密而生成经解密的存储器地址片。
在示例C3中,示例C2的主旨可以可选地包括其中:对存储在编码指针的第二位中的存储器地址片解密至少部分基于第二密钥。
在示例C4中,示例C2-C3中的任一个的主旨可以可选地包括其中:从第一寄存器、指令的操作数和控制寄存器中的至少一个获得第二调整的一个或多个其他位。
在示例C5中,示例C2-C4中的任一个的主旨可以可选地包括其中:第二调整包括以下中的至少一个:存储器地址的明文片位;大小位,其指示存储器地址的特定明文片的位的数量;存储器分配大小位,其指示在编码指针所引用的存储器位置处分配的存储器的量;标签位,其表示与编码指针相关联的随机值;准许位,其指示对存储器位置授权的访问级别;类型位,其指示存储器位置中的加密数据的类别;版本位,其表示与编码指针相关联的确定不同的值;特许级别位,其指示用户级别或超级用户级别;以及密码上下文标识符位,其表示对于特定函数组的唯一值。
在示例C6中,示例C2-C5中的任一个的主旨可以可选地包括其中:响应于请求分配存储器的一部分,电路进一步包括:获得对于存储器位置的存储器地址;以及生成指向存储器位置的编码指针。生成编码指针要包括:将第一上下文信息存储在编码指针的第一位中;并且通过至少部分基于第二调整来对存储器地址中的一个或多个位的位的子集加密而生成存储器地址片。
在示例C7中,示例C2-C6中的任一个的主旨可以可选地包括其中:对编码指针解码包括使经解密的存储器地址片和存储器地址的明文片连接。
在示例C8中,示例C7的主旨可以可选地包括其中:存储器地址的明文片存储在编码指针中或第二寄存器中。
在示例C9中,示例C7-C8中的任一个的主旨可以可选地包括其中:第一调整包括:存储在编码指针的第一位中的第一上下文信息;以及至少使用与存储器地址的明文片连接的经解密的存储器地址片和编码指针中的偏移而生成的线性地址。
在示例C10中,示例C1-C9中的任一个的主旨可以可选地包括其中:编码指针的第一位被随机化或依次递增。
在示例C11中,示例C1-C8中的任一个的主旨可以可选地包括其中:在编码指针的不可变明文位中存储存储器地址的第二片;以及其中:在编码指针的可变明文位中存储存储器地址的第三片。
在示例C12中,示例C11的主旨可以可选地包括其中:第一调整包括编码指针的第一位、编码指针的第二位、编码指针的不可变明文位以及编码指针的可变明文位。
在示例C13中,示例C11-C12中的任一个的主旨可以可选地包括其中:第一上下文信息包括大小元数据,其以2的幂指示编码指针的不可变明文位中或编码指针的可变明文位中所包括的位的第一数量。
在示例C14中,示例C13的主旨可以可选地包括其中:基于大小元数据指示位数量大于编码指针的不可变明文位或编码指针的可变明文位的位的最大允许数量,大小元数据将时间维度编码到存储器位置。
在示例C15中,示例C1的主旨可以可选地包括其中:编码指针的第一位被随机化并且存储器地址采用明文格式存储在编码指针中的一个或多个其他位中。
在示例C16中,示例C15的主旨可以可选地包括其中:第一调整包括编码指针的第一位和采用明文格式存储存储器地址的编码指针中的一个或多个其他位。
在示例C17中,示例C1-C16中的任一个的主旨可以可选地包括其中:第一调整的一个或多个位整个从编码指针导出。
在示例C18中,示例C1-C16中的任一个的主旨可以可选地包括其中:从指令的操作数和控制寄存器中的至少一个获得第一调整的一个或多个位中的至少一些。
在示例C19中,示例C1-C18中的任一个的主旨可以可选地包括其中:第一调整包括以下中的至少一个:位大小,其指示存储器地址的特定明文片的位的数量;存储器分配大小位,其指示在编码指针所引用的存储器位置处分配的存储器的量;标签位,其表示与编码指针相关联的随机值;准许位,其指示对存储器位置授权的访问级别;类型位,其指示存储器位置中的加密数据的类别;版本位,其表示与编码指针相关联的确定不同的值;特许级别位,其指示用户级别或超级用户级别;和密码上下文标识符位,其表示对于特定函数组的唯一值。
在示例C20中,示例C1-C19中的任一个的主旨可以可选地包括其中:编码指针包括第三位,其指示编码指针是否要与遗留软件程序一起使用。
示例X1提供这样的设备,其包括用于执行示例M1-M20中的任一个的方法的部件。
在示例X2中,示例X1的主旨可以可选地包括其中:用于执行方法的部件包括至少一个处理器和至少一个存储器元件。
在示例X3中,示例X2的主旨可以可选地包括其中:至少一个存储器元件包括机器可读指令,其在被执行时促使设备执行示例M1-M20中的任一个的方法。
在示例X4中,示例X1-X3中的任一个的主旨可以可选地包括其中:设备是计算系统或芯片上系统中的一个。
示例Y1提供至少一个机器可读存储介质,其包括指令,其中指令在被执行时实现如示例A1-A20中的任一个提供的设备或实现如示例M1-M20中的任一个提供的方法。
Claims (25)
1.一种处理器,所述处理器包括:
核,用于执行指令,所述核包括:
第一寄存器,用于存储指向存储器位置的编码指针,其中在所述编码指针的第一位中存储第一上下文信息并且在所述编码指针的第二位中存储所述存储器位置的存储器地址片;
电路,用于:
对所述编码指针解码来获得所述存储器位置的所述存储器地址;
使用通过对所述编码指针解码而获得的所述存储器地址来访问所述存储器位置处的加密数据;以及
基于第一密钥和第一调整来对所述加密数据解密,所述第一调整包括至少部分从所述编码指针导出的一个或多个位。
2.如权利要求1所述的处理器,其中对所述编码指针解码包括:
通过至少部分基于第二调整来对所述编码指针中的所述存储器地址片解密而生成经解密的所述存储器地址片。
3.如权利要求2所述的处理器,其中对存储在所述编码指针的所述第二位中的所述存储器地址片解密至少部分基于第二密钥。
4.如权利要求2所述的处理器,其中从所述第一寄存器、所述指令的操作数和控制寄存器中的至少一个获得所述第二调整的一个或多个位。
5.如权利要求2所述的处理器,其中所述第二调整包括以下中的至少一个:
所述存储器地址的明文片位;
大小位,所述大小位指示所述存储器地址的特定明文片的位的数量;
存储器分配大小位,所述存储器分配大小位指示在所述编码指针所引用的所述存储器位置处分配的存储器的量;
标签位,所述标签位表示与所述编码指针相关联的随机值;
准许位,所述准许位指示对所述存储器位置授权的访问级别;
类型位,所述类型位指示所述存储器位置中的所述加密数据的类别;
版本位,所述版本位表示与所述编码指针相关联的确定不同的值;
特许级别位,所述特许级别位指示用户级别或超级用户级别;以及
密码上下文标识符位,所述密码上下文标识符位表示对于特定函数组的唯一值。
6. 如权利要求2所述的处理器,其中所述电路进一步用于响应于请求分配存储器的一部分而:
获得对于所述存储器位置的所述存储器地址;以及
生成指向所述存储器位置的所述编码指针,包括:
将所述第一上下文信息存储在所述编码指针的所述第一位中;以及
通过至少部分基于所述第二调整而对所述存储器地址中的一个或多个位的位的子集加密来生成所述存储器地址片。
7.如权利要求2所述的处理器,其中对所述编码指针解码包括:
使所述经解密的所述存储器地址片与所述存储器地址的明文片连接。
8.如权利要求7所述的处理器,其中在所述编码指针中或在第二寄存器中存储所述存储器地址的所述明文片。
9. 如权利要求7所述的处理器,其中所述第一调整包括:
存储在所述编码指针的所述第一位中的所述第一上下文信息;以及
与所述存储器地址的所述明文片连接的所述经解密的所述存储器地址片和所述编码指针中的偏移。
10.如权利要求9所述的处理器,其中所述编码指针的所述第一位被随机化或依次递增。
11.如权利要求1所述的处理器,其中在所述编码指针的不可变明文位中存储所述存储器地址的第二片,并且在所述编码指针的可变明文位中存储所述存储器地址的第三片。
12.如权利要求11所述的处理器,其中所述第一调整包括所述编码指针的所述第一位、所述编码指针的所述第二位、所述编码指针的所述不可变明文位以及所述编码指针的所述可变明文位。
13.如权利要求11所述的处理器,其中所述第一上下文信息包括大小元数据,所述大小元数据以2的幂指示所述编码指针的所述不可变明文位中或所述编码指针的所述可变明文位中所包括的位的第一数量。
14.如权利要求13所述的处理器,其中基于所述大小元数据指示位数量大于所述编码指针的所述不可变明文位或所述编码指针的所述可变明文位的位的最大允许数量,所述大小元数据将时间维度编码到所述存储器位置。
15.如权利要求1所述的处理器,其中所述编码指针的所述第一位被随机化并且所述存储器地址采用明文格式存储在所述编码指针中的一个或多个其他位中。
16.如权利要求15所述的处理器,其中所述第一调整包括所述编码指针的所述第一位和采用所述明文格式存储所述存储器地址的所述编码指针中的所述一个或多个其他位。
17.如权利要求1-16中任一项所述的处理器,其中所述第一调整的所述一个或多个位整个从所述编码指针导出。
18.如权利要求1-3和5-7中任一项所述的处理器,其中从所述指令的操作数和控制寄存器中的至少一个获得所述第一调整的所述一个或多个位中的至少一些。
19.如权利要求1-4和6-18中任一项所述的处理器,其中所述第一调整包括以下中的至少一个:
位大小,所述位大小指示所述存储器地址的特定明文片的位的数量;
存储器分配大小位,所述存储器分配大小位指示在所述编码指针所引用的所述存储器位置处分配的存储器的量;
标签位,所述标签位表示与所述编码指针相关联的随机值;
准许位,所述准许位指示对所述存储器位置授权的访问级别;
类型位,所述类型位指示所述存储器位置中的所述加密数据的类别;
版本位,所述版本位表示与所述编码指针相关联的确定不同的值;
特许级别位,所述特许级别位指示用户级别或超级用户级别;以及
密码上下文标识符位,所述密码上下文标识符位表示对于特定函数组的唯一值。
20.一种方法,所述方法包括:
将指向存储器位置的编码指针存储在寄存器中,其中第一上下文信息存储在所述编码指针的第一位中并且所述存储器位置的存储器地址片存储在所述编码指针的第二位中;
对所述编码指针解码来获得所述存储器位置的所述存储器地址;
基于第一密钥和至少部分从所述编码指针导出的第一调整来对数据加密;以及
使用通过对所述编码指针解码而获得的所述存储器地址来将所述加密数据存储在所述存储器位置处。
21.如权利要求20所述的方法,其中存储在所述编码指针的所述第二位中的所述存储器地址片被加密,其中对所述编码指针解码包括:
通过至少部分基于第二调整而对所述编码指针中的所述存储器地址片解密来生成经解密的所述存储器地址片。
22.如权利要求21所述的方法,其中从第一寄存器、指令的操作数和控制寄存器中的至少一个获得所述第二调整的一个或多个位。
23.如权利要求21所述的方法,其中对所述编码指针解码进一步包括:
使所述经解密的所述存储器地址片与所述存储器地址的明文片连接,其中所述存储器地址的所述明文片存储在所述编码指针中或在第二寄存器中。
24.一种设备,所述设备包括用于执行权利要求20-23中任一项所述的方法的部件,其中所述用于执行所述方法的部件包括处理器和存储器元件。
25.至少一种机器可读存储介质,包括指令,所述指令当被执行时使实现权利要求1-16中任一项所要求保护的处理器以及实现权利要求20-23中任一项所要求保护的方法。
Applications Claiming Priority (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201962868884P | 2019-06-29 | 2019-06-29 | |
US62/868884 | 2019-06-29 | ||
US16/722,342 US11829488B2 (en) | 2019-06-29 | 2019-12-20 | Pointer based data encryption |
US16/722342 | 2019-12-20 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN112149149A true CN112149149A (zh) | 2020-12-29 |
Family
ID=70159013
Family Applications (7)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010211440.7A Pending CN112149188A (zh) | 2019-06-29 | 2020-03-24 | 支持加密计算的微处理器流水线电路 |
CN202010211610.1A Pending CN112149143A (zh) | 2019-06-29 | 2020-03-24 | 用于存储器标记的低存储器开销堆管理 |
CN202010223760.4A Pending CN112149147A (zh) | 2019-06-29 | 2020-03-26 | 用于密码计算的隐式完整性 |
CN202010224151.0A Pending CN112149148A (zh) | 2019-06-29 | 2020-03-26 | 计算环境中存储器隔间的密码隔离 |
CN202010224565.3A Pending CN112149149A (zh) | 2019-06-29 | 2020-03-26 | 基于指针的数据加密 |
CN202010223442.8A Pending CN112149145A (zh) | 2019-06-29 | 2020-03-26 | 基于不变指针的数据加密 |
CN202010227190.6A Pending CN112149150A (zh) | 2019-06-29 | 2020-03-27 | 用于密码计算的密钥管理 |
Family Applications Before (4)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010211440.7A Pending CN112149188A (zh) | 2019-06-29 | 2020-03-24 | 支持加密计算的微处理器流水线电路 |
CN202010211610.1A Pending CN112149143A (zh) | 2019-06-29 | 2020-03-24 | 用于存储器标记的低存储器开销堆管理 |
CN202010223760.4A Pending CN112149147A (zh) | 2019-06-29 | 2020-03-26 | 用于密码计算的隐式完整性 |
CN202010224151.0A Pending CN112149148A (zh) | 2019-06-29 | 2020-03-26 | 计算环境中存储器隔间的密码隔离 |
Family Applications After (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010223442.8A Pending CN112149145A (zh) | 2019-06-29 | 2020-03-26 | 基于不变指针的数据加密 |
CN202010227190.6A Pending CN112149150A (zh) | 2019-06-29 | 2020-03-27 | 用于密码计算的密钥管理 |
Country Status (3)
Country | Link |
---|---|
US (11) | US11580234B2 (zh) |
EP (7) | EP3757833B1 (zh) |
CN (7) | CN112149188A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114968088A (zh) * | 2022-04-08 | 2022-08-30 | 中移互联网有限公司 | 文件存储方法、文件读取方法及装置 |
Families Citing this family (88)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9378560B2 (en) * | 2011-06-17 | 2016-06-28 | Advanced Micro Devices, Inc. | Real time on-chip texture decompression using shader processors |
US11212097B2 (en) * | 2015-05-17 | 2021-12-28 | Gideon Samid | Mixed unary cryptography |
US11843597B2 (en) * | 2016-05-18 | 2023-12-12 | Vercrio, Inc. | Automated scalable identity-proofing and authentication process |
CA3086236A1 (en) * | 2017-12-18 | 2019-06-27 | Beijing Sankuai Online Technology Co., Ltd | Encrypted storage of data |
US20210042100A1 (en) | 2018-02-02 | 2021-02-11 | Dover Microsystems, Inc. | System and method for translating mapping policy into code |
WO2019213061A1 (en) | 2018-04-30 | 2019-11-07 | Dover Microsystems, Inc. | Systems and methods for checking safety properties |
US10860709B2 (en) * | 2018-06-29 | 2020-12-08 | Intel Corporation | Encoded inline capabilities |
US11106441B2 (en) * | 2018-09-14 | 2021-08-31 | Microsoft Technology Licensing, Llc | Secure device-bound edge workload delivery |
TW202022678A (zh) | 2018-11-06 | 2020-06-16 | 美商多佛微系統公司 | 用於停滯主處理器的系統和方法 |
US11841956B2 (en) | 2018-12-18 | 2023-12-12 | Dover Microsystems, Inc. | Systems and methods for data lifecycle protection |
US11250165B2 (en) | 2019-12-20 | 2022-02-15 | Intel Corporation | Binding of cryptographic operations to context or speculative execution restrictions |
US11403234B2 (en) | 2019-06-29 | 2022-08-02 | Intel Corporation | Cryptographic computing using encrypted base addresses and used in multi-tenant environments |
US11575504B2 (en) | 2019-06-29 | 2023-02-07 | Intel Corporation | Cryptographic computing engine for memory load and store units of a microarchitecture pipeline |
US11580234B2 (en) | 2019-06-29 | 2023-02-14 | Intel Corporation | Implicit integrity for cryptographic computing |
GB2601666B (en) * | 2019-08-06 | 2023-04-26 | Ictk Holdings Co Ltd | Processor, processor operation method and electronic device comprising same |
US11386101B2 (en) * | 2019-08-08 | 2022-07-12 | Cisco Technology, Inc. | Systems and methods for fuzzy search without full text |
US11546271B2 (en) | 2019-08-09 | 2023-01-03 | Oracle International Corporation | System and method for tag based request context in a cloud infrastructure environment |
US11558312B2 (en) | 2019-08-09 | 2023-01-17 | Oracle International Corporation | System and method for supporting a usage calculation process in a cloud infrastructure environment |
US20210049036A1 (en) * | 2019-08-13 | 2021-02-18 | Facebook Technologies, Llc | Capability Space |
US11316839B2 (en) | 2019-08-19 | 2022-04-26 | Red Hat, Inc. | Proof-of-work key wrapping for temporally restricting data access |
US11424920B2 (en) | 2019-08-19 | 2022-08-23 | Red Hat, Inc. | Proof-of-work key wrapping for cryptographically controlling data access |
US11411728B2 (en) | 2019-08-19 | 2022-08-09 | Red Hat, Inc. | Proof-of-work key wrapping with individual key fragments |
US11436352B2 (en) | 2019-08-19 | 2022-09-06 | Red Hat, Inc. | Proof-of-work key wrapping for restricting data execution based on device capabilities |
US11411938B2 (en) | 2019-08-19 | 2022-08-09 | Red Hat, Inc. | Proof-of-work key wrapping with integrated key fragments |
US11271734B2 (en) * | 2019-08-19 | 2022-03-08 | Red Hat, Inc. | Proof-of-work key wrapping for verifying device capabilities |
US11303437B2 (en) | 2019-08-19 | 2022-04-12 | Red Hat, Inc. | Proof-of-work key wrapping with key thresholding |
US11294715B2 (en) | 2019-08-28 | 2022-04-05 | Marvell Asia Pte, Ltd. | System and method for queuing work within a virtualized scheduler based on in-unit accounting of in-unit entries |
US11681806B2 (en) * | 2019-10-15 | 2023-06-20 | International Business Machines Corporation | Protecting against out-of-bounds buffer references |
US11520878B2 (en) * | 2019-11-26 | 2022-12-06 | Red Hat, Inc. | Using a trusted execution environment for a proof-of-work key wrapping scheme that restricts execution based on device capabilities |
US11263310B2 (en) * | 2019-11-26 | 2022-03-01 | Red Hat, Inc. | Using a trusted execution environment for a proof-of-work key wrapping scheme that verifies remote device capabilities |
US11176058B2 (en) * | 2020-01-22 | 2021-11-16 | Arm Limited | Address decryption for memory storage |
US11216366B2 (en) * | 2020-02-13 | 2022-01-04 | Intel Corporation | Security check systems and methods for memory allocations |
WO2021162439A1 (en) * | 2020-02-14 | 2021-08-19 | Samsung Electronics Co., Ltd. | Electronic device performing restoration on basis of comparison of constant value and control method thereof |
US11249976B1 (en) | 2020-02-18 | 2022-02-15 | Wells Fargo Bank, N.A. | Data structures for computationally efficient data promulgation among devices in decentralized networks |
US11500981B2 (en) * | 2020-03-24 | 2022-11-15 | Microsoft Technology Licensing, Llc | Shadow stack enforcement range for dynamic code |
US11379579B2 (en) * | 2020-03-24 | 2022-07-05 | Microsoft Technology Licensing, Llc | Shadow stack violation enforcement at module granularity |
US11861364B2 (en) * | 2020-03-24 | 2024-01-02 | Microsoft Technology Licensing, Llc | Circular shadow stack in audit mode |
US11429580B2 (en) | 2020-06-25 | 2022-08-30 | Intel Corporation | Collision-free hashing for accessing cryptographic computing metadata and for cache expansion |
US11070621B1 (en) | 2020-07-21 | 2021-07-20 | Cisco Technology, Inc. | Reuse of execution environments while guaranteeing isolation in serverless computing |
US20230269076A1 (en) * | 2020-09-01 | 2023-08-24 | Intel Corporation | Creating, using, and managing protected cryptography keys |
US11494356B2 (en) | 2020-09-23 | 2022-11-08 | Salesforce.Com, Inc. | Key permission distribution |
US11816228B2 (en) * | 2020-09-25 | 2023-11-14 | Advanced Micro Devices, Inc. | Metadata tweak for channel encryption differentiation |
US11928472B2 (en) | 2020-09-26 | 2024-03-12 | Intel Corporation | Branch prefetch mechanisms for mitigating frontend branch resteers |
US11886332B2 (en) | 2020-10-30 | 2024-01-30 | Universitat Politecnica De Valencia | Dynamic memory allocation methods and systems |
CN112492580B (zh) * | 2020-11-25 | 2023-08-18 | 北京小米移动软件有限公司 | 信息处理方法及装置、通信设备及存储介质 |
US11604740B2 (en) * | 2020-12-01 | 2023-03-14 | Capital One Services, Llc | Obfuscating cryptographic material in memory |
US11797713B2 (en) | 2020-12-16 | 2023-10-24 | International Business Machines Corporation | Systems and methods for dynamic control of a secure mode of operation in a processor |
US20220197822A1 (en) * | 2020-12-23 | 2022-06-23 | Intel Corporation | 64-bit virtual addresses having metadata bit(s) and canonicality check that does not fail due to non-canonical values of metadata bit(s) |
WO2022133860A1 (en) * | 2020-12-24 | 2022-06-30 | Intel Corporation | Key management for crypto processors attached to other processing units |
WO2022139850A1 (en) * | 2020-12-26 | 2022-06-30 | Intel Corporation | Cryptographic computing including enhanced cryptographic addresses |
US11669625B2 (en) | 2020-12-26 | 2023-06-06 | Intel Corporation | Data type based cryptographic computing |
US11755500B2 (en) * | 2020-12-26 | 2023-09-12 | Intel Corporation | Cryptographic computing with disaggregated memory |
US20210120077A1 (en) * | 2020-12-26 | 2021-04-22 | Intel Corporation | Multi-tenant isolated data regions for collaborative platform architectures |
US11580035B2 (en) | 2020-12-26 | 2023-02-14 | Intel Corporation | Fine-grained stack protection using cryptographic computing |
US20210117341A1 (en) * | 2020-12-26 | 2021-04-22 | Intel Corporation | Cache line slot level encryption based on context information |
US11625337B2 (en) | 2020-12-26 | 2023-04-11 | Intel Corporation | Encoded pointer based data encryption |
CN112738219B (zh) * | 2020-12-28 | 2022-06-10 | 中国第一汽车股份有限公司 | 程序运行方法、装置、车辆及存储介质 |
WO2022171299A1 (en) * | 2021-02-12 | 2022-08-18 | Huawei Technologies Co., Ltd. | Low overhead active mitigation of security vulnerabilities by memory tagging |
US20220261509A1 (en) * | 2021-02-13 | 2022-08-18 | Intel Corporation | Region-based deterministic memory safety |
US11223489B1 (en) | 2021-02-23 | 2022-01-11 | Garantir LLC | Advanced security control implementation of proxied cryptographic keys |
EP4060537A1 (en) * | 2021-03-17 | 2022-09-21 | Secure Thingz Limited | A method and system for securely provisioning electronic devices |
US11972126B2 (en) | 2021-03-26 | 2024-04-30 | Intel Corporation | Data relocation for inline metadata |
US11218317B1 (en) | 2021-05-28 | 2022-01-04 | Garantir LLC | Secure enclave implementation of proxied cryptographic keys |
US11418329B1 (en) | 2021-05-28 | 2022-08-16 | Garantir LLC | Shared secret implementation of proxied cryptographic keys |
US11868275B2 (en) * | 2021-06-24 | 2024-01-09 | International Business Machines Corporation | Encrypted data processing design including local buffers |
US20230029331A1 (en) * | 2021-07-26 | 2023-01-26 | Microsoft Technology Licensing, Llc | Dynamically allocatable physically addressed metadata storage |
WO2023025370A1 (en) * | 2021-08-24 | 2023-03-02 | Huawei Technologies Co., Ltd. | Control flow integrity |
WO2023034586A1 (en) * | 2021-09-03 | 2023-03-09 | Dover Microsystems, Inc. | Systems and methods for on-demand loading of metadata |
US11502827B1 (en) | 2021-09-03 | 2022-11-15 | Garantir LLC | Exporting remote cryptographic keys |
JP2023039697A (ja) | 2021-09-09 | 2023-03-22 | キオクシア株式会社 | メモリシステム |
US11372969B1 (en) * | 2021-09-17 | 2022-06-28 | Polyverse Corporation | Randomized canary and shadow stack for JIT-ROP defense |
US11954045B2 (en) | 2021-09-24 | 2024-04-09 | Intel Corporation | Object and cacheline granularity cryptographic memory integrity |
US20220100911A1 (en) * | 2021-12-10 | 2022-03-31 | Intel Corporation | Cryptographic computing with legacy peripheral devices |
US20220114285A1 (en) * | 2021-12-22 | 2022-04-14 | Intel Corporation | Data oblivious cryptographic computing |
EP4207679A1 (en) * | 2021-12-31 | 2023-07-05 | G-Innovations Viet Nam Joint Stock Company | Method, mobile equipment, and system for keystream protection |
CN114357488B (zh) * | 2022-01-04 | 2022-09-16 | 深圳市智百威科技发展有限公司 | 一种数据加密系统及方法 |
US20230251782A1 (en) * | 2022-02-10 | 2023-08-10 | Macronix International Co., Ltd. | Memory device and associated control method |
WO2023164167A2 (en) * | 2022-02-25 | 2023-08-31 | Cryptography Research, Inc. | Techniques and devices for configurable memory encryption and authentication |
US20220179949A1 (en) * | 2022-02-28 | 2022-06-09 | Intel Corporation | Compiler-directed selection of objects for capability protection |
US20220207133A1 (en) | 2022-03-16 | 2022-06-30 | Intel Corporation | Cryptographic enforcement of borrow checking across groups of pointers |
US11836094B2 (en) * | 2022-03-21 | 2023-12-05 | Intel Corporation | Cryptographic data objects page conversion |
US11789737B2 (en) | 2022-03-24 | 2023-10-17 | Intel Corporation | Capability-based stack protection for software fault isolation |
US20220222183A1 (en) * | 2022-03-25 | 2022-07-14 | Intel Corporation | Tagless implicit integrity with multi-perspective pattern search |
WO2023212149A1 (en) * | 2022-04-28 | 2023-11-02 | Dover Microsystems, Inc. | Systems and methods for enforcing encoded policies |
US11949593B2 (en) * | 2022-05-10 | 2024-04-02 | Cisco Technology, Inc. | Stateless address translation at an autonomous system (AS) boundary for host privacy |
TWI816456B (zh) * | 2022-06-30 | 2023-09-21 | 新唐科技股份有限公司 | 密碼裝置及其密碼方法 |
EP4325387A1 (de) * | 2022-08-19 | 2024-02-21 | Steen Harbach AG | Verfahren zum bereitstellen eines digitalen schlüssels |
US20240104013A1 (en) * | 2022-09-28 | 2024-03-28 | Intel Corporation | Deterministic adjacent overflow detection for slotted memory pointers |
Family Cites Families (105)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6570989B1 (en) | 1998-04-27 | 2003-05-27 | Matsushita Electric Industrial Co., Ltd. | Cryptographic processing apparatus, cryptographic processing method, and storage medium storing cryptographic processing program for realizing high-speed cryptographic processing without impairing security |
CN1193537C (zh) | 2000-07-04 | 2005-03-16 | 皇家菲利浦电子有限公司 | 将输入数据块加密转换成输出数据块的方法和系统 |
US7684565B2 (en) | 2001-01-16 | 2010-03-23 | General Instrument Corporation | System for securely communicating information packets |
JP4199937B2 (ja) | 2001-03-06 | 2008-12-24 | 株式会社日立製作所 | 耐タンパー暗号処理方法 |
US7043017B2 (en) | 2001-09-13 | 2006-05-09 | Freescale Semiconductor, Inc. | Key stream cipher device |
US6792551B2 (en) * | 2001-11-26 | 2004-09-14 | Intel Corporation | Method and apparatus for enabling a self suspend mode for a processor |
US6694401B2 (en) * | 2001-12-28 | 2004-02-17 | Intel Corporation | Method and apparatus for executing real-mode interrupts from within extended SMRAM handler |
US20030149869A1 (en) | 2002-02-01 | 2003-08-07 | Paul Gleichauf | Method and system for securely storing and trasmitting data by applying a one-time pad |
US7793286B2 (en) * | 2002-12-19 | 2010-09-07 | Intel Corporation | Methods and systems to manage machine state in virtual machine operations |
WO2004092968A2 (en) | 2003-04-11 | 2004-10-28 | Sun Microsystems, Inc. | Multi-node system with global access states |
US7225298B2 (en) | 2003-04-11 | 2007-05-29 | Sun Microsystems, Inc. | Multi-node computer system in which networks in different nodes implement different conveyance modes |
US20070152854A1 (en) * | 2005-12-29 | 2007-07-05 | Drew Copley | Forgery detection using entropy modeling |
JP2007235323A (ja) | 2006-02-28 | 2007-09-13 | Toshiba Corp | 高度機密情報の保存/記録方法、高度機密情報を利用する再生装置および高度機密情報を格納するメモリ |
EP1870829B1 (en) | 2006-06-23 | 2014-12-03 | Microsoft Corporation | Securing software by enforcing data flow integrity |
US20080080708A1 (en) | 2006-09-29 | 2008-04-03 | Mcalister Donald Kent | Key wrapping system and method using encryption |
US8155308B1 (en) | 2006-10-10 | 2012-04-10 | Marvell International Ltd. | Advanced encryption system hardware architecture |
US7907723B2 (en) | 2006-10-11 | 2011-03-15 | Frank Rubin | Device, system and method for fast secure message encryption without key distribution |
US8009829B2 (en) | 2006-10-25 | 2011-08-30 | Spyrus, Inc. | Method and system for deploying advanced cryptographic algorithms |
US7761676B2 (en) | 2006-12-12 | 2010-07-20 | Intel Corporation | Protecting memory by containing pointer accesses |
US20080263117A1 (en) * | 2007-04-23 | 2008-10-23 | Gregory Gordon Rose | Initial seed management for pseudorandom number generator |
US8085934B1 (en) | 2007-07-11 | 2011-12-27 | Marvell International Ltd. | Reverse cryptographic key expansion |
US9424315B2 (en) | 2007-08-27 | 2016-08-23 | Teradata Us, Inc. | Methods and systems for run-time scheduling database operations that are executed in hardware |
JP5044848B2 (ja) | 2007-12-04 | 2012-10-10 | 剣 竜沢 | Pi++ストリーム暗号の暗号方法および復号方法、並びにパイ・データに基づく暗号算法及び復号化算法 |
EP2073430B1 (en) | 2007-12-21 | 2013-07-24 | Research In Motion Limited | Methods and systems for secure channel initialization transaction security based on a low entropy shared secret |
US20090172393A1 (en) | 2007-12-31 | 2009-07-02 | Haluk Kent Tanik | Method And System For Transferring Data And Instructions Through A Host File System |
US8879725B2 (en) | 2008-02-29 | 2014-11-04 | Intel Corporation | Combining instructions including an instruction that performs a sequence of transformations to isolate one transformation |
US8675868B1 (en) | 2008-07-01 | 2014-03-18 | Maxim Integrated Products, Inc. | Encrypting an address-dependent value along with code to prevent execution or use of moved code |
WO2010014200A1 (en) * | 2008-07-28 | 2010-02-04 | Advanced Micro Devices, Inc. | Virtualizable advanced synchronization facility |
US8156385B2 (en) | 2009-10-28 | 2012-04-10 | International Business Machines Corporation | Systems and methods for backward-compatible constant-time exception-protection memory |
US8762343B2 (en) | 2009-12-29 | 2014-06-24 | Cleversafe, Inc. | Dispersed storage of software |
US8645714B2 (en) | 2010-05-25 | 2014-02-04 | Via Technologies, Inc. | Branch target address cache for predicting instruction decryption keys in a microprocessor that fetches and decrypts encrypted instructions |
US9892283B2 (en) | 2010-05-25 | 2018-02-13 | Via Technologies, Inc. | Decryption of encrypted instructions using keys selected on basis of instruction fetch address |
US10244239B2 (en) * | 2010-12-28 | 2019-03-26 | Dolby Laboratories Licensing Corporation | Parameter set for picture segmentation |
EP2506487B1 (en) | 2011-03-30 | 2013-10-23 | Nagravision S.A. | Method of encryption with bidirectional difference propagation |
US9201652B2 (en) | 2011-05-03 | 2015-12-01 | Qualcomm Incorporated | Methods and apparatus for storage and translation of entropy encoded software embedded within a memory hierarchy |
EP2653992A1 (en) | 2012-04-17 | 2013-10-23 | Itron, Inc. | Microcontroller configured for external memory decryption |
US9904788B2 (en) | 2012-08-08 | 2018-02-27 | Amazon Technologies, Inc. | Redundant key management |
US9037872B2 (en) | 2012-12-17 | 2015-05-19 | Advanced Micro Devices, Inc. | Hardware based return pointer encryption |
KR101795771B1 (ko) | 2013-03-18 | 2017-11-09 | 한국전자통신연구원 | 정수 기반 준동형 암호 기법에서 압축 암복호화를 제공하는 시스템 및 방법 |
US9053216B1 (en) * | 2013-08-09 | 2015-06-09 | Datto, Inc. | CPU register assisted virtual machine screenshot capture timing apparatuses, methods and systems |
US10700856B2 (en) | 2013-11-19 | 2020-06-30 | Network-1 Technologies, Inc. | Key derivation for a module using an embedded universal integrated circuit card |
US9213653B2 (en) | 2013-12-05 | 2015-12-15 | Intel Corporation | Memory integrity |
KR101516574B1 (ko) | 2014-02-21 | 2015-05-04 | 한국전자통신연구원 | 형태보존 암호화를 위한 가변길이 블록암호 장치 및 방법 |
US9703733B2 (en) | 2014-06-27 | 2017-07-11 | Intel Corporation | Instructions and logic to interrupt and resume paging in a secure enclave page cache |
KR101593169B1 (ko) | 2014-08-20 | 2016-02-15 | 한국전자통신연구원 | 페이스텔 구조의 가변길이 블록암호 장치 및 방법 |
US9436847B2 (en) | 2014-09-26 | 2016-09-06 | Intel Corporation | Cryptographic pointer address encoding |
US9514285B2 (en) | 2014-09-26 | 2016-12-06 | Intel Corporation | Creating stack position dependent cryptographic return address to mitigate return oriented programming attacks |
US9830162B2 (en) | 2014-12-15 | 2017-11-28 | Intel Corporation | Technologies for indirect branch target security |
US9852301B2 (en) | 2014-12-24 | 2017-12-26 | Intel Corporation | Creating secure channels between a protected execution environment and fixed-function endpoints |
US9792229B2 (en) | 2015-03-27 | 2017-10-17 | Intel Corporation | Protecting a memory |
IN2015DE01753A (zh) | 2015-06-11 | 2015-08-28 | Pradeep Varma | |
US9893881B2 (en) | 2015-06-29 | 2018-02-13 | Intel Corporation | Efficient sharing of hardware encryption pipeline for multiple security solutions |
US10181946B2 (en) | 2015-07-20 | 2019-01-15 | Intel Corporation | Cryptographic protection of I/O data for DMA capable I/O controllers |
US10235176B2 (en) | 2015-12-17 | 2019-03-19 | The Charles Stark Draper Laboratory, Inc. | Techniques for metadata processing |
US9990249B2 (en) | 2015-12-24 | 2018-06-05 | Intel Corporation | Memory integrity with error detection and correction |
GB2547249B (en) | 2016-02-12 | 2019-09-11 | Advanced Risc Mach Ltd | An apparatus and method for generating signed bounded pointers |
US10585809B2 (en) | 2016-04-01 | 2020-03-10 | Intel Corporation | Convolutional memory integrity |
RU2634173C1 (ru) | 2016-06-24 | 2017-10-24 | Акционерное общество "Лаборатория Касперского" | Система и способ обнаружения приложения удалённого администрирования |
US11989332B2 (en) | 2016-08-11 | 2024-05-21 | Intel Corporation | Secure public cloud with protected guest-verified host control |
US20180082057A1 (en) | 2016-09-22 | 2018-03-22 | Intel Corporation | Access control |
US10261854B2 (en) | 2016-09-30 | 2019-04-16 | Intel Corporation | Memory integrity violation analysis method and apparatus |
US20180095906A1 (en) | 2016-09-30 | 2018-04-05 | Intel Corporation | Hardware-based shared data coherency |
US10235304B2 (en) | 2016-10-01 | 2019-03-19 | Intel Corporation | Multi-crypto-color-group VM/enclave memory integrity method and apparatus |
US10805070B2 (en) | 2016-10-19 | 2020-10-13 | Index Systems, Llc | Systems and methods for multi-region encryption/decryption redundancy |
US10387305B2 (en) | 2016-12-23 | 2019-08-20 | Intel Corporation | Techniques for compression memory coloring |
US10469254B2 (en) | 2017-03-29 | 2019-11-05 | Intuit Inc. | Method and system for hierarchical cryptographic key management |
US10536266B2 (en) * | 2017-05-02 | 2020-01-14 | Seagate Technology Llc | Cryptographically securing entropy for later use |
US10877806B2 (en) | 2017-06-14 | 2020-12-29 | Intel Corporation | Method and apparatus for securely binding a first processor to a second processor |
US10657071B2 (en) | 2017-09-25 | 2020-05-19 | Intel Corporation | System, apparatus and method for page granular, software controlled multiple key memory encryption |
US10776525B2 (en) | 2017-09-29 | 2020-09-15 | Intel Corporation | Multi-tenant cryptographic memory isolation |
US10769272B2 (en) | 2017-09-29 | 2020-09-08 | Intel Corporation | Technology to protect virtual machines from malicious virtual machine managers |
US10706164B2 (en) | 2017-09-29 | 2020-07-07 | Intel Corporation | Crypto-enforced capabilities for isolation |
CN109800103A (zh) * | 2017-11-17 | 2019-05-24 | 英特尔公司 | 密码系统存储器管理 |
US11082432B2 (en) | 2017-12-05 | 2021-08-03 | Intel Corporation | Methods and apparatus to support reliable digital communications without integrity metadata |
US10929527B2 (en) | 2017-12-20 | 2021-02-23 | Intel Corporation | Methods and arrangements for implicit integrity |
CN110490008B (zh) | 2018-05-14 | 2021-08-10 | 英韧科技(上海)有限公司 | 安全装置及安全芯片 |
IT201800005506A1 (it) | 2018-05-18 | 2019-11-18 | Sistema di elaborazione, relativo circuito integrato e procedimento | |
WO2019226188A1 (en) | 2018-05-21 | 2019-11-28 | Google Llc | Automatic generation of patches for security violations |
US10871983B2 (en) | 2018-05-31 | 2020-12-22 | Intel Corporation | Process-based multi-key total memory encryption |
US10922439B2 (en) | 2018-06-29 | 2021-02-16 | Intel Corporation | Technologies for verifying memory integrity across multiple memory regions |
US10785028B2 (en) | 2018-06-29 | 2020-09-22 | Intel Corporation | Protection of keys and sensitive data from attack within microprocessor architecture |
US11630920B2 (en) | 2018-06-29 | 2023-04-18 | Intel Corporation | Memory tagging for side-channel defense, memory safety, and sandboxing |
US11258861B2 (en) * | 2018-06-29 | 2022-02-22 | Intel Corporation | Secure reporting of platform state information to a remote server |
US10860709B2 (en) | 2018-06-29 | 2020-12-08 | Intel Corporation | Encoded inline capabilities |
US11188639B2 (en) | 2018-07-19 | 2021-11-30 | Intel Corporation | System, method and apparatus for automatic program compartmentalization |
US11126733B2 (en) | 2018-08-27 | 2021-09-21 | Intel Corporation | System, apparatus and method for configurable trusted input/output access from authorized software |
US11991273B2 (en) | 2018-09-04 | 2024-05-21 | International Business Machines Corporation | Storage device key management for encrypted host data |
US10802910B2 (en) * | 2018-09-17 | 2020-10-13 | Intel Corporation | System for identifying and correcting data errors |
US11288213B2 (en) | 2019-03-29 | 2022-03-29 | Intel Corporation | Memory protection with hidden inline metadata |
US11398899B2 (en) | 2019-05-28 | 2022-07-26 | Shanghai Zhaoxin Semiconductor Co., Ltd. | Data processing device and data processing method |
US11295025B2 (en) | 2019-05-31 | 2022-04-05 | Nxp B.V | Probabilistic memory safety using cryptography |
US20190319781A1 (en) | 2019-06-27 | 2019-10-17 | Intel Corporation | Deterministic Encryption Key Rotation |
US20200145187A1 (en) | 2019-12-20 | 2020-05-07 | Intel Corporation | Bit-length parameterizable cipher |
US11250165B2 (en) | 2019-12-20 | 2022-02-15 | Intel Corporation | Binding of cryptographic operations to context or speculative execution restrictions |
US11403234B2 (en) | 2019-06-29 | 2022-08-02 | Intel Corporation | Cryptographic computing using encrypted base addresses and used in multi-tenant environments |
US20200257827A1 (en) | 2019-06-29 | 2020-08-13 | Intel Corporation | Memory write for ownership access in a core |
US20220382885A1 (en) | 2019-06-29 | 2022-12-01 | David M. Durham | Cryptographic computing using encrypted base addresses and used in multi-tenant environments |
US11580234B2 (en) | 2019-06-29 | 2023-02-14 | Intel Corporation | Implicit integrity for cryptographic computing |
US11575504B2 (en) | 2019-06-29 | 2023-02-07 | Intel Corporation | Cryptographic computing engine for memory load and store units of a microarchitecture pipeline |
US11411938B2 (en) | 2019-08-19 | 2022-08-09 | Red Hat, Inc. | Proof-of-work key wrapping with integrated key fragments |
US11784786B2 (en) | 2020-08-14 | 2023-10-10 | Intel Corporation | Mitigating security vulnerabilities with memory allocation markers in cryptographic computing systems |
US11755500B2 (en) | 2020-12-26 | 2023-09-12 | Intel Corporation | Cryptographic computing with disaggregated memory |
US11580035B2 (en) | 2020-12-26 | 2023-02-14 | Intel Corporation | Fine-grained stack protection using cryptographic computing |
US11669625B2 (en) | 2020-12-26 | 2023-06-06 | Intel Corporation | Data type based cryptographic computing |
US11625337B2 (en) | 2020-12-26 | 2023-04-11 | Intel Corporation | Encoded pointer based data encryption |
-
2019
- 2019-12-10 US US16/709,612 patent/US11580234B2/en active Active
- 2019-12-20 US US16/723,977 patent/US11354423B2/en active Active
- 2019-12-20 US US16/724,105 patent/US11321469B2/en active Active
- 2019-12-20 US US16/722,342 patent/US11829488B2/en active Active
- 2019-12-20 US US16/722,707 patent/US11416624B2/en active Active
- 2019-12-20 US US16/724,026 patent/US11620391B2/en active Active
- 2019-12-20 US US16/723,871 patent/US11768946B2/en active Active
- 2019-12-20 US US16/723,927 patent/US11308225B2/en active Active
-
2020
- 2020-03-13 EP EP20163095.1A patent/EP3757833B1/en active Active
- 2020-03-17 EP EP20163534.9A patent/EP3757850B1/en active Active
- 2020-03-17 EP EP20163661.0A patent/EP3757852B1/en active Active
- 2020-03-17 EP EP20163546.3A patent/EP3757851B1/en active Active
- 2020-03-18 EP EP20163907.7A patent/EP3757854B1/en active Active
- 2020-03-19 EP EP20164326.9A patent/EP3757855A1/en active Pending
- 2020-03-20 EP EP20164636.1A patent/EP3757856B1/en active Active
- 2020-03-24 CN CN202010211440.7A patent/CN112149188A/zh active Pending
- 2020-03-24 CN CN202010211610.1A patent/CN112149143A/zh active Pending
- 2020-03-26 CN CN202010223760.4A patent/CN112149147A/zh active Pending
- 2020-03-26 CN CN202010224151.0A patent/CN112149148A/zh active Pending
- 2020-03-26 CN CN202010224565.3A patent/CN112149149A/zh active Pending
- 2020-03-26 CN CN202010223442.8A patent/CN112149145A/zh active Pending
- 2020-03-27 CN CN202010227190.6A patent/CN112149150A/zh active Pending
-
2022
- 2022-01-14 US US17/576,533 patent/US20220138329A1/en not_active Abandoned
- 2022-06-06 US US17/833,515 patent/US20220300626A1/en active Pending
-
2023
- 2023-10-31 US US18/499,133 patent/US20240061943A1/en active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114968088A (zh) * | 2022-04-08 | 2022-08-30 | 中移互联网有限公司 | 文件存储方法、文件读取方法及装置 |
CN114968088B (zh) * | 2022-04-08 | 2023-09-05 | 中移互联网有限公司 | 文件存储方法、文件读取方法及装置 |
Also Published As
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11829488B2 (en) | Pointer based data encryption | |
EP3761210B1 (en) | Cryptographic computing using encrypted base addresses and used in multi-tenant environments | |
US11711201B2 (en) | Encoded stack pointers | |
US11625337B2 (en) | Encoded pointer based data encryption | |
EP3757858A1 (en) | Memory write for ownership access in a core | |
US11669625B2 (en) | Data type based cryptographic computing | |
US20220382885A1 (en) | Cryptographic computing using encrypted base addresses and used in multi-tenant environments | |
CN112149151A (zh) | 用于微架构流水线的存储器加载单元和存储单元的加密计算引擎 | |
US11580035B2 (en) | Fine-grained stack protection using cryptographic computing | |
US20220343029A1 (en) | Stateless and low-overhead domain isolation using cryptographic computing | |
US20220100907A1 (en) | Cryptographic computing with context information for transient side channel security | |
EP4202700A1 (en) | Transient side-channel aware architecture for cryptographic computing |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |