BR112021010475A2 - Defesa contra análise especulativa de canal lateral de um sistema de computador - Google Patents

Defesa contra análise especulativa de canal lateral de um sistema de computador Download PDF

Info

Publication number
BR112021010475A2
BR112021010475A2 BR112021010475-5A BR112021010475A BR112021010475A2 BR 112021010475 A2 BR112021010475 A2 BR 112021010475A2 BR 112021010475 A BR112021010475 A BR 112021010475A BR 112021010475 A2 BR112021010475 A2 BR 112021010475A2
Authority
BR
Brazil
Prior art keywords
memory
address
cache
processor
tag
Prior art date
Application number
BR112021010475-5A
Other languages
English (en)
Inventor
David M. Durham
Original Assignee
Intel Corporation
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Intel Corporation filed Critical Intel Corporation
Publication of BR112021010475A2 publication Critical patent/BR112021010475A2/pt

Links

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/06Cryptographic 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/0618Block ciphers, i.e. encrypting groups of characters of a plain text message using fixed encryption transformation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/062Securing storage systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/55Detecting local intrusion or implementing counter-measures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0864Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches using pseudo-associative means, e.g. set-associative or hashing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0893Caches characterised by their organisation or structure
    • G06F12/0895Caches characterised by their organisation or structure of parts of caches, e.g. directory or tag array
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/10Address translation
    • G06F12/1027Address translation using associative or pseudo-associative address translation means, e.g. translation look-aside buffer [TLB]
    • G06F12/1045Address translation using associative or pseudo-associative address translation means, e.g. translation look-aside buffer [TLB] associated with a data cache
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/14Protection against unauthorised use of memory or access to memory
    • G06F12/1408Protection against unauthorised use of memory or access to memory by using cryptography
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/14Protection against unauthorised use of memory or access to memory
    • G06F12/1416Protection against unauthorised use of memory or access to memory by checking the object accessibility, e.g. type of access defined by the memory independently of subject rights
    • G06F12/1425Protection against unauthorised use of memory or access to memory by checking the object accessibility, e.g. type of access defined by the memory independently of subject rights the protection being physical, e.g. cell, word, block
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/14Protection against unauthorised use of memory or access to memory
    • G06F12/1458Protection against unauthorised use of memory or access to memory by checking the subject access rights
    • G06F12/1491Protection against unauthorised use of memory or access to memory by checking the subject access rights in a hierarchical protection system, e.g. privilege levels, memory rings
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/60Protecting data
    • G06F21/602Providing cryptographic facilities or services
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/60Protecting data
    • G06F21/62Protecting access to data via a platform, e.g. using keys or access control rules
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/70Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer
    • G06F21/71Protecting 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/73Protecting 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 by creating or determining hardware identification, e.g. serial numbers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/70Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer
    • G06F21/78Protecting 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/79Protecting 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0646Horizontal data movement in storage systems, i.e. moving data in between storage devices or systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0673Single storage device
    • G06F3/0679Non-volatile semiconductor memory device, e.g. flash memory, one time programmable memory [OTP]
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/002Countermeasures against attacks on cryptographic mechanisms
    • H04L9/003Countermeasures against attacks on cryptographic mechanisms for power analysis, e.g. differential power analysis [DPA] or simple power analysis [SPA]
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/08Key distribution or management, e.g. generation, sharing or updating, of cryptographic keys or passwords
    • H04L9/088Usage controlling of secret information, e.g. techniques for restricting cryptographic keys to pre-authorized uses, different access levels, validity of crypto-period, different key- or password length, or different strong and weak cryptographic algorithms
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/08Key distribution or management, e.g. generation, sharing or updating, of cryptographic keys or passwords
    • H04L9/0894Escrow, recovery or storing of secret information, e.g. secret key escrow or cryptographic key storage
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2207/00Indexing scheme relating to methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F2207/72Indexing scheme relating to groups G06F7/72 - G06F7/729
    • G06F2207/7219Countermeasures against side channel or fault attacks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1052Security improvement
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/65Details of virtual memory and virtual address translation
    • G06F2212/653Page colouring

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)
  • Computer Hardware Design (AREA)
  • Software Systems (AREA)
  • Signal Processing (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Human Computer Interaction (AREA)
  • Health & Medical Sciences (AREA)
  • Bioethics (AREA)
  • General Health & Medical Sciences (AREA)
  • Mathematical Physics (AREA)
  • Storage Device Security (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

DEFESA CONTRA ANÁLISE ESPECULATIVA DE CANAL LATERAL DE UM SISTEMA DE COMPUTADOR. Trata-se de modalidades de métodos e aparelhos revelados para se defender contra a análise especulativa de canal lateral em um sistema de computador. Em uma modalidade, um processador inclui um decodificador, um cache, conjunto de circuitos de translação de endereço, um controlador de cache e um controlador de memória. O decodificador deve decodificar uma instrução. A instrução deve especificar um primeiro endereço associado a um objeto de dados, sendo que o primeiro endereço tem uma primeira marca de memória. O conjunto de circuitos de translação de endereço deve transladar o primeiro endereço para um segundo endereço, sendo que o segundo endereço deve identificar um local de memória do objeto de dados. O comparador deve comparar a primeira marca de memória e uma segunda marca de memória associada ao segundo endereço. O controlador de cache deve detectar uma falta de cache associada ao local de memória. O controlador de memória, em resposta à detecção pelo comparador de uma combinação entre a primeira marca de memória e a segunda marca de memória e à detecção pelo controlador de cache da falta de cache, deve carregar o objeto de dados a partir do local de memória no cache. Outras modalidades incluem a criptografia de marcas de memória junto com endereços.

Description

“DEFESA CONTRA ANÁLISE ESPECULATIVA DE CANAL LATERAL DE UM SISTEMA DE COMPUTADOR” CAMPO DA INVENÇÃO
[001] O campo da invenção refere-se em geral a computadores e, mais especificamente, à segurança de sistema de computadores.
ANTECEDENTES
[002] Sistemas de computador podem ser vulneráveis a tentativas de adversários de obter informações confidenciais, privadas ou confidenciais secretas. Por exemplo, ataques como Spectre e Meltdown exploram capacidades de execução especulativa e fora de ordem de processadores para ler dados ilicitamente através de análise de canal lateral.
BREVE DESCRIÇÃO DOS DESENHOS
[003] A presente invenção é ilustrada a título de exemplo e sem limitação nas Figuras dos desenhos anexos, nos quais referências semelhantes indicam elementos similares, e nos quais:
[004] A Figura 1A é um diagrama de blocos de um ambiente de computação que reduz a probabilidade de análise de canal lateral bem-sucedida em um processador por fornecer características de segurança baseada em endereço para memória no processador, de acordo com pelo menos uma modalidade descrita na presente invenção;
[005] A Figura 1B é um diagrama de blocos de um processador de acordo com pelo menos uma modalidade;
[006] A Figura 2 é um diagrama de uma implementação de marcas de memória que podem ser usadas para assegurar ponteiros de endereço de memória contra a análise de canal lateral, de acordo com pelo menos uma modalidade;
[007] A Figura 3 é um fluxograma de um método para usar marcas de memória em uma defesa contra a análise de canal lateral, de acordo com pelo menos uma modalidade;
[008] A Figura 4 é um diagrama de blocos ilustrando o uso de marcas de memória em uma defesa contra a análise de canal lateral, de acordo com pelo menos uma modalidade;
[009] A Figura 5 é um diagrama de blocos de um endereço de memória virtual que ilustra que uma marca de identificação (por exemplo, uma marca de cor) que pode ser armazenado em vários locais em um endereço de memória virtual, de acordo com pelo menos uma modalidade;
[010] A Figura 6 é um diagrama de blocos de um processador de acordo com pelo menos uma modalidade;
[011] A Figura 7 é um diagrama de um ambiente de computação, ilustrando uma aplicação da lógica de acesso de memória segura da Figura 6 de acordo com uma modalidade;
[012] A Figura 8A é um fluxograma de pelo menos uma modalidade de um método para iniciar uma operação de alocação de memória durante execução de um programa de computador;
[013] A Figura 8B é um fluxograma de pelo menos uma modalidade de um método para continuar a operação de alocação de memória da Figura 8A;
[014] A Figura 9 é um fluxograma de pelo menos uma modalidade de um método para fornecer segurança para um endereço indireto;
[015] A Figura 10 é um fluxograma de pelo menos uma modalidade de um método para verificar um endereço indireto anteriormente assegurado;
[016] A Figura 11 representa uma modalidade na qual marcas de memória são criptografados com a parte criptografada do endereço;
[017] A Figura 12A é um diagrama de blocos ilustrando tanto um pipeline em ordem exemplificador como um pipeline de execução/emissão fora de ordem, de renomeação de registro exemplificador de acordo com modalidades da invenção;
[018] A Figura 12B é um diagrama de blocos ilustrando tanto uma modalidade exemplificadora de um núcleo de arquitetura em ordem e um núcleo de arquitetura de execução/emissão fora de ordem, de renomeação de registro exemplificador a ser incluído em um processador de acordo com modalidades da invenção;
[019] A Figura 13 é um diagrama de blocos de um núcleo de processador de execução/emissão fora de ordem ilustrativo que pode ser incluído em um processador de acordo com modalidades da invenção;
[020] A Figura 14 é um diagrama de blocos de um processador que pode ter mais de um núcleo, pode ter um controlador de memória integrada e pode ter gráfico integrado de acordo com modalidades da invenção;
[021] A Figura 15 é um diagrama de blocos de um complexo de unidade de processamento central (CPU) ilustrativo que pode ser incluído em um processador de acordo com modalidades da invenção;
[022] A Figura 16 é um diagrama de blocos de uma hierarquia de cache ilustrativa que pode ser incluída em um processador de acordo com modalidades da invenção;
[023] As Figuras 17-21 são diagramas de blocos de arquiteturas de computador exemplificadoras;
[024] A Figura 17 mostra um diagrama de blocos de um sistema de acordo com uma modalidade da presente invenção;
[025] A Figura 18 é um diagrama de blocos de um primeiro sistema exemplificador mais específico de acordo com uma modalidade da presente invenção;
[026] A Figura 19 é um diagrama de blocos de um segundo sistema exemplificador mais específico de acordo com uma modalidade da presente invenção;
[027] A Figura 20 é um diagrama de blocos de um sistema em chip (SoC) de acordo com uma modalidade da presente invenção;
[028] A Figura 21 é um diagrama de blocos de um sistema em chip (SoC) de acordo com uma modalidade da presente invenção;
[029] A Figura 22 é um diagrama de blocos contrastando o uso de um conversor de instrução de software para converter instruções binárias em um conjunto de instruções de fonte para instruções binárias em um conjunto de instruções alvo de acordo com modalidades da invenção.
DESCRIÇÃO DETALHADA
[030] Na descrição que se segue, inúmeros detalhes específicos são expostos. Entretanto, deve ser entendido que modalidades da invenção podem ser postas em prática sem esses detalhes específicos. Em outras ocorrências, circuitos, estruturas e técnicas bem conhecidas não foram mostradas em detalhe para não obscurecer a compreensão da presente descrição.
[031] As referências no relatório descritivo a “uma modalidade”, “uma modalidade”, uma modalidade de exemplo”, etc., indicam que a modalidade descrita pode incluir uma estrutura, aspecto ou característica específica, porém toda modalidade pode não necessariamente incluir a estrutura, aspecto ou característica específica. Além disso, tais frases não estão se referindo necessariamente à mesma modalidade. Adicionalmente, quando um aspecto, estrutura ou característica é descrito com relação a uma modalidade, é proposto que está compreendida no conhecimento de um técnico no assunto para afetar tal aspecto, estrutura ou características com relação a outras modalidades quer descritas explicitamente ou não.
[032] Muitos processadores e núcleos de processador suportam capacidades para aumentar o desempenho, como armazenamento em cache, múltiplas linhas de execução, execução fora de ordem, predição de ramificação e execução especulativa. Os adversários encontraram modos para explorar as capacidades desses processadores lerem ilicitamente os dados.
[033] Por exemplo, um adversário pode tentar intencionalmente ler dados (por exemplo, dados secretos) a partir de um local de memória que não deve ser legível por ele (por exemplo, fora dos limites). A leitura pode ser permitida prosseguir especulativamente até ser determinado se o acesso está fora dos limites. A precisão de arquitetura do sistema pode ser assegurar por não comprometer nenhum resultado até que a determinação seja feita, porém a execução especulativa pode fazer com que o estado de microarquitetura do processador mude antes da determinação ser feita e o adversário poderia ser capaz de executar análise de canal lateral para inferir o valor dos dados secretos a partir de diferenças no estado de microarquitetura do processador. São possíveis muitas variantes desse tipo de ataques especulativos. Em um cenário, o adversário poderia usar, especulativamente, os dados secretos como parte de um endereço de memória e, utilizando uma análise de temporização para determinar quais locais de memória estão sendo carregados em um cache, inferir o valor.
[034] Como exemplo mais específico, com um tamanho de linha de cache de 64 bits, uma alteração em qualquer dos seis bits menos significativos de um endereço de memória não faz com que o endereço se refira a uma linha de cache diferente, porém uma alteração no sétimo bit menos significativo efetivamente faz com que o endereço se refira a uma linha de cache diferente. Portanto, um adversário poderia repetidamente (por exemplo, eliminar ruído e/ou obter um resultado estatisticamente significativo), nivelar e/ou preencher um cache até um estado conhecido ou previsível, usar um fluxo especulativo para fazer com que um processador acesse especulativamente dados secretos, aplicar especulativamente um bit dos dados secretos ao sétimo bit menos significativo de um endereço de memória conhecido armazenado em um registro (por exemplo, utilizando deslocamento e/ou outras instruções de manipulação de bits), acessar especulativamente seu próprio espaço de memória com o endereço de memória manipulada, usar uma análise de canal lateral de temporização para determinar se uma nova linha de cache carregou, e inferir se o valor do bit secreto era igual a ou diferente do valor do sétimo bit menos significativo do endereço de memória conhecido.
[035] As modalidades da invenção incluem sistemas, métodos e aparelhos que fornecem aspectos ou características que podem ser desejáveis para uso em uma variedade de sistemas de computador por uma variedade de motivos, incluindo reduzir vulnerabilidade a ataques com base em análise de canal lateral, de especulação; reduzir vulnerabilidade a tal análise com menor custo, em desempenho ou de outro modo, do que uma abordagem alternativa; e/ou melhorar a segurança em geral. As modalidades fornecem mecanismos para controle de acesso de memória de grão fino, ou combinações dos mesmos, que não podem ser desviados por especulação, porém não evitam o uso de especulação, conservando, assim, os aperfeiçoamentos em desempenho especulativo. Por exemplo, para proteger contra o tipo de análise descrita no parágrafo anterior, as modalidades fornecem tecnologia de marcação de memória e/ou codificação/criptografia de endereço, cada como descrito abaixo, para limitar a eficácia de esforços de adversários em inferir informações sobre dados secretos por tentar usar as mesmas especulativamente, como um endereço de memória ou de outro modo e/ou acessar locais de memória fora dos limites definidos em relação à validade, segurança ou outros propósitos.
[036] As modalidades podem incluir toda e/ou qualquer combinação dos que se seguem (cada como pode ser adicionalmente descrito abaixo): marcação de integridade/identificação de modo que informações de marca em linha estão disponíveis para o processador ou controlador de memória simultâneo com o acesso de dados, de modo que o processador saberá imediatamente se o acesso especulativo à memória é incorreto e deve ser parado ou obscurecido; a criptografia de marcas de memória de modo que a descriptografia apropriada dos dados se baseia no conhecimento do valor apropriado de marca (chave), assim a especulação com uma marca de criptografia incorreto (identificador de chave) somente fornecerá texto de cifra inútil para o adversário de canal lateral e não revelará dados secretos para um endereço dado; ponteiros criptográficos de modo que o ponteiro atribuído (por exemplo, via malloc) disponível para o adversário de canal lateral não pode ser utilizado fora de seus limites sem causar corrupção de endereço, evitando fundamentalmente que o adversário de canal lateral utilize tal ponteiro para direcionar locais de memória conhecidos para análise de canal lateral (tipicamente o processador também pegará um endereço virtual corrompido visto que terminará na memória virtual não alocada resultando em uma falha de página); uma combinação de técnicas de modo que o ponteiro criptográfico inclui as informações de marca (porção de marca do endereço também é criptografada junto com as informações de endereço do local efetivo) de modo que um adversário de canal lateral não possa direcionar memória nem independentemente selecionar informações de marca, modificando, assim, um ou o outro corrompe ambos resultando em caos total a partir da perspectiva de análise de canal lateral; e um contador para contar violações de controle de acesso de memória especulativo de modo que se um adversário persistir com especulação incorreta, o processador pode matar um processo que exceda um limiar especificado e um OS pode acompanhar para reparar.
TECNOLOGIA DE MARCAÇÃO DE MEMÓRIA
[037] As modalidades reveladas incluem conjunto de circuitos de marcação de memória e técnicas para tratar de vulnerabilidades de segurança do sistema de computador potenciais e existentes. O conjunto de circuitos de marcação de memória pode ser configurado para evitar que ponteiros de memória (referências) sejam usados para ir especulativamente além de um limite válido, evitar manipulação de ponteiro de memória (por exemplo, por somar valores) que faz com que os ponteiros acessem um objeto de dados errado (não autorizado)
e aumentar a granularidade de marcação de memória para incluir marcação a nível de byte em um cache. O conjunto de circuitos de marcação de memória também pode ser configurado para código não confiável de caixa de areia por marcação porções (por exemplo, palavras) de memória para indicar quando as porções marcadas da memória incluem um ponteiro protegido. O conjunto de circuitos de marcação de memória fornece aspectos de segurança enquanto habilita processadores a continuarem a usar e se beneficiar da execução de operações especulativas.
[038] A Figura 1A é um diagrama de blocos de um ambiente de computação 100 no qual a probabilidade de análise de canal lateral bem-sucedida pode ser reduzida por fornecer aspectos de segurança baseados em endereço para memória em um processador, compatível com modalidades da presente revelação. O ambiente de computação 100 inclui um sistema 104 que reduz a probabilidade de análise de canal lateral bem-sucedido, enquanto simultaneamente habilita o processador ao executar e se beneficiar da execução de operações especulativas, de acordo com uma modalidade. A Figura 1 mostra um adversário 102 acoplado ao sistema 104 através de uma ou mais redes 106 ou uma ou mais conexões físicas 108. O adversário 102 pode executar uma ou mais análise de canal lateral 110 no sistema 104 através das redes 106 e/ou através das conexões físicas
108. O sistema 104 pode incluir um ou mais de uma variedade de dispositivos de computação, incluindo, porém sem limitação a um computador pessoal, um servidor, um computador do tipo laptop, um computador do tipo tablet, um phablet, um smartphone, uma placa mãe com um conjunto de chips ou algum outro dispositivo de computação. O sistema 104 é configurado para proteger um processador contra a análise de canal lateral utilizando uma variedade de aspectos de segurança baseados em endereço que habilitam o processador a operar seguramente enquanto executa operações especulativas. Em outras palavras, o processador e/ou hardware associado é dotado de acesso simultâneo (significando disponível ao mesmo tempo que o acesso especulativo de dados) para informações adicionais (controle de acesso) que permite ao processador especular de forma segura.
[039] O adversário 102 pode ser um sistema de computador, uma pessoa ou uma combinação do sistema de computador e uma pessoa, que pode tentar uma ou mais análise do canal lateral (por exemplo, Spectre) em ou contra o sistema 104. O adversário 102 pode usar uma ou mais redes 106 para executar a análise de canal lateral 110. O adversário 102 pode usar também uma ou mais conexões físicas 108, como um meio de interposição de memória, sondas de memória ou similares, para ler, modificar e/ou gravar para um ou mais endereços de memória no sistema
104. Um pouco da análise de canal lateral 110 pode incluir tentar o uso de um ponteiro para acessar especulativamente dados além de limites de memória permitidos, tentar manipular um ponteiro (por exemplo, adicionar um valor a um ponteiro para fazer com que o ponteiro aponte para um objeto não pretendido) e similares.
[040] O sistema 104 é configurado para fornecer uma variedade de aspectos de segurança baseados em memória para proteger contra a análise de canal lateral 110. O sistema 104 inclui o processador 112, que é acoplado à memória 114 através de um ou mais canais de comunicação 116. O processador 112 pode incluir núcleos de processador 118, cache 120, conjunto de circuitos de criptografia 122, conjunto de circuitos de verificação de integridade 124 e controlador de memória 170. O processador 112 inclui também o conjunto de circuitos de segurança de ponteiro 126 que é configurado para expandir as capacidades de marca de memória, reduzir ou evitar ataques de anulação de ponteiro, reduzir ou evitar manipulação de ponteiro e habilitar segurança de memória de granularidade de bit para o processador 112.
[041] O processador 112 pode incluir qualquer número e/ou combinação de unidades de processamento de núcleo único ou múltiplos núcleos atualmente disponíveis e/ou desenvolvidas no futuro. Em modalidades, o processador 112 pode representar ou incluir um processador de propósito geral, como um microprocessador Core® i3, i5, i7, 2 Duo e Quad, Xeon®, Itanium®, Atom®, ou Quark®, disponível junto à Intel® (Intel Corporation, Santa Clara, CA). Alternativamente, o processador 112 pode representar ou incluir um ou mais processadores de outro fabricante ou fornecedor, como Advanced Micro Devices (AMD®, Inc.), ARM Holdings® Ltd, MIPS®, etc. O processador 112 pode representar ou incluir um processador de propósito especial, como, por exemplo, um processador de comunicação ou rede, motor de compressão, processador de gráfico, coprocessador, processador incorporado ou similar. O processador 112 pode ser implementado como um pacote ou matriz de semicondutor único ou como uma combinação de matrizes e/ou pacotes de semicondutor empilhados ou de outro modo interconectados. O processador 112 pode fazer parte de e/ou pode ser implementado em um ou mais substratos utilizando qualquer de um número de tecnologias de processo, como, por exemplo, BiCMOS, CMOS ou NMOS.
[042] A memória 114 representa um ou mais de uma variedade de tipos de memória que podem ser usados no sistema 104, de acordo com uma modalidade. A memória 114 pode ser memória volátil, memória não volátil, ou uma combinação de memória volátil e memória não volátil. A memória volátil pode incluir vários tipos de memória de acesso aleatório (RAM). A memória não volátil pode incluir memória NAND, ponto transversal 3D (3DXP), memória de mudança de fase (PCM), unidades de disco rígido etc.
[043] O processador 112 pode usar controlador de memória 170 para mover dados para frente e para trás entre o processador 112 e a memória 114, de acordo com modalidades. Por exemplo, durante operação de um ou mais programas de software ou durante execução de várias instruções, os núcleos de processador 118 podem gerar novos dados 128. Os núcleos de processador 118 pode usar um endereço virtual (ou endereço linear) 130 dos dados novos 128 para gravar os dados novos 128 para o cache 120 ou para a memória 114. Os dados novos 128 podem ser salvos no cache 120 como dados em cache 132, ou podem ser adicionados a dados em cache existentes 132. Os dados em cache 132 podem ter um endereço físico 134. O processador 112 pode ser configurado para usar o conjunto de circuitos de criptografia 122 e um algoritmo de criptografia 136 para criptografar os dados novos 128 e/ou os dados em cache 132 antes de salvar os dados novos 128 e/ou os dados em cache 132 no conjunto de circuitos de memória 114, como dados armazenados 138; entretanto, dados armazenados 138 não precisam ser criptografados e podem incluir dados criptografados, dados não criptografados, ou qualquer combinação de dados criptografados e não criptografados. O processador 112 pode usar também o conjunto de circuitos de verificação de integridade 124 para gerar valores de verificação de integridade 140 com base nos dados novos 128, o endereço virtual 130, os dados em cache 132 e/ou o endereço físico 134. O controlador de memória 170 pode gravar os valores de verificação de integridade na memória 114 (para facilitar detecção de corrupção para os dados armazenados 138) com base em um identificador de chave (ID de chave) pelo processador e/ou o controlador de memória 170 pode criptografar os dados gravados para a memória utilizando uma chave identificada pelo processador (por exemplo, por especificar um identificador de chave no endereço físico).
[044] O processador 112 pode usar o conjunto de circuitos de segurança de ponteiro 126 para fornecer segurança para dados no sistema 104. O conjunto de circuitos de segurança do ponteiro 126 pode ser configurado para detectar quando o endereço virtual 130 e/ou o endereço físico 134 está sendo sobregravado, detectar quando o endereço virtual 130 e/ou o endereço físico 134 foi manipulado, fornecer segurança de memória de granularidade de byte e/ou fornecer o uso de marcas de memória, de acordo com várias modalidades reveladas na presente invenção. As Figuras 2, 4 e 5 ilustram várias configurações de marca de memória de exemplo que podem ser identificadas, definidas e/ou aplicadas pelo conjunto de circuitos de segurança de ponteiro 126 para garantir o sistema 104 contra a análise de canal lateral 110, de acordo com várias modalidades.
[045] Quando os núcleos de processador 118 atribuem (por exemplo, por executar um programa de software) o endereço virtual 130 aos dados novos 128, o conjunto de circuitos de segurança de ponteiro 126 pode definir, inserir ou identificar um ou mais marcas de memória 142A no endereço virtual 130, para associar aos dados novos 128 para reduzir a probabilidade de uma análise de canal lateral bem-sucedida. O um ou mais marcas de memória 142A podem incluir uma marca de identificação 144 e/ou uma marca de criptografia 146. Em algumas modalidades a marca pode ser escolhido pelo software que grava seus dados na memória. Software (por exemplo, uma função de alocador de memória, como malloc) pode selecionar um valor de marca e inserir o mesmo no endereço virtual (linear). O hardware pode interpretar aquele valor de marca ou codificar ou transladar o mesmo e/ou passar o mesmo através para um endereço físico.
[046] O endereço virtual 130 para os dados novos 128 pode incluir a marca de identificação 144 para fornecer controle de acesso para os dados novos 128. A marca de identificação 144 pode ser mencionado como uma cor, uma cor criptográfica, uma cor de memória, uma cor de marca, um ID de chave etc. O conjunto de circuitos de segurança de ponteiro 126 pode ser configurado para definir onde dentro do endereço virtual 130 a marca de identificação 144 reside ou é definido. Por exemplo, o conjunto de circuitos de segurança de ponteiro 126 pode definir a marca de identificação 144 como os oitavos bits mais significativos no endereço virtual 130. A marca de identificação 144 pode ser definido como, por exemplo, bits 56-62 (isto é, sete bits) de bits 0-63 do endereço virtual 130, supondo, como exemplo, que o comprimento do endereço virtual 130 é de 64 bits. Outras modalidades podem usar tamanhos de marca maiores ou menores e/ou tamanhos de endereço virtual maiores ou menores (por exemplo, 128 bits).
[047] O conjunto de circuitos de segurança de ponteiro 126 pode usar a marca de identificação 144 em uma variedade de modos para fornecer segurança para os dados novos 128. Por exemplo, o conjunto de circuitos de segurança de ponteiro 126 pode usar a marca de identificação 144 como uma otimização ou como parte de uma otimização (por exemplo, uma entrada em uma cifra, além dos dados de texto simples, que resulta em dados de texto de cifra diferentes para valores de otimização diferentes) no algoritmo de criptografia 136. Em uma modalidade, a marca de identificação 144 é combinado com um subconjunto do endereço virtual 130 para definir uma otimização que pode ser utilizado pelo algoritmo de criptografia 136 ao criptografar os dados novos 128.
[048] O endereço virtual 130 para os dados novos 128 pode incluir a marca de criptografia 146 para fornecer segurança para os dados novos 128. O conjunto de circuitos de segurança de ponteiro 126 pode ser configurado para definir onde no endereço virtual 130 a marca de criptografia 146 reside ou é definido. Por exemplo, o conjunto de circuitos de segurança de ponteiro 126 pode definir a marca de criptografia 146 como os três bits mais significativos no endereço virtual 130. A marca de criptografia 146 pode ser definido como, por exemplo, bits 59-62 (isto é, quatro bits) de bits 0-63 do endereço virtual 130, supondo, como exemplo, que o comprimento do endereço virtual 130 seja 64 bits. A marca de criptografia 146 pode ser uma representação de um ID de chave 152 que é utilizado para consultar a chave de criptografia 154 em uma tabela de chaves 156, pelo conjunto de circuitos de criptografia 122. A marca de criptografia 146 pode também ou alternativamente ser identificado utilizando outras técnicas, por exemplo, pode ser definido em um ou mais bits no endereço físico 134. Pode ser copiado ou traduzido a partir do endereço virtual e para o endereço físico de modo que o ID de chave possa ser comunicado para o conjunto de circuitos de criptografia de memória. As modalidades podem fornecer para uso do ID de chave para contribuir para defesas contra a análise de canal lateral especulativo porque se uma marca de criptografia de memória errada for utilizada os dados não serão revelados (serão descriptografados em bits aleatórios), assim a especulação com base nesses dados aleatórios não revela nenhum secreto para o adversário sobre a análise de canal lateral.
[049] O conjunto de circuitos de segurança de ponteiro 126 pode incluir também instruções de segurança de ponteiro 158 que pelo menos parcialmente fornecem definições de marca 160. As instruções de segurança de ponteiro 158 podem incluir instruções ou operações que podem ser utilizadas pelo conjunto de circuitos de segurança de ponteiro 126 ou o processador 112 para adicionar um ponteiro de acordo com as definições de marca
160. As definições de marca 160 podem definir um ou mais entre comprimento, localização e uso de um ou mais da marca de identificação 144 e/ou a marca de criptografia 146. Em modalidades, as instruções podem ser utilizadas para definir o valor de marca correspondente em memória e/ou ler os valores de marca a partir da memória e podem ser limitados a uso por software privilegiado (por exemplo, kernel de OS ou VMM).
[050] O conjunto de circuitos de segurança de ponteiro 126 pode usar uma tabela de metadados de ponteiro 162 para armazenar, atualizar e recuperar as marcas de memória 142E e/ou as definições de marca 160.
[051] Quando o processador 112 grava os dados novos 128 para os dados em cache 132 com o endereço físico 134, o conjunto de circuitos de segurança de ponteiro 126 pode definir, inserir ou identificar um ou mais marcas de memória 142B no endereço físico 134, para associar com os dados em cache 132 para reduzir a probabilidade de uma análise de canal lateral bem- sucedida. O um ou mais marcas de memória 142B incorporados no endereço físico 134 podem incluir um ou mais da marca de identificação 144 e/ou a marca de criptografia 146. O endereço físico 134 pode incluir menos ou mais porções ou porções diferentes das marcas de memória 142B do que são utilizadas ou associadas ao endereço virtual 130.
[052] Para fins de prevenção de ataque de especulação, uma vez que é a função de software fazer a memória gravar que
“possui” os ados sendo gravados, a gravação pode atribuir a marca de identificação associado (por exemplo, um gravar para propriedade, ou meus dados-minha marca), a atribuição de marca começa com um fluxo de software como aplicado ao endereço virtual (linear) correspondente utilizado para gravar os dados. O hardware é responsável por executar o controle de acesso de memória de leitura com base no valor de marca. No cenário de marca de identificação, o hardware está comparando um valor de marca que foi originalmente gravado com os dados com um valor de marca no endereço de uma solicitação de acesso de memória (uma carga de memória). Se as marcas combinarem, então o acesso de memória pode prosseguir (o solicitante sabia o valor de marca de identificação correto a usar). Similarmente, para a marca de criptografia, o solicitante sabe a chave correta a usar (a chave que foi utilizada para criptografar na gravação dos dados para a memória).
[053] A Figura 1B é um diagrama de blocos do processador 112 da Figura 1A, mostrando núcleos de processador 118, cache 120, tabela de metadados de ponteiro 162, e uma representação mais detalhada do controlador de memória 170, de acordo com uma modalidade. O conjunto de circuitos de consulta de marca 172 pode ser para consultar uma marca de memória associada a um endereço físico, de acordo com modalidades como o método 300 da Figura 3. O conjunto de circuitos de comparação de marca 174 pode comparar uma marca de memória associada a um endereço físico 130 com uma marca de memória associada a um endereço virtual 130, de acordo com modalidades como métodos 300 da Figura 3. O conjunto de circuitos de controle de memória 178 pode representar qualquer outro conjunto de circuitos para executar operações de controle de memória de acordo com qualquer abordagem.
[054] A Figura 2 ilustra um diagrama de translação do endereço de memória 200 de uma implementação de marcas de memória que podem ser usados para garantir ponteiros de endereço de memória contra a análise de canal lateral, de acordo com uma modalidade. O diagrama de translação de endereço de memória 200 ilustra um endereço virtual estendido (ou endereço linear) 202 incluindo uma marca de identificação 204, que ocupa um ou mais bits (por exemplo, bits não canônicos), e um endereço virtual 206, que ocupa um subconjunto do endereço virtual estendido 202. O endereço virtual estendido 202 pode ser de 64 bits. A marca de identificação 204 pode ocupar um ou mais bits mais significativos, ou outros bits no endereço virtual estendido 202. O endereço virtual 206 é traduzido em um endereço físico 208 através de um armazenamento temporário paralelo à translação (TLB) 210, como ilustrado, ou através da travessia de páginas de tabelas. A marca de identificação 204 é apenso ao endereço físico 208. O endereço físico 208 e a marca de identificação 204 podem ser combinados para formar ou definir uma otimização de criptografia 212 que pode ser aplicado a um algoritmo de criptografia como descrito abaixo. Uma marca de criptografia 214 pode ser anexado à marca de identificação 204 e o endereço físico 208 para identificar uma ou mais chaves de criptografia através da tabela de chaves 156 (mostrada na Figura 1). A marca de identificação 204, o endereço físico 208, e a marca de criptografia 214 podem ser combinados para definir um endereço físico de linha de cache
216. Posições de bit e/ou tamanhos de marca podem variar de modalidade para modalidade. Quanto maior o tamanho da marca, mais valores de marca possíveis e mais difícil é para um adversário adivinhar.
[055] Em modalidades, a arquitetura de marca de memória ilustrada no diagrama de translação de endereço de memória 200 pode empregar tamanhos diferentes de marca de identificação 204 e/ou marca de criptografia 214 para ajustar a dificuldade de adivinhar qual marca de memória (por exemplo, marca de identificação 204 e/ou marca de criptografia 214) está associado a um ponteiro de endereço de memória específico e/ou um objeto específico.
[056] Marcação de memória funciona similarmente à criptografia de memória total de múltiplas chaves (MKTME), onde bits de endereço físico (ou outros metadados em cache) contêm bits de marca (por exemplo, o Identificador de chave ID de chave ou Domínio de chave). Software (por exemplo, uma biblioteca de alocador de memória como malloc em glibc) escolhe marcas e pode selecionar os bits de marca em um espaço de endereço linear por definir bits não canônicos para o valor de marca. Hardware pode desviar estruturas de paging para essas traduções, permitindo que o endereço linear defina diretamente bits de marca no endereço físico. As modalidades podem incluir verificação de metadados de marca entre memória externa e os caches de processador em uma operação de carga, fornecendo um mecanismo de defesa de canal lateral visto que marcas podem ser verificadas e validades antes do conteúdo de cache ser afetado. Operações de marcação descritas na presente invenção podem ser executadas por hardware mencionado como um “controlador de memória” ou “controlador de marca de memória”, que se refere mais geralmente ao hardware de subsistema do controlador de memória, potencialmente localizado em uma variedade de locais de um subsistema de memória para tratar de marcação de dados de linha de cache de acordo com modalidades.
[057] A Figura 3 mostra um fluxograma de um método 300 para executar uma operação de carga de acordo com uma modalidade da presente invenção. O método 300, em uma modalidade, pode ser executado por um controlador de memória ou outro conjunto de circuitos de execução de memória. Como tal, o método 300 pode ser executado por conjunto de circuitos de hardware, firmware, software e/ou combinações dos mesmos.
[058] Como ilustrado, o método 300 começa com o recebimento de uma solicitação de carga incluindo informações de marca para uma linha de dados em memória (bloco 310). Essa solicitação de carga pode ser uma solicitação de qualquer componente dado para ler pelo menos uma partição de dados a partir de uma linha de dados. Em modalidades, essa solicitação de dados pode incluir um identificador de marca incluído em uma porção não canônica de um endereço da solicitação de carga. Em resposta a essa solicitação de carga, o controlador de memória envia a solicitação de carga para a memória (bloco 320). Para essa operação de carga, o controlador de memória pode receber as marcas incluídos em metadados associados à linha de memória junto com os dados para o endereço solicitado a partir da memória (bloco 330). O controlador de memória (por exemplo, pelo conjunto de circuitos de comparação de marca 174 no controlador de memória 170) pode determinar se um ou mais marcas das informações de marca combina com uma marca do endereço da solicitação de memória (losango 340). Em caso positivo, uma ou mais porções, por exemplo, partições de dados, podem ser armazenadas em uma linha de cache, junto com o armazenamento do próprio identificador de marca, por exemplo, em metadados da linha de cache.
[059] Se uma marca combinado não for encontrado em uma carga, o controle passa para o bloco 360 onde o controlador de memória pode, em uma modalidade, evitar carregamento de uma linha de cache, ou em uma outra modalidade, carregar a linha de cache, porém com dados de lixo ou aleatórios (isto é, não indicativos dos dados armazenados no endereço físico correspondente em memória), que pode fornecer, por não revelar se houve uma combinação de marca de identificação, uma defesa contra um adversário tentando adivinhar os valores de marca de identificação.
[060] Com referência agora à Figura 4, é mostrada uma disposição de alto nível de um sistema 400 incluindo um processador (CPU) 410 e uma memória associada (DRAM) 460. Como ilustrado, suponha que uma solicitação de leitura ou carga seja gerada. O software pode solicitar que dados sejam lidos utilizando um endereço linear de 64 bits 420 que, como mostrado, inclui várias porções incluindo uma porção menos significativa 422 (por exemplo, 6 bits para identificar um byte em uma linha de cache), outra porção 424 para identificar uma linha de cache, uma porção de endereço linear 425 para identificar uma localização de página e um indicador de objeto pequeno 426, por exemplo, um bit de objeto pequeno, que quando definido identifica que a solicitação é para uma largura menor que uma linha de cache. Por exemplo, esse bit de endereço de objeto pequeno pode ser definido pelas entradas de tabela de página correspondendo a páginas que fazem partes de uma região de objeto pequeno de um monte. Como adicionalmente ilustrado, uma porção não canônica do endereço pode incluir uma marca 428 como descrito na presente invenção. Observe que a porção de endereço linear 425 pode ser utilizada para executar uma consulta na tabela de página e estruturas de armazenamento em cache TLB 430 para obter um endereço físico de memória 442. Suponha que esse endereço físico corresponde à linha de memória 466 também mostrada na Figura 4, que inclui quatro partições 16B (partição 0 - partição 3) cada tendo uma marca correspondente 4680-3 armazenado em ECC (ou uma tabela em) memória 468.
[061] Quando cada uma dessas marcas armazenadas é de um valor de identificador de marca diferente, isso significa que cada partição é associada a uma marca diferente e desse modo como adicionalmente ilustrado na Figura 4, quando carregado e armazenado em um cache 445, cada partição pode ser armazenada em uma linha de cache diferente (por exemplo, em um lado à direita da linha de cache como mostrado), com seu identificador de marca correspondente 448 no endereço PA para a linha de cache. Desse modo, como ilustrado na Figura 4, com identificadores de marca 4680-4683 cada incluindo um valor diferente (a saber, valores 1-4), cada partição de dados correspondente na linha de memória 466 pode ser armazenada em uma linha de cache diferente 446, cada armazenada em associação seu identificador de marca correspondente em um endereço ou porção de metadados de cache 445 associado à linha de cache.
[062] Como adicionalmente ilustrado, são mostradas operações de controlador de memória a serem executadas em uma carga. Evidentemente, em outros casos, essa funcionalidade (controlador de marca de memória) pode ser executada entre qualquer das camadas de armazenamento em cache, por exemplo, entre o cache L2 e LLC, ou entre o cache L1 e L2, e assim por diante. Como visto, o controlador de memória 450 pode determinar se a marca do endereço combina com quaisquer das marcas identificadas nas informações de marca obtidas a partir da memória (losango 452). Em caso positivo, pode ser determinado também se o indicador de objeto de endereço pequeno é definido (losango 456). Se for, o controlador de memória 450 pode fazer com que a partição de dados associada à marca combinado seja armazenada em uma linha de cache dada alinhada ao lado à direita, como ilustrado. O deslocamento de dados em uma linha de cache com detecção fora de limites pode ocorrer quando o byte seguinte a ser lido ou gravado vai além da extremidade da linha de cache. E observe que dados podem ser alinhados/deslocados para o início ou final da linha de cache dependendo de se for desejado captar um erro de leitura subfluxo ou de leitura de transbordamento. Dependendo dos casos de uso, partições de dados podem ser deslocadas para uma extremidade ou para a outra. Por exemplo, para um uso de pilha, deslocamentos podem ser para o lado mais significativo. Se houver um transbordamento por empurrar todos os dados para a extremidade da linha de cache, um transbordamento de armazenamento temporário pode ser detectado em uma granularidade de byte porque mais um byte anda além da extremidade do armazenamento temporário e outra linha de cache é lida. Quando essa leitura de linha de cache adjacente subsequente ocorre, é fornecido para o controlador de memória para a linha de cache adjacente que determina que a marca não combina com o último, detectando, assim, a adulteração. Qual direção os deslocamentos ocorrem para uma linha de cache específica pode ser configurada como parte da configuração de marca armazenada em (por exemplo, ECC) memória ou, alternativamente, pode ser indicado por outro bit de endereço similar ao bit indicador de objeto pequeno indicando a direção esperada das operações de deslocamento.
[063] Se não houver combinação entre a marca do endereço e quaisquer dos identificadores de marca recebidos a partir da memória em uma carga de memória, o controlador de memória 450 pode, em uma modalidade, evitar carregamento de uma linha de cache, ou em uma outra modalidade, carregar a linha de cache, porém com dados de lixo ou aleatórios (isto é, não indicativos dos dados armazenados no endereço físico correspondente em memória), que pode fornecer, por não revelar se houve uma combinação de marca de identificação, uma defesa contra um adversário que tenta adivinhar os valores de marca de identificação.
[064] A Figura 5 ilustra um diagrama de blocos 500 de um endereço de memória virtual estendido 502 que ilustra que uma marca de identificação 504 (por exemplo, uma marca de cor) pode ser armazenado em vários locais no endereço de memória virtual. A marca de identificação 504 pode ocupar um ou mais bits no endereço de memória virtual 502 de tal modo que o endereço de memória virtual 502 inclua um ou mais bits acima da marca de identificação 504 e um ou mais bits entre a marca de identificação e a porção do endereço de memória virtual que é traduzida no endereço físico (por exemplo, através de um armazenamento temporário paralelo à translação).
CODIFICAÇÃO/CRIPTOGRAFIA DE ENDEREÇO
[065] Retornando à Figura 1A, o processador 112 pode ser configurado para criptografar e descriptografar endereços virtuais/lineares (por exemplo, endereço virtual 130), qualquer porção dos mesmos, quaisquer outros endereços (direto ou indireto) e/ou quaisquer porções dos mesmos, também ou ao invés de criptografar e descriptografar novos dados 128, dados em cache 132 e/ou dados armazenados 138, utilizando conjunto de circuitos de criptografia 122, por exemplo.
[066] A Figura 6 é um diagrama de blocos de outra representação do processador 112 da Figura 1A e Figura 1B, mostrando núcleos de processador 118, cache 120 e conjunto de circuitos de acesso de memória seguro 600, de acordo com uma modalidade na qual endereços virtuais podem ser criptografados. O conjunto de circuitos de acesos de memória seguro 600 pode usar ou incluir conjunto de circuitos de criptografia como representado pelo conjunto de circuitos de criptografia 122, como mostrado na Figura 1A, ou pode usar ou incluir outro conjunto de circuitos de criptografia, porém é mostrado por conveniência, como incluindo conjunto de circuitos de criptografia 658 e conjunto de circuitos de descriptografia 654.
[067] Em uma modalidade, o conjunto de circuitos de acesso de memória seguro 600 utiliza metadados sobre um endereço (por exemplo, endereço virtual 130), que é codificado em bits de marca de memória (por exemplo, marcas de memória 142A) ou outros bits em ou associado ao endereço (por exemplo, bits não canônicos de um endereço de 64 bits ou uma gama de endereços separados, por exemplo, pelo sistema operacional, de modo que os bits de ordem alta correspondentes da gama de endereços podem ser usados para armazenar os metadados), para assegurar e/ou fornecer controle de acesso a locais de memória apontados pelo endereço. Por exemplo, a codificação e decodificação de metadados fornecida pelo conjunto de circuitos de acesso de memória segura 600 pode evitar que o endereço seja manipulado para causar um transbordamento de armazenamento temporário e/ou pode evitar que o código de programa acesse a memória que não tem permissão para acessar.
[068] Em uma modalidade, o conjunto de circuitos de acesso de memória segura 600 inclui o conjunto de circuitos de codificação de endereço 652, que pode ser invocado quando a memória é alocada (por exemplo, por um sistema operacional, no monte) e fornecido para executar programas em qualquer de diversos modos diferentes, incluindo usar uma função como malloc, alloc ou nova; ou implicitamente através do carregador, ou alocar estaticamente a memória pelo compilador etc. Como resultado, o endereço codificado, que aponta para a memória alocada, é codificado com os metadados de endereço.
[069] Os metadados de endereço podem incluir metadados de faixa válida. Os metadados de faixa válida podem permitir a execução de programas para manipular o valor do endereço compreendido em uma faixa válida (por exemplo, por executar aritmética de ponteiro na porção de texto simples do ponteiro), porém pode corromper o endereço se a memória for acessada utilizando o endereço além da faixa válida (por exemplo, por afetar a porção de texto de cifra do ponteiro ou outros bits do ponteiro que são usados como parte da entrada de otimização para a cifra). Alternativamente ou além disso, os metadados de faixa válida podem ser usados para identificar uma faixa de código válida, por exemplo, uma faixa de memória que o código de programa é permitido acessar (por exemplo, as informações de faixa codificada podem ser utilizadas para definir faixas explícitas em registros). Outras informações que podem ser codificadas no metadados de endereço incluem restrições de acesso no endereço (por exemplo, se o endereço pode ser utilizado para gravar, executar ou apenas ler a memória referenciada).
[070] Em uma modalidade, o conjunto de circuitos de acesso de memória segura 600 inclui o conjunto de circuitos de decodificação de endereço 662, que pode ser invocado para verificar os metadados codificados em operações de leitura e gravação de memória que utilizam instruções de processador como MOV, onde um registro de propósito geral é utilizado como um endereço de memória para ler um valor a partir da memória ou gravar um valor para a memória (por exemplo, carregar/armazenar), bem como em outras operações que envolvem o “uso” de memória (como instruções de transferência de controle, por exemplo, CALL/JMP etc.) e/ou qualquer instrução que possa assumir um operando de memória. O endereço de memória indireto (por exemplo, virtual/linear codificado) utilizado para o acesso de memória é primeiramente decodificado e/ou descriptografado pelo processador para obter o endereço de memória virtual/linear correto.
[071] Em uma modalidade, em (ou durante) uma operação de alocação de memória (por exemplo, uma “malloc”), o conjunto de circuitos de alocação de memória (por exemplo, código de gerenciamento de memória em um componente de sistema privilegiado na memória de sistema) pode alocar uma faixa de memória para um armazenamento temporário e retornar um endereço e os metadados correspondentes (por exemplo, metadados de faixa e/ou permissão). Por exemplo, o conjunto de circuitos de alocação de memória pode codificar informações de faixa de texto simples no endereço (por exemplo, nos bits não usados/não canônicos, antes da criptografia), ou fornecer os metadados como um ou mais parâmetros separados para a instrução, onde o parâmetro (ou parâmetros) especifica as informações de permissão de faixa e/ou código. Desse modo, de acordo com uma modalidade, o conjunto de circuitos de alocação de memória pode invocar o conjunto de circuitos de codificação de endereço
652. O conjunto de circuitos de codificação de endereço 652 inclui conjunto de circuitos de regra de faixa 654 e conjunto de circuitos de ajuste de endereço 656, que codificam o endereço com os metadados (por exemplo, metadados de faixa e/ou permissão) e um “ajuste”, como descrito abaixo. O conjunto de circuitos de codificação de endereço 652 pode armazenar os metadados em uma porção não utilizada do endereço (por exemplo, bits não canônicos de um endereço de 64 bits).
[072] Para determinar metadados de faixa válida, o conjunto de circuitos de regra de faixa 654 pode selecionar os metadados de faixa válida para indicar um limite superior para o tamanho do armazenamento temporário referenciado pelo endereço. O conjunto de circuitos de ajuste de endereço 656 pode ajustar os metadados de faixa válida conforme necessário de modo que os bits de endereço superior (por exemplo, bits mais significativos) dos endereços na faixa de endereço não mudam desde que o endereço se refira a um local de memória que está dentro da faixa válida indicada pelos metadados de faixa, que pode habilitar o endereço a ser manipulado (por exemplo, por software executando operações aritméticas etc.), porém apenas desde que as manipulações não façam com que o endereço saia da faixa válida (por exemplo, transbordamento do armazenamento temporário). Em outras palavras, o processador tomará o valor de ajuste e adicionará o mesmo ao valor de endereço (ponteiro) e, desde que essa operação não afete o texto de cifra (ou bits usados como parte da otimização) do endereço, o acesso de memória é permitido. Em modalidades, o próprio valor de ajuste pode ser criptografado como parte do endereço codificado para evitar que um adversário especulativo controle o valor de ajuste de um endereço.
[073] O conjunto de circuitos de codificação de endereço 652 pode usar os metadados de faixa válida para selecionar uma porção do endereço a ser criptografada. O conjunto de circuitos de criptografia 658 pode criptografar a porção selecionada do endereço (e o ajuste e/ou uma marca de identificação, em algumas modalidades), utilizando uma chave secreta (por exemplo, chave 154 na Figura 1A) e uma otimização, como descrito adicionalmente abaixo. Em uma operação de acesso de memória (por exemplo, uma operação de leitura, gravação ou execução), o conjunto de circuitos de decodificação de endereço 662 pode decodificar o endereço anteriormente codificado. Para fazer isso, o conjunto de circuitos de descriptografia 664 pode descriptografar a porção criptografada do endereço (e em algumas modalidades, a marca de ajuste criptografado e/ou identificação criptografada) utilizando a chave secreta e a otimização, como descrito adicionalmente abaixo.
[074] O conjunto de circuitos de recuperação de endereço 666 pode retornar o endereço a sua forma original (por exemplo, canônica) para recuperar o valor original do endereço (por exemplo, o endereço de memória linear original, verdadeiro). Para fazer isso, o conjunto de circuitos de recuperação de endereço 666 pode remover os metadados de faixa válida codificados nos bits não usados do endereço (por exemplo, retornar os bits não usados a sua forma original). Se o endereço decodificar com sucesso, a operação de acesso de memória é concluída com sucesso. Entretanto, se o endereço codificado foi manipulado (por exemplo, por software) de modo que seu valor fique fora da faixa válida indicada pelos metadados de faixa (por exemplo, transbordamentos o armazenamento temporário), o endereço será corrompido como resultado do processo de descriptografia executado pelo conjunto de circuitos de descriptografia 664. Um endereço indireto corrompido originará uma falha (por exemplo, uma falha de proteção geral). Desse modo, um conjunto de circuitos de acesso de memória segura 650 habilita o processador a fornecer controle de acesso e segurança de endereço contra ataques de transbordamento de armazenamento temporário e explorações similares.
[075] Com referência agora à Figura 7, em algumas modalidades, um sistema de computador pode estabelecer um ambiente de computação 710 durante operação (por exemplo, tempo de operação nativo e/ou virtual ou ambientes de “execução”). Os vários módulos mostrados no ambiente 710 podem ser incorporados como hardware, firmware, software ou uma combinação dos mesmos. No ambiente 710, a aplicação de espaço de usuário 734 (ou o componente de sistema privilegiado 742,
por exemplo, no carregamento de uma aplicação de espaço de usuário 734) pode, periodicamente, durante a operação do sistema de computador, emitir uma alocação de memória 702. A alocação de memória 702 pode ser traduzida (por exemplo, compilada ou interpretada), conforme necessário, pelo conjunto de circuitos de alocação de memória 746 do componente de sistema privilegiado 742 antes de ser passado para o processador (por exemplo, processador 112). No processador, o conjunto de circuitos de codificação de endereço 652 é invocado em resposta à alocação de memória 702 (por exemplo, no lugar de uma instrução “malloc” convencional). Embora uma instrução malloc convencional simplesmente aloque memória e retorne um ponteiro (não assegurado), o conjunto de circuitos de codificação de endereço 652 codifica o endereço 704, incluindo metadados 705 (por exemplo, as informações de faixa e/ou permissão, quer já codificado em texto simples no endereço -- sem criptografia ainda assim aplicado pelo processador -- ou como um parâmetro separado para a instrução especificando a faixa), como descrito na presente invenção, e retorna um endereço codificado 706.
[076] Similarmente, a aplicação de espaço de usuário 734 ou o componente de sistema privilegiado 742 pode emitir um acesso de memória 708 periodicamente, que pode ser tratado pelo processador como uma instrução de processador que lê a partir da memória e grava para um registro ou lê a partir de um registro e grava para a memória (por exemplo, uma instrução MOV). Utilizando a instrução MOV como exemplo, o conjunto de circuitos de movimento seguro 660 executa o acesso de memória somente após invocar com sucesso o conjunto de circuitos de decodificação de endereço 662. Embora o conjunto de circuitos de movimento seguro 660 e o conjunto de circuitos de decodificação de endereço 662 sejam mostrados como módulos separados na Figura 6 e na Figura 7, deve ser entendido que o conjunto de circuitos de decodificação de endereço 662 pode ser incorporado no conjunto de circuitos de movimento seguro 660 ou pode ser implementado separadamente. Além disso, deve ser entendido que o conjunto de circuitos de decodificação de endereço 662 pode ser incorporado em ou referenciado por outros tipos de instruções, alternativamente ou além das instruções MOV (por exemplo, chamada, JMP etc.). Por exemplo, as instruções de transferência de controle como chamada e JMP podem carregar o endereço codificado para o código a executar no registro de contador de programa do processador (por exemplo, ponteiro de instrução ou o RIP, onde o RIP é o registro de ponteiro de instrução utilizando instrução relativa a endereçamento no código de 64 bits). O registro de ponteiro de instrução pode ser então consultado por um programa e como resultado, o endereço de contador de programa atual será a forma codificada (deslocada para o local de contador de programa atual).
[077] Se o conjunto de circuitos de decodificação de endereço 662 decodificar com sucesso o endereço codificado 706, o endereço original 704 é retornado ao componente de sistema privilegiado 742 e o acesso de memória é concluído (716), ou a execução do programa começa no local de contador de programa novo (no caso de alterações de fluxo de controle). Se o endereço codificado 706 não decodificar com sucesso, é originada uma falha (718).
[078] Com referência agora às Figuras 8A e 8B, os exemplos de métodos 802 e 820 para executar um processo de alocação de memória, são mostrados. Porções dos métodos 802 e 820 podem ser executadas por hardware, firmware e/ou software de um sistema de computador (por exemplo, pelo componente de sistema privilegiado 742 executando o conjunto de circuitos de alocação de memória 746). Na Figura 8A, o método 802 começa em resposta a uma chamada para alocação de memória a partir do código de chamada (por exemplo, o componente de sistema privilegiado 742 ou a aplicação de espaço de usuário 734). No bloco 810, o sistema de computador determina se o código de chamada está autorizado a alocar memória. Para fazer isso, o sistema de computador pode usar um conjunto de registros de processador para registrar os locais de ramificação de código feitos recentemente, por exemplo, o último registro de ramificação (LBR). Por exemplo, para determinar o código de chamada (por exemplo, o código que chamou uma função), a função pode consultar o LBR para ver o histórico de ramificação. Alternativamente, a função pode consultar a pilha de chamada para o endereço de retorno (porém o endereço de retorno na pilha não pode ser tão seguro quanto dados armazenados em registros de processador). Se o sistema de computador determinar que o código de chamada não está autorizado a alocar memória, uma falha é originada no bloco 812. Se o sistema de computador determinar que o código de chamada está autorizado a alocar memória, o sistema de computador prossegue para o bloco 814 e inicia alocação segura de memória utilizando as técnicas reveladas na presente invenção. Por conseguinte, o sistema de computador prossegue do bloco 814 para o início do método 900, mostrado na Figura 9 e descrito abaixo.
[079] Na Figura 8B, o método 820 começa em resposta à saída de um endereço codificado no bloco 924 do método 900. No bloco 822, o sistema de computador retorna a versão codificada do endereço (por exemplo, o endereço codificado 706) para o código de chamada que iniciou a alocação de memória no bloco 814 da Figura 8A. No bloco 824, o código de chamada utiliza o endereço codificado para acessar a memória alocada (por exemplo,
armazenamento temporário). Ao fazer isso, o código de chamada pode alterar ou modificar o endereço codificado por exemplo, por executar operações aritméticas no endereço codificado. Desse modo, uma operação de leitura ou gravação subsequente do código de chamada pode desencadear a execução do método da Figura 10, descrita abaixo.
[080] Com referência agora à Figura 9, é mostrado um exemplo de um método 900 para assegurar um endereço. Porções do método 900 podem ser executadas por hardware, firmware e/ou software do sistema de computador (por exemplo, pelo processador 112 invocando o conjunto de circuitos de codificação de endereço 652). O método 900 começa em resposta a uma alocação de memória (por exemplo, por um módulo de gerenciador de memória no bloco 814 da Figura 8A). No bloco 910, o sistema de computador obtém o endereço, faixa de endereço e outras entradas necessárias para codificar o endereço (por exemplo, um identificador de bloco de código ou ponteiro de instrução, como descrito abaixo). No bloco 912, o sistema de computador determina se o código de chamada (por exemplo, o código que inicia a alocação de memória no bloco 810 da Figura 8A) está autorizado a acessar o endereço indireto recebido no bloco 910 (por exemplo, endereço 704). Para fazer isso, o sistema de computador pode executar uma verificação de controle de acesso por verificar o ponteiro de instrução ou informações de nível de privilégio de chamador para o código de chamada, que podem ser obtidos de, por exemplo, um gerenciador de monte de um módulo de gerenciador de memória. Se o sistema de computador determinar que o código de chamada não está autorizado a acessar o endereço, uma falha é originada (914). Se o sistema de computador determinar que o código de chamada está autorizado a acessar o endereço, o sistema de computador prossegue para o bloco 916. No bloco 916, o sistema de computador determina os bits de endereço não usados (por exemplo, não canônicos) do endereço para executar a codificação de faixa de endereço. Para fazer isso, o sistema de computador pode simplesmente usar os bits não usados/não canônicos superiores (por exemplo, mais significativos) do endereço. Deve ser observado que os endereços codificados não precisam ser não canônicos de modo arquitetural. Ao invés, os endereços não usados/não canônicos podem ser simplesmente uma faixa de memória separada, por exemplo, pelo componente de sistema privilegiado 742, para habilitar a codificação de endereço como revelado na presente invenção.
[081] No bloco 918, o sistema de computador cria os metadados (por exemplo, dados de faixa válida e/ou permissão) e armazena os metadados nos bits não usados/não canônicos do endereço selecionado no bloco 916. De modo ilustrativo, os metadados indicam um limite superior no tamanho do armazenamento temporário indicado pelo endereço. Para criar os metadados, o sistema de computador converter os valores de endereço em um local central no qual os bits de endereço canônico mais significativos não mudam para a faixa de memória válida. Em algumas modalidades, os metadados de faixa incluem um “exponente” para determinar a potência de 2 do tamanho de faixa de memória. Em alguns casos, um “ajuste” é utilizado para forçar valores para o final da faixa de potência de 2 como descrito abaixo. Em outras modalidades, o ajuste pode ser utilizado para forçar o armazenamento temporário para o início da faixa de potência de 2 quando o “subfluxo” de armazenamento temporário precisa ser endereçado (ao contrário do “transbordamento” de armazenamento temporário). Utilizando os metadados de exponente, qualquer faixa de memória de potência de 2 pode ser definida (por exemplo, 2, 4, 8, 16... 2^64).
[082] O que se segue é um exemplo simples de codificação de metadados de faixa. Os endereços 0000b - 0011b se encaixam na faixa 0-3 onde os dois bits superiores não mudam. Entretanto, se um ponteiro for modificado para ir para o índice 4, um dos bits superiores mudará. Por conseguinte, os metadados de faixa válida podem ser codificados como [2] (para os dois bits superiores para codificar uma faixa de 4) e os metadados de faixa válida podem ser armazenados nos bits não canônicos superiores, por exemplo, “[2] 00xxb”. Nesse exemplo, o exponente seria 2 bits em tamanho (por exemplo, valores [1- 4]), para cobrir os endereços de 4 bits usados no exemplo. A Tabela 1 abaixo ilustra um número de exemplos simplificados, adicionais.
Faixa de Endereço Tamanho Comentários endereço real codificado Ajustar +3 para adaptar 1001b-1100b 4 bytes [2] {3} 11xx todos em 11xxb Ajustar +1 ao fim de 1001b-1101b 5 bytes [3] {1} 1xxx faixa Adapta-se na potência 1110b-1111b 2 bytes [1] {0) 111x mais baixa de 2 Ajustar +1 para adaptar 1101b-1110b 2 bytes [1] {1} 111x todos em 111xb 16 0000b-1111b [4] {0} xxxx Faixa total bytes 1010b-1010b 1 byte [0] {0} 1010 Combinação exata Ajustar +2 ao fim de 1011b-1101b 3 bytes [2] {2} 11xx faixa TABELA 1 EXEMPLOS DE CODIFICAÇÃO DE ENDEREÇO.
[083] Na Tabela 1, o endereço codificado é representado utilizando um formato que é similar a um formato de ponto flutuante. Nos endereços codificados na terceira coluna da Tabela 1, o número em parênteses, por exemplo, [2], é o exponente ou metadados de faixa válida; o número em colchetes, por exemplo, {3}, é o valor de ajuste, e o endereço à direita do valor de ajuste indica os bits não usados/não canônicos nos quais os metadados de faixa válida e valor de ajuste são armazenados.
No bloco 920, o sistema de computador determina o ajuste (ou “deslocamento”) a ser aplicado à faixa válida e armazena o valor de ajuste nos bits não usados/não canônicos do endereço indireto.
Em algumas modalidades, o ajuste é utilizado para forçar a faixa codificada para o final de um limite de potência de 2 (por exemplo, para definir um limite superior específico no tamanho de armazenamento temporário). Desse modo, uma versão codificada da faixa de endereço válida original (não codificado) pode ser criada.
A versão codificada pode ser projetada de modo que o número mínimo de bits superiores mudará na faixa válida (por exemplo, de modo que a criptografia dos bits superiores detecte/amplifique modificações no endereço codificado na descriptografia). A codificação é reversível, de modo que a faixa de endereço válida pretendida original é retornada desde que seja modificada compreendida na faixa.
No exemplo acima, a faixa 0-3 decimal (0000b-0011b binário) pode ser codificada como [2] {0} 00xxb (onde “xx” significa que aqueles bits podem assumir qualquer valor para a faixa: 00, 01, 10, 11). Em outro exemplo, a faixa 1-4 decimal (0001b-0100b) pode ser codificada como [2] {-1} 00xxb (onde o ajuste é subtraído para manter os bits superiores constantes). Alternativamente, a mesma faixa 1-4 decimal (0001b-0100b), pode ser codificada como [2] {3} 01xxb (dessa vez adicionando um ajuste de 3 para manter os bits superiores constantes). Com qualquer representação, a versão codificada decodifica de volta para a faixa de endereço original 1-4. Ainda em outro exemplo, se o tamanho de armazenamento temporário for de 4 KB, um valor de ajuste de 10 bits com uma resolução de 4 bytes pode ser utilizado.
[084] Outras modalidades podem usar um valor de ajuste sinalizado (por exemplo, complemento de 2) onde o armazenamento temporário pode ser ajustado ao início ou fim do limite de potência de 2 dependendo do sinal (+/-) do ajuste.
Tais modalidades podem fornecer proteção de situações de transbordamento ou subfluxo de armazenamento temporário dependendo do sinal de ajuste.
Em casos em que 16 bits estão disponíveis em endereços não usados/não canônicos (por exemplo, em processadores de 64 bits atuais), 10 dos bits disponíveis podem ser usados para o ajuste e os 6 bits restantes podem ser usados para os metadados de faixa válida (por exemplo, valor de exponente/potência de 2). Se o valor de exponente atingir uma faixa além de uma página de 4 KB, o ajuste pode expandir por um multiplicador de 2 para permitir ajustes de armazenamento temporários grandes em potência ainda maior de 2 faixas (observando que em algumas modalidades, 4096 bytes são totalmente cobertos com um valor de ajuste de 10 bits permitindo que o ajuste “ajuste” um armazenamento temporário para terminar com a última palavra de 4 bytes em uma página de 4 KB antes da mudança dos bits superiores (potência de 2)). Tal ajuste (por exemplo, incrementado por 1) ajustará o local de armazenamento temporário 4 bytes de cada vez.
Qualquer outra escolha de tamanho de palavra e tamanho de ajuste inicial é possível em outras modalidades.
Em outro exemplo, se o exponente tiver um valor de 13, então o valor de ajuste pode ser multiplicado por 2 de modo que o ajuste possa ainda abranger a faixa total da potência de 2 (nesse caso, duas páginas de 4 KB, se ajustando por 8 bytes de cada vez), e assim por diante (por exemplo, um valor de exponente de 14 significa que o valor de ajuste é multiplicado por 4 e um valor de exponente de 15 significa que o valor de ajuste é multiplicado por 8 e assim por diante, permitindo que o ajuste abranja a faixa total de potências de 2).
[085] No bloco 922, o sistema de computador criptografa uma porção do endereço, onde a porção do endereço a ser criptografada é determinada pelos metadados de faixa válida (por exemplo, exponente/potência de 2) e o valor de ajuste.
Os metadados de faixa válida determinam o número dos bits de endereço mais significativos do endereço codificado que devem ser criptografados (por exemplo, para baixo até um número mínimo assim alguns bits de endereço podem ser sempre criptografados). Em algumas modalidades, o valor de ajuste e/ou uma marca de identificação é criptografado também (por exemplo, para criar um tamanho de bloco razoável para uma cifra de bloco). Em algumas modalidades, os bits mais significativos dos bits usados/endereço canônico identificado nos metadados de faixa válida são criptografados com uma chave secreta (por exemplo, a chave secreta 720), utilizando os metadados de faixa válida (que podem ou não incluir o valor de ajuste) como uma otimização.
Nas modalidades ilustradas, os metadados de faixa válida (por exemplo, exponente/potência de 2) não seriam criptografados porque o processador utiliza o texto simples dos metadados de faixa válida para determinar o número de bits a descriptografar.
Entretanto, os metadados de faixa válida (por exemplo, exponente/potência de dois) podem ser usados como uma otimização no caso de uma cifra de bloco otimizável (e desse modo afetam os bits criptografados). Outros valores de dados que podem ser usados como otimizações incluem: dados armazenados nos bits não usados do endereço indireto, o limite superior no tamanho de armazenamento temporário, um exponente de um limite de potência de dois selecionado como o limite superior no tamanho de armazenamento temporário, um valor de ajuste aplicado ao limite de potência de dois, um identificador de bloco de código, dados de ponteiro de instrução, informações de permissão codificadas nos metadados, e/ou número de versão (útil ao reatribuir/revogar ponteiros que foram anteriormente atribuídos a um programa, a versão pode ser mantida pelo processador em um registro). As modalidades podem usar cifras de bloco pequeno (por exemplo, criptografar 32 bits de dados), como cifras Simon, Speck e cifra PRINCE, visto que os tamanhos de bloco correspondiam a (se adaptam no) tamanho de um ponteiro/endereço de memória linear/virtual de 64 bits. Além de ou alternativamente à criptografia, as cifras podem ser utilizadas para gerar um código de autenticação de mensagem (MAC) que pode ser truncado e armazenado nos bits de endereço virtual/linear não canônico não usados; esse MAC criptográfico pode ser utilizado para detectar adulteração ou modificação do endereço virtual quando manipulado fora de seus limites.
[086] Como utilizado na presente invenção, uma “otimização” pode se referir a, entre outras coisas, uma segunda entrada para uma cifra de bloco, além da entrada de texto de cifra ou texto simples comum e a chave (por exemplo, a chave secreta 720). A criptografia dos dois bits canônicos superiores habilita o sistema de computador a detectar quando o endereço foi ilegalmente alterado, porque o algoritmo de criptografia fará com que os bits superiores ilegalmente alterados produzam uma sequência aleatória de bits que são não determinísticos para um adversário, o que resulta, provavelmente, em uma falha quando o endereço indireto ilegalmente alterado é utilizado.
[087] A porção do endereço a ser criptografada (por exemplo, os bits canônicos/usados superiores) é criptografada utilizando um algoritmo de criptografia de modo de cifra, como uma cifra de bloco otimizável, utilizando os metadados de faixa válida e ajuste (por exemplo, [2] {-1}, no exemplo acima) como uma otimização. Alguns exemplos de cifras de bloco otimizável incluem: XOR-cript-XOR (XEX), Liskov, Rivest e Wagner (LRW), e modo de livro-código-otimizado baseado em XEX com roubo de texto de cifra (XTS). Podem ser usados outros métodos de difusão de bit nos quais qualquer alteração de bit único no texto de cifra resulta em alterações através do texto simples descriptografado inteiro. Se desejado, modalidades alternativas podem trocar segurança por desempenho utilizando métodos não criptográficos que ainda obtêm difusão de bit razoável análoga a uma cifra de bloco.
[088] A cifra selecionada para a criptografia pode ser implementada em hardware, utilizando um algoritmo que tem um tamanho de bloco selecionável por bit (por exemplo, SPECK), ou um algoritmo que permite um tamanho de bloco fixo com uma otimização utilizando os bits não criptografados restantes (por exemplo, os bits extra fora do tamanho de bloco fixo). Em algumas modalidades, a cifra tem difusão suficiente de bit de modo que qualquer alteração de bit feita nos bits de endereço criptografados afetará igualmente (em cadeia através) todas as posições de bits quando descriptografadas. Isso fornece a base para um endereço corrompido dada qualquer alteração ou adulteração de limites. Utilizando esse método, se o adversário tentar violar os metadados (por exemplo, o exponente ou valores de ajuste ou marca de identificação, ou os bits mais significativos criptografados) o endereço decodificado resultante será corrompido. No espaço de endereço de 64 bits, a corrupção de endereço resultará em uma falha com alta probabilidade, permitindo desse modo que a corrupção de endereço (e adulteração de limites ou acesso de ponteiro) seja captada pelo componente de sistema privilegiado 742 (por exemplo, um sistema operacional/executivo/VMM/modo alternativo/debugtrace/processador de gerenciamento/subsistema etc.).
[089] No exemplo acima, se o valor de ponteiro/endereço for incrementado além de 3, a modificação do endereço/ponteiro desse modo corromperá os bits canônicos superiores e causará um acesso de memória não determinístico que não pode ser controlado por um adversário. Por exemplo, ir além de um tamanho de armazenamento temporário por um byte resultará em um acesso de memória aleatório que alertará falha com alta probabilidade. Isso é devido às propriedades de difusão de bit da cifra para assegurar que mesmo alterações de um bit difundirão através de todos os bits mais significativos. Como resultado do ajuste, que força valores para o fim da faixa de potência de 2, transbordamentos de armazenamento temporário causam corrupção dos bits de endereço criptografado.
[090] A otimização de cifra pode ser estendida para incluir um identificador de bloco de código para fornecer controles de acesso sobre os quais os blocos de código (por exemplo, blocos do código de chamada) são permitidos usar um ponteiro/endereço indireto para acessar a memória. Adicionalmente, informações ou faixas de ponteiro de instrução (que pode ser mencionado como o “contador de programa”) podem ser codificadas como parte da otimização de criptografia de ponteiro. As informações de ponteiro de instrução podem ser utilizadas para limitar o escopo de qual código pode acessar quais dados. Por exemplo, todo código pode ser disposto em blocos fixos de memória dentro do espaço de endereço de 64 bits. O código com permissões de acesso similares pode ser agrupado junto no mesmo bloco ou faixa. A otimização pode incluir o identificador para o bloco de memória do qual uma instrução está executando. Desse modo, código e dados podem ser associados e acesso controlado, de modo que um adversário vindo de um bloco de código diferente não será capaz de acessar dados do bloco protegido utilizando os ponteiros criptografados, porque os ponteiros criptografados não decodificarão adequadamente se o identificador de bloco de código errado for utilizado como uma otimização. Além disso, quando um bloco de chamadas de código, por exemplo, malloc, para alocar a memória para si próprio, malloc pode retornar o endereço criptografado utilizando o bloco de memória do código de chamada para assegurar acesso privado à memória alocada (desde que a memória alocada não esteja livre e então realocada para outro bloco de código). Alternativamente, outros métodos de identificar o código de chamada podem ser usados na otimização, como chaves de proteção. Ainda adicionalmente, os metadados para acesso de leitura/gravação/execução que é utilizado pelo processador 112 para controlar acesso à memória podem ser usados como parte da otimização para os bits de endereço criptografados. Adicionalmente, o ponteiro de instrução pode ele próprio ser representado como um ponteiro codificado (por exemplo, baseado em faixa). Nesse caso, os metadados e bits de endereço criptografados podem ser usados como parte da “otimização” identificando o bloco de código que acessa um ponteiro de dados ou solicitando uma alocação/atribuição de memória.
[091] Com referência agora à Figura 10, é mostrado um exemplo de um método 1000 para decodificar um endereço. Porções do método 1000 podem ser executadas por hardware, firmware e/ou software e um sistema de computador (por exemplo, pelo processador 112 invocando o conjunto de circuitos de movimento seguro 660 e/ou o conjunto de circuitos de decodificação de endereço 662). O método 1000 começa em resposta a uma operação de acesso de memória como uma operação de leitura, gravação ou execução, por exemplo, uma instrução MOV. A tabela 2 abaixo fornece alguns exemplos ilustrativos de instruções MOV que podem usar a tecnologia de codificação de endereço revelada na presente invenção. Evidentemente, arquiteturas de processador diferentes podem se referir à funcionalidade “MOV” por nomes diferentes para as instruções ou parâmetros/opções diferentes. Como tal, as modalidades reveladas se aplicam a todos os tipos de funcionalidade “MOV” através de arquiteturas diferentes, independente da terminologia utilizada para se referir a tal funcionalidade. Além disso, a instrução MOV é um exemplo, e qualquer instrução que possa acessar a memória para ler/gravar dados pode aplicar os métodos de codificação e decodificação de endereço revelados na presente invenção.
Instrução Explicação Mover os 4 bytes em memória no endereço MOV eax, [ebx] codificado contido em EBX para EAX Mover o conteúdo de EBX para os 4 bytes na MOV [var], ebx var. de endereço de memória codificada (var é uma constante). Mover 4 bytes no endereço de memória codificado ESI + (-4) para o EAX (observe, MOV eax, [esi-4] isso corromperá o endereço se sair dos limites) Mover o conteúdo de CL para dentro do byte no endereço codificado ESI+EAX (um é MOV [esi+eax], cl endereço base, um deslocamento. Os ponteiros podem ser computados desde que permaneçam nos limites) Mover os 4 bytes de dados no endereço MOV edx, codificado ESI+4*EBX para EDX (EBX é um [esi+4*ebx] deslocamento, o endereço se tornará corrompido se EBX sair dos limites) MOV BYTE PTR Mover 2 para o byte único no endereço [ebx], 2 codificado armazenado em EBX. Mover a representação de número inteiro de
MOV WORD PTR 16 bits de 2 para os 2 bytes começando no [ebx], 2 endereço codificado em EBX. Mover a representação de número inteiro de
MOV DWORD PTR 32 bits de 2 para os 4 bytes começando no [ebx], 2 endereço codificado em EBX. MOV QWORD PTR Mover o número inteiro de 64 bits em RBP + [rbp+4F0h], rax deslocamento MOV rax, [rbx] Move 8 bytes começando em rbx para rax
Instrução Explicação A instrução move 8 bytes começando em addr + rip para rax (esse é endereçamento relativo a ponteiro de instrução de 32 bits, MOV rax, [addr] aqui addr precisa ser adequadamente codificado ou o ponteiro de instrução precisa ser codificado.
TABELA 2 INSTRUÇÕES DE MOV DE EXEMPLO
[092] No bloco 1010, o sistema de computador obtém o endereço codificado (por exemplo, o endereço codificado 706, que pode ser obtido a partir de um registro). No bloco 1012, o sistema de computador determina se o endereço codificado obtido no bloco 1010 tem bits não usados ou não canônicos. Se o sistema de computador determinar que o endereço codificado não tem bits não usados/não canônicos (por exemplo, o endereço não está dentro da faixa de endereços não canônica, ou de outro modo reservada, quer a faixa de endereço seja de 32 bits, 64 bits, 128 bits ou qualquer faixa que uma arquitetura alternativa possa exigir), uma falha é originada (1014). Se o sistema de computador determinar que o endereço codificado tem bits não usados/não canônicos (por exemplo, o endereço é dentro da faixa de endereço canônico ou reservado), o sistema de computador prossegue para o bloco 1016. No bloco 1016, o sistema de computador descriptografa a porção criptografada do endereço codificado, utilizando a cópia de algoritmo de descriptografia do algoritmo de criptografia utilizado no bloco 922 da Figura 9, e utilizando a mesma chave secreta e otimização como utilizado pelo algoritmo de criptografia no bloco 922 da Figura 9. No bloco 1018, o sistema de computador “desfaz” o ajuste nos metadados de faixa no endereço descriptografado (por exemplo, por subtrair o valor de ajuste descriptografado nos bits não usados/não canônicos a partir do valor descriptografado total do endereço). No bloco 1030, o sistema de computador retorna o endereço descriptografado a sua forma original (por exemplo, canônica), por exemplo, por remover os bits não usados/não canônicos. No bloco 1022, o sistema de computador utiliza o endereço decodificado transmitido pelo bloco 1020 como um endereço de memória “verdadeiro” (por exemplo, virtual ou linear) (por exemplo, como um ponteiro). No bloco 1024, o sistema de computador determina se o endereço decodificado utilizado como um ponteiro/endereço de memória no bloco 1022 é um endereço corrompido. Se o endereço decodificado for corrompido, uma falha é originada (1014). Se o endereço decodificado não for corrompido, o sistema de computador completa com sucesso a operação de acesso de memória, utilizando o endereço decodificado como um ponteiro/endereço de memória, no bloco
1026. Desse modo, o método 1000 permite que o sistema de computador verifique o endereço indireto de faixa codificada e executar a verificação de faixa incorporada antes de converter o endereço de faixa codificada em um endereço de memória real. Adicionalmente, valores de ajuste inválidos (por exemplo, valores de ajuste que vão além da faixa de potência de 2), podem ser usados para determinar com alguma probabilidade quando uma corrupção ocorre bem como valores de endereço inválidos ou metadados reservados para detectar quando ocorre a corrupção. Mesmo se a corrupção não for detectada, o endereço resultante não seria determinístico (e, portanto, utilizável) para um adversário.
CODIFICAÇÃO/CRIPTOGRAFIA DE ENDEREÇO E MARCA
[093] A Figura 11 representa uma modalidade na qual marcas de memória são criptografados com a parte criptografada do endereço. As modalidades nas quais marcas de memória são incluídos na parte criptografada do endereço como atribuído pelo alocador de memória (por exemplo, malloc) pode evitar que adversários manipulem a porção de texto de cifra do endereço sem afetar também os bits de marca. Portanto, um adversário não pode tomar um endereço fixo e começar a adivinhar independentemente os bits de marca. A criptografia fará com que o valor de marca e os bits de endereço criptografados mudem, resultando em uma marca aleatório associado a um endereço aleatório.
[094] As modalidades nas quais a marca de memória é incluída na porção criptografada do ponteiro criptográfico podem evitar que um adversário adivinhe marcas. Se qualquer parte do ponteiro criptografado for modificada, todos os bits descriptografados serão aleatórios. Tanto o endereço descriptografado como a marca serão diferentes; portanto, um adversário não pode correlacionar uma marca com um endereço criptografado porque ambos mudam cada vez que o adversário tentar modificar o texto de cifra e especular sobre o resultado.
MODALIDADES DE EXEMPLO
[095] Em uma modalidade, um processador inclui um decodificador, um cache, conjunto de circuitos de translação de endereço, um controlador de cache e um controlador de memória. O decodificador deve decodificar uma instrução. A instrução deve especificar um primeiro endereço associado a um objeto de dados, o primeiro endereço tendo uma primeira marca de memória. O conjunto de circuitos de translação de endereço deve transladar o primeiro endereço em um segundo endereço, o segundo endereço identificar um local de memória do objeto de dados. O comparador deve comparar a primeira marca de memória e uma segunda marca de memória associada ao segundo endereço. O controlador de cache deve detectar uma falta de cache associada ao local de memória. O controlador de memória, em resposta à detecção pelo comparador de uma combinação entre a primeira marca de memória e a segunda marca de memória e à detecção pelo controlador de cache da falta de cache, deve carregar o objeto de dados a partir do local de memória no cache.
[096] Em várias modalidades, qualquer combinação do que se segue pode se aplicar também. O primeiro endereço pode ser um endereço virtual e o segundo endereço pode ser um endereço físico. O controlador de memória pode ser também para evitar carregar uma linha de cache correspondente ao local de memória até que o comparador tenha detectado a combinação. O controlador de memória também pode ser para, em resposta à detecção pelo comparador de um descombinamento entre a primeira marca de memória e a segunda marca de memória, carregar dados não indicativos do objeto de dados em uma linha de cache correspondente ao local de memória. O processador pode incluir também conjunto de circuitos de fila de veneno para, em resposta à detecção pelo comparador de um descombinamento entre a primeira marca de memória e a segunda marca de memória, definir um indicador para indicar que uma linha de cache correspondente ao local de memória é inválida. O conjunto de circuitos de fila de veneno também pode fornecer uma indicação para software de que a linha de cache é inválida apenas após um resultado da instrução ter sido comprometido. O processador pode incluir também conjunto de circuitos de segurança de ponteiro para definir a primeira marca de memória. O processador pode incluir também conjunto de circuitos de criptografia para assegurar de modo criptográfico o objeto de dados pelo menos parcialmente com base na primeira marca de memória. A primeira marca de memória pode incluir uma marca de identificação para identificar um tipo, uma função, um local de memória ou um uso para o objeto de dados. O conjunto de circuitos de criptografia pode ser para usar pelo menos uma porção da marca de memória para pelo menos parcialmente definir uma entrada de otimização em um algoritmo de criptografia. A primeira marca de memória pode incluir uma marca de criptografia, e o conjunto de circuitos de criptografia pode ser também para usar a marca de criptografia para identificar uma de uma pluralidade de chaves de criptografia. A primeira marca de memória pode incluir uma marca de objeto pequeno para indicar se uma linha de cache associada ao local de memória deve incluir uma pluralidade de objetos de dados. A marca de objeto pequeno pode ser para habilitar granularidade de sublinha de cache de marcação de memória. A primeira marca de memória inclui uma marca de distância limitada para indicar uma distância permitida entre o primeiro endereço de memória e o objeto de dados. O processador pode incluir também conjunto de circuitos de verificação de integridade para gerar um valor de verificação de integridade pelo menos parcialmente com base no primeiro endereço e um valor criptografado do objeto de dados. O processador pode incluir também conjunto de circuitos de segurança de ponteiro para indicar adulteração do primeiro endereço pelo menos parcialmente baseado nos valores de verificação de integridade.
[097] Em uma modalidade, um processador inclui um decodificador para decodificar uma instrução para alocar uma região de memória para um programa de software e uma unidade de execução para executar a instrução. A unidade de execução inclui conjunto de circuitos de regra de faixa para determinar uma faixa válida para a região de memória; conjunto de circuitos de ajuste de endereço para determinar um primeiro número de bits de endereço a ser utilizado pelo programa de software para manipular um endereço na faixa válida e um segundo número de bits de endereço para incluir uma marca de memória para indicar permissão de acesso; e conjunto de circuitos de criptografia para criptografar pelo menos uma porção do endereço e marca de memória para gerar um endereço criptografado a ser retornado ao programa de software.
[098] Em uma modalidade, um processador inclui um decodificador para decodificar uma instrução, a instrução para especificar um primeiro endereço criptografado associado a um objeto de dados; conjunto de circuitos de descriptografia para descriptografar o primeiro endereço criptografado para gerar um primeiro endereço descriptografado e uma primeira marca de memória descriptografada; um cache; conjunto de circuitos de translação de endereço para transladar o primeiro endereço descriptografado em um segundo endereço, o segundo endereço para identificar um local de memória do objeto de dados; um comparador para comparar a primeira marca de memória e uma segunda marca de memória associada ao segundo endereço; um controlador de cache para detectar uma falta de cache associada ao local de memória; e um controlador de memória para, em resposta à detecção pelo comparador de uma combinação entre a primeira marca de memória e a segunda marca de memória e à detecção pelo controlador de cache da falta de cache, carregar o objeto de dados a partir do local de memória para o cache.
[099] Em uma modalidade, um processador inclui um decodificador para decodificar uma instrução, a instrução para especificar um primeiro endereço associado a um objeto de dados, o primeiro endereço tendo uma primeira marca de memória; um cache; conjunto de circuitos de translação de endereço para transladar o primeiro endereço em um segundo endereço, o segundo endereço para identificar um local de memória do objeto de dados; um comparador para comparar a primeira marca de memória e uma segunda marca de memória associada ao segundo endereço; um controlador de cache para detectar uma falta de cache associada ao local de memória; e meio para, em resposta à detecção pelo comparador de uma combinação entre a primeira marca de memória e a segunda marca de memória e à detecção pelo controlador de cache da falta de cache, carregar o objeto de dados a partir do local de memória no cache.
[100] Em várias modalidades, qualquer combinação do que se segue pode se aplicar também. O meio também pode ser para evitar carregar uma linha de cache correspondente ao local de memória até que o comparador tenha detectado a combinação. O meio também pode ser para, em resposta à detecção pelo comparador de um descombinamento entre a primeira marca de memória e a segunda marca de memória, carregar dados não indicativos do objeto de dados em uma linha de cache correspondente ao local de memória. O processador também pode incluir meio de fila de veneno para, em resposta à detecção pelo comparador de um descombinamento entre a primeira marca de memória e a segunda marca de memória, definir um indicador para indicar que uma linha de cache correspondente ao local de memória é inválida. O meio de fila de veneno pode ser também para fornecer uma indicação para software de que a linha de cache é inválida apenas após um resultado da instrução ter sido comprometido.
[101] Em uma modalidade, um processador inclui um decodificador para decodificar uma instrução para alocar uma região de memória para um programa de software; uma unidade de execução para executar a instrução, a unidade de execução incluindo meio de regra de faixa para determinar uma faixa válida para a região de memória; meio de ajuste de endereço para determinar um primeiro número de bits de endereço a serem usados pelo programa de software para manipular um endereço na faixa válida e um segundo número de bits de endereço para incluir uma marca de memória para indicar permissão de acesso; e meio de criptografia para criptografar pelo menos uma porção do endereço e a marca de memória para gerar um endereço criptografado a ser retornado ao programa de software.
[102] Em uma modalidade, um processador inclui um decodificador para decodificar uma instrução, a instrução para especificar um primeiro endereço criptografado associado a um objeto de dados; conjunto de circuitos de descriptografia para descriptografar o primeiro endereço criptografado para gerar um primeiro endereço descriptografado e uma primeira marca de memória descriptografada; um cache; conjunto de circuitos de translação de endereço para transladar o primeiro endereço descriptografado em um segundo endereço, o segundo endereço para identificar um local de memória do objeto de dados; um comparador para comparar a primeira marca de memória e uma segunda marca de memória associada ao segundo endereço; um controlador de cache para detectar uma falta de cache associada ao local de memória; e meio para, em resposta à detecção pelo comparador de uma combinação entre a primeira marca de memória e a segunda marca de memória e à detecção pelo controlador de cache da falta de cache, carregar o objeto de dados a partir do local de memória no cache.
[103] Em uma modalidade, um método inclui decodificar uma instrução, a instrução a especificar um primeiro endereço associado a um objeto de dados, o primeiro endereço tendo uma primeira marca de memória; transladar o primeiro endereço em um segundo endereço, o segundo endereço para identificar um local de memória do objeto de dados; comparar a primeira marca de memória e uma segunda marca de memória associada ao segundo endereço; detectar uma falta de cache associada ao local de memória; e carregar, em resposta à detecção de uma combinação entre a primeira marca de memória e a segunda marca de memória e à detecção da falta de cache, o objeto de dados a partir do local de memória em um cache.
[104] Em várias modalidades, qualquer combinação do que se segue pode se aplicar também. O primeiro endereço pode ser um endereço virtual e o segundo endereço pode ser um endereço físico. O método pode incluir também evitar carregamento de uma linha de cache correspondente ao local de memória até a detecção da combinação. O método pode incluir também carregar, em resposta à detecção de um descombinamento entre a primeira marca de memória e a segunda marca de memória, dados não indicativos do objeto de dados em uma linha de cache correspondente ao local de memória. O método pode incluir também definir, em resposta ao comparador detectando um descombinamento entre a primeira marca de memória e a segunda marca de memória, um indicador para indicar que uma linha de cache correspondente ao local de memória é inválida. O método também pode incluir fornecer uma indicação para software de que a linha de cache é inválida apenas após um resultado da instrução ter sido comprometido.
[105] Em uma modalidade, um método inclui decodificar uma instrução para alocar uma região de memória para um programa de software; executar a instrução, a execução incluindo determinar uma faixa válida para a região de memória; determinar um primeiro número de bits de endereço a serem usados pelo programa de software para manipular um endereço dentro da faixa válida; determinar um segundo número de bits de endereço para incluir uma marca de memória para indicar permissão de acesso; e criptografar pelo menos uma porção do endereço e a marca de memória para gerar um endereço criptografado; e retornar o endereço criptografado ao programa de software.
[106] Em uma modalidade, um método inclui decodificar uma instrução, a instrução a especificar um primeiro endereço criptografado associado a um objeto de dados; descriptografar o primeiro endereço criptografado para gerar um primeiro endereço descriptografado e uma primeira marca de memória descriptografada; transladar o primeiro endereço descriptografado em um segundo endereço, o segundo endereço para identificar um local de memória do objeto de dados; comparar a primeira marca de memória e uma segunda marca de memória associada ao segundo endereço; detectar uma falta de cache associada ao local de memória; e carregar, em resposta à detecção de uma combinação entre a primeira marca de memória e a segunda marca de memória e à detecção da falta de cache, o objeto de dados a partir do local de memória no cache.
[107] Em modalidades, um aparelho pode incluir meio para executar quaisquer das funções e/ou métodos descritos acima. Em modalidades, uma mídia tangível legível por máquina pode armazenar instruções, que, quando executadas por uma máquina, fazem com que a máquina execute quaisquer dos métodos descritos acima.
ARQUITETURAS DE SISTEMA, PROCESSADOR E NÚCLEO EXEMPLIFICADORES
[108] As modalidades da invenção foram descritas e mostradas com referência a um processador 112, que podem representar quaisquer de muitos processadores diferentes nos quais a invenção é incorporada em modos diferentes e/ou para propósitos diferentes. Esses processadores e núcleos, por exemplo como descrito abaixo, podem incluir hardware, como caches e preditores de ramificação, que melhoram o desempenho, porém podem tornar o processador e/ou núcleo mais vulnerável à análise contra a qual pode ser definida de acordo com modalidades da invenção.
[109] Por exemplo, implementações de núcleos (por exemplo, núcleos 118) em um processador no qual a invenção pode ser incorporada podem incluir: um núcleo em ordem de propósito geral destinado à computação de propósito geral; um núcleo fora de ordem de propósito geral de alto desempenho destinado à computação de propósito geral um núcleo de propósito especial destinado principalmente à computação gráfica e/ou científica (capacidade de transmissão). Implementações de processadores nos quais a invenção pode ser incorporada podem incluir: uma unidade de processamento central (CPU) incluindo um ou mais núcleos em ordem de propósito geral destinados à computação de propósito geral e/ou um ou mais núcleos fora de ordem de propósito geral destinados à computação de propósito geral; e um coprocessador incluindo um ou mais núcleos de propósito especial destinados principalmente à computação gráfica e/ou científica (capacidade de transmissão). Tais processadores diferentes levam a arquiteturas de sistema de computador diferentes, que podem incluir: o coprocessador em um chip separado a partir da CPU; o coprocessador em uma matriz separada no mesmo pacote que uma CPU; o coprocessador na mesma matriz que uma CPU (em cujo caso, tal coprocessador é às vezes mencionado como lógica de propósito especial, como lógica gráfica e/ou científica (capacidade de transmissão) integrada, ou como núcleos de propósito especial); e um sistema em um chip (SoC) que pode incluir na mesma matriz a CPU descrita (às vezes mencionadas como o núcleo (ou núcleos) de aplicação ou processador (ou processadores) de aplicação, o coprocessador acima descrito e funcionalidade adicional.
[110] Arquiteturas de núcleo exemplificadoras são descritas a seguir, seguido por descrições de processadores e arquiteturas de computador exemplificadoras. Cada processador pode incluir um ou mais núcleos, onde cada núcleo e/ou combinação de núcleos pode ser arquitetada e projetada para executar um ou mais threads, processos ou outras sequências de instruções em vários momentos. Arquiteturas de núcleo e técnicas de design podem fornecer e/ou suportar a execução simultânea de múltiplas linhas de execução, de acordo com qualquer de um tipo de abordagens conhecidas como múltiplas linhas de execução simultâneas (ou simétrica) (SMYT) ou qualquer outra abordagem.
[111] Além disso, como mencionado acima e explicado em mais detalhe abaixo, as modalidades da presente revelação podem se aplicar a qualquer tipo de processador ou elemento de processamento, incluindo processadores de propósito geral, processadores de servidor ou elementos de processamento para uso em um ambiente de servidor, coprocessadores (por exemplo, coprocessadores de segurança) processadores MIC de capacidade de transmissão alta, GPGPUs, aceleradores (como, por exemplo, aceleradores gráficos ou unidades de processamento de sinais digitais (DSP), aceleradores criptográficos, aceleradores de função fixa, aceleradores de aprendizagem por máquina, aceleradores de funcionamento em rede ou aceleradores de visão de computador), disposições de porta programáveis em campo, ou qualquer outro processador ou dispositivo de processamento. O processador ou processadores podem ser implementados em um ou mais chips. O processador ou processadores podem fazer parte de e/ou podem ser implementados em um ou mais substratos utilizando qualquer de um número de tecnologias de processo, como, por exemplo, BiCMOS, CMOS ou NMOS. Os processadores e dispositivos de processamento listados acima e descritos na presente invenção são exemplificadores; como explicado aqui, a presente revelação é aplicável a qualquer processador ou dispositivo de processamento.
[112] Além disso, como mencionado acima e explicado em mais detalhe abaixo, as modalidades da presente revelação podem se aplicar a processadores ou elementos de processamento utilizando uma ampla variedade de conjuntos de instruções e arquiteturas de conjuntos de instruções, incluindo, por exemplo, o conjunto de instruções x86 (opcionalmente incluindo extensões que foram adicionadas com versões mais novas); o conjunto de instruções MIPS de MIPS Technologies de Sunnyvale, CA; o conjunto de instruções ARM (com extensões adicionais opcionais como NEON) de ARM Holdings de Sunnyvale, CA; o conjunto de instruções “Power” da IBM, ou qualquer outro conjunto de instruções incluindo conjuntos de instrução tanto RISC como CISC. Os conjuntos de instruções e arquiteturas de conjuntos de instruções listados acima e descritos na presente invenção são exemplificadores; como explicado na presente invenção, a presente revelação é aplicável a qualquer conjunto de instruções ou arquitetura de conjunto de instruções.
ARQUITETURA DE NÚCLEO EXEMPLIFICADORA
[113] A Figura 12A é um diagrama de blocos ilustrando tanto um pipeline em ordem exemplificador como um pipeline de execução/emissão fora de ordem, de renomeação de registro exemplificador de acordo com modalidades da invenção. A Figura 12B é um diagrama de blocos ilustrando tanto uma modalidade exemplificadora de um núcleo de arquitetura em ordem como núcleo de arquitetura de execução/emissão fora de ordem de renomeação de registro exemplificador a ser incluído em um processador de acordo com modalidades da invenção. Os quadrados de linha cheia nas Figuras 12A-B ilustram o pipeline em ordem e núcleo em ordem, enquanto a adição opcional dos quadrados de linha tracejada ilustra o núcleo e pipeline de execução/emissão fora de ordem, de renomeação de registro. Dado que o aspecto em ordem é um subconjunto do aspecto fora de ordem, o aspecto fora de ordem será descrito.
[114] na Figura 12A, um pipeline de processador 1200 inclui um estágio de busca 1202, um estágio de decodificar comprimento 1204, um estágio de decodificar 1206, um estágio de alocação 1208, um estágio de renomear 1210, um estágio de programação (também conhecido como despacho ou emissão) 1212, um estágio de leitura de memória/leitura de registro 1214, um estágio de executar 1216, um estágio de gravar memória/escrever de volta 1218, um estágio de manipulação de exceção 1222 e um estágio de compromisso 124.
[115] A Figura 12B mostra o núcleo de processador 1290 incluindo uma unidade de front-end 1230 acoplada a uma unidade de motor de execução 1250, e ambas são acopladas a uma unidade de memória 1270. O núcleo 1290 pode ser um núcleo de computação de conjunto de instruções reduzidas (RISC), um núcleo de computação de conjunto de instruções complexas (CISCA), um núcleo de palavra de instrução muito longa (VLIW) ou um tipo de núcleo híbrido ou alternativo. Ainda como outra opção, o núcleo 1290 pode ser um núcleo de propósito especial, como, por exemplo, um núcleo de comunicação ou rede, motor de compressão, núcleo de coprocessador, núcleo de unidade de processamento gráfico de computação de propósito geral (GPGPU), núcleo de gráfico ou similar. Por exemplo, como explicado acima, o núcleo 1290 pode ser qualquer membro de um conjunto contendo: processadores de propósito geral, processadores de servidor ou elementos de processamento para uso em um ambiente de servidor, coprocessadores (por exemplo,
coprocessadores de segurança), processadores MIC de capacidade de transmissão alta, GPGPUs, aceleradores (como, por exemplo, aceleradores gráficos ou unidades de processamento de sinais digitais (DSP), aceleradores criptográficos, aceleradores de função fixa, aceleradores de aprendizagem por máquina, aceleradores de rede, ou aceleradores de visão de computador), disposições de porta programável em campo, ou qualquer outro processador ou dispositivo de processamento.
[116] A unidade de front-end 1230 inclui uma unidade de predição de ramificação 1232 acoplada a um cache de micro- operações 1233 e uma unidade de cache de instrução 1234, que é acoplada a um armazenamento temporário paralelo à translação (TLB) de instrução 1236, que é acoplado a uma unidade de busca de instrução 1238, que é acoplada a uma unidade de decodificação 1240. A unidade de decodificação 1240 (ou decodificador) pode decodificar instruções e gerar como uma saída uma ou mais micro-operações, pontos de entrada de microcódigo, microinstruções, outras instruções, ou outros sinais de controle, que são decodificados a partir de, ou que de outro modo refletem, ou são derivados das, instruções originais. As micro-operações, pontos de entrada de microcódigo, microinstruções etc. podem ser armazenadas pelo menos no cache de micro-operações 1233. A unidade de decodificação 1240 pode ser implementado utilizando vários mecanismos diferentes. Os exemplos de mecanismos adequados incluem, porém sem limitação, tabelas de consulta, implementações de hardware, disposições de lógica programável (PLAs), memórias somente de leitura de microcódigo (ROMs) etc. Em uma modalidade, o núcleo 1290 inclui uma ROM de microcódigo ou outra mídia que armazena microcódigo para certas microinstruções (por exemplo, na unidade de decodificação 1240 ou de outro modo na unidade front-end 1230). O cache de micro-
op 1233 e a unidade de decodificação 1240 são acoplados a uma unidade de alocador/renomear 1252 na unidade de motor de execução 1250. Em várias modalidades, um cache de micro-op como 1233 pode ser também ou ao invés, mencionado como um op- cache, u-op cache, uop-cache, ou uop-cache; e micro-operações podem ser mencionadas como micro-ops, u-ops, uops e uops.
[117] A unidade de motor de execução 1250 inclui a unidade de alocador/renomear 1252 acoplada a uma unidade de retirada 1254 e um conjunto de uma ou mais unidades de programador 1256. A unidade (ou unidades) de programador 1256 representa qualquer número de programadores diferentes, incluindo estações de reservas, janela de instrução central etc. A unidade (ou unidades) de programador 1256 é acoplada à unidade (ou unidades) de arquivo (ou arquivos) de registro físico 1258. Cada das unidades de arquivo (ou arquivos) de registro físico 1258 representa um ou mais arquivos de registro físico, os diferentes dos quais armazenam um ou mais tipos de dados diferentes, como inteiro escalar, ponto flutuante escalar, inteiro empacotado, ponto flutuante empacotado, inteiro de vetor, ponto flutuante de vetor, status (por exemplo, um ponteiro de instrução que é o endereço da próxima instrução a ser executada) etc. Em uma modalidade, a unidade de arquivo (ou arquivos) de registro físico 1258 compreende uma unidade de registros de vetor, uma unidade de registros de máscara de gravação e uma unidade de registros escalares. Essas unidades de registro podem fornecer registros de vetor de arquitetura, registros de máscara de vetor e registros de propósito geral. A unidade (ou unidades) de arquivo (ou arquivos) de registro físico 1258 é sobreposta pela unidade de retirada 1254 para ilustrar vários modos nos quais a execução fora de ordem e renomeação de registro pode ser implementada (por exemplo, utilizando um (ou mais) armazenamento temporários de reordenar e um (ou mais) arquivo de registro de retirada; usar um (ou mais) arquivo futuro, um (ou mais) armazenamento temporário de histórico, e um (ou mais) arquivo de registro de retirada; utilizando um mapa de registro e um pool de registros etc.) A unidade de retirada 1254 e a unidade (ou unidades) de arquivo (ou arquivos) de registro físico 1258 é acoplada ao agrupamento (ou agrupamentos) de execução 1260. O agrupamento (ou agrupamentos) de execução 1260 inclui um conjunto de uma ou mais unidades de execução 1262 e um conjunto de uma ou mais unidades de acesso de memória 1264. As unidades de execução 1262 podem executar várias operações (por exemplo, deslocamento, adição, subtração, multiplicação) e em vários tipos de dados (por exemplo, ponto flutuante escalar, inteiro empacotado, ponto flutuante empacotado, inteiro de vetor, ponto flutuante de vetor). Embora algumas modalidades possam incluir diversas unidades de execução dedicadas a funções ou conjuntos de funções específicas, outras modalidades podem incluir apenas uma unidade de execução ou múltiplas unidades de execução que todas executam todas as funções.
A unidade (ou unidades) de programador 1256, unidade (ou unidades) de arquivo (ou arquivos) de registro físico 1258 e agrupamento (ou agrupamentos) de execução 1260 são mostradas como sendo possivelmente plurais porque certas modalidades criam pipelines separados para certos tipos de dados/operações (por exemplo, um pipeline de inteiro escalar, um pipeline de ponto flutuante escalar/inteiro empacotado/ponto flutuante empacotado/inteiro de vetor/ponto flutuante de vetor e/ou um pipeline de acesso de memória que têm, cada, sua própria unidade de programador, unidade de arquivo (ou arquivos) de registro físico, e/ou agrupamento de execução e no caso de um pipeline de acesso de memória separada, certas modalidades são implementadas nas quais somente um agrupamento de execução desse pipeline tem a unidade (ou unidades) de acesso de memória
1264). Deve ser também entendido que onde pipelines separados são usados, um ou mais desses pipelines podem ser emissão/execução fora de ordem e o resto em ordem.
[118] O conjunto de unidades de acesso de memória 1264 é acoplado à unidade de memória 1270, que inclui uma unidade TLB de dados 1272 acoplada a uma unidade de cache dados 1274 acoplada a uma unidade de cache de nível 2 (L2) 1276. Em uma modalidade exemplificadora, as unidades de acesso de memória 1264 podem incluir uma unidade de carga, uma unidade de endereço de armazenamento e uma unidade de dados de armazenamento, cada uma das quais é acoplada à unidade TLB de dados 1272 na unidade de memória 1270. A unidade de cache de instrução 1234 é adicionalmente acoplada a uma unidade de cache de nível 2 (L2) 1276 na unidade de memória 1270. A unidade de cache L2 1276 é acoplada a um ou mais outros níveis de cache e eventualmente a uma memória principal.
[119] Como exemplo, a arquitetura de núcleo de execução/emissão fora de ordem, de renomeação de registro exemplificadora pode implementar o pipeline 1200 como a seguir: 1) a busca de instrução 1238 executa os estágios de busca e decodificação de comprimento 1202 e 1204; 2) a unidade de decodificação 1240 executa o estágio de decodificação 1206; 3) a unidade de alocador/renomear 1252 executa o estágio de alocação 1208 e estagio de renomeação 1210; 4) a unidade (ou unidades) de programador 1256 executa o estágio de programação 1212; 5) a unidade (ou unidades) de arquivo (ou arquivos) de registro físico 1258 e a unidade de memória 1270 executam o estágio de leitura de memória/leitura de registro 1214; o agrupamento de execução 1260 executa o estágio de executar 1216; 6) a unidade de memória 1270 e a unidade (ou unidades) de arquivo (ou arquivos) de registro físico 1258 executa(m) o estágio de gravar memória/escrever de volta 1218; 7) várias unidades podem estar envolvidas no estágio de manipulação de exceção 1222; e 8) a unidade de retirada 1254 e a unidade (ou unidades) de arquivo (ou arquivos) de registro físico 1258 executa(m) o estágio de compromisso 1224.
[120] O núcleo 1290 pode suportar um ou mais conjuntos de instruções (por exemplo, o conjunto de instruções x86 (com algumas extensões que foram adicionadas com versões mais recentes); o conjunto de instruções MIPS da MIPS Technologies de Sunnyvale, CA; o conjunto de instruções ARM (com extensões adicionais opcionais como NEON) da ARM Holdings de Sunnyvale, CA, o conjunto de instruções “Power” da IBM ou qualquer outro conjunto de instruções, incluindo conjuntos de instruções tanto RISC como CISC), incluindo a instrução (ou instruções) descrita na presente invenção. Em uma modalidade, o núcleo 1290 inclui lógica para suportar uma extensão de conjunto de instruções de dados empacotados (por exemplo, AVX, AVX2, AVX- 512), permitindo, desse modo, que as operações utilizadas por muitas aplicações de multimídia sejam executadas utilizando dados empacotados.
[121] Deve ser entendido que o núcleo pode suportar múltiplas linhas de execução (executando dois ou mais conjuntos paralelos de operações ou threads), e pode fazer isso em uma variedade de modos incluindo múltiplas linhas de execução com fatia de tempo, SMT (por exemplo, um núcleo físico único fornece um núcleo lógico para cada dos threads que o núcleo físico está fazendo múltiplas linhas de execução simultaneamente), ou uma combinação dos mesmos (por exemplo, busca e decodificação em fatia de tempo, e SMT posteriormente como na tecnologia Hyperthreading da Intel®).
[122] Embora a renomeação de registro seja descrita no contexto de execução fora de ordem, deve ser entendido que a renomeação de registro pode ser utilizada em uma arquitetura em ordem. Embora a modalidade ilustrada do processador também inclua unidades de cache de dados e instruções separadas 1234/1274 e uma unidade cache L2 compartilhada 1276, modalidades alternativas podem ter um único cache interno tanto para instruções como para dados, como, por exemplo, um cache interno de Nível 1 (L1) ou múltiplos níveis de cache interno. Em algumas modalidades, o sistema pode incluir uma combinação de um cache interno e um cache externo que é externo ao núcleo e/ou processador. Alternativamente, todos os caches podem ser externos ao núcleo e/ou o processador.
ARQUITETURA DE NÚCLEO EXEMPLIFICADORA
[123] A Figura 13 é um diagrama de blocos de um núcleo de processador de execução/emissão fora de ordem ilustrativo que pode ser incluído em um processador de acordo com modalidades da invenção. Na Figura 13, o núcleo de processador 1300 inclui a unidade de front-end 1310, unidade de número inteiro 1320, unidade FP 1330, unidade de carregar-armazenar 1340 e unidade de cache de Nível 2 (L2) 1350. A Figura 13 é fornecida para fins ilustrativos, e como tal, mostra várias unidades dispostas e denominadas de acordo com uma de muitas abordagens que são possíveis de acordo com modalidades da presente invenção.
[124] Na Figura 13, a unidade de front-end 1310 inclui unidade de predição de ramificação 1311, unidade de cache- micro-operação (op-cache) 1312, unidade de cache de instrução (i-cache) 1313, unidade de decodificação 1314, e unidade de fila de micro-operação (micro-op) 1315. A unidade de predição de ramificação 1311 inclui conjunto de circuitos de predição de ramificação, como um armazenamento temporário de ramificação-alvo (BTB) para reduzir o retardo médio de ramificação e é acoplada à unidade op-cache 1312 e unidade i- cache 1313. A unidade op-cache 1312 inclui um op-cache no qual cache micro-ops associadas a instruções. A unidade de i-cache 1313 inclui um i-cache, que em uma modalidade pode ser um i- cache de quatro vias, 64 K, no qual cache instruções. A unidade de i-cache 1313 é acoplada à unidade de decodificação 1314 para fornecer instruções em cache a serem decodificadas. A unidade de decodificação 1314 inclui conjunto de circuitos de decodificação, como um decodificador de instrução, para decodificar instruções. Em uma modalidade, a unidade de front- end 1310 a unidade de busca e decodificação 1314 pode decodificar até quatro instruções por ciclo de relógio. A unidade de op-cache 1312 e a unidade de decodificação 1314 são individualmente acopladas à unidade de fila de micro-op 1315 para fornecer dois caminhos para carregamento de micro-ops na unidade de fila de micro-op 1315. A unidade de fila de micro- op 1315 inclui uma fila de micro-op, que em uma modalidade pode despachar seis micro-ops por ciclo para uma ou mais unidades de execução.
[125] Também, na Figura 13, a unidade de número inteiro 1320 inclui unidade de renomear número inteiro 1321; unidades de programador de número inteiro 1322A, 1322B, 1322C, 1322D, 1322E e 1322F (coletivamente, unidades de programador de número inteiro 1322); arquivo de registro físico de número inteiro 1323; unidades de lógica aritmética (ALUs) 1324A, 1324B, 1324C e 1324D (coletivamente, ALUs 1324); e unidades de geração de endereço (AGUs) 1325A e 1325B (coletivamente AGUs 1325). A unidade de renomear número inteiro 1321 é acoplada à unidade de fila de micro-op 1315 para receber uma ou mais micro-ops a serem executadas, totalmente ou em parte, por uma ou mais de ALUs 1324 e/ou AGUs 1325. A unidade de renomear número inteiro 1321 inclui conjunto de circuitos de renomear registro e é acoplada a unidades de programador de número inteiro 1322, que por sua vez são acopladas ao arquivo de registro físico de número inteiro 1323, para fornecer renomeação de registro de número inteiro. As unidades de programador de número inteiro 1322 incluem conjunto de circuitos de programação para programar micro-ops a serem executadas, totalmente ou em parte, por uma ou mais das ALUs 1324 e/ou AGUs 1325. O arquivo de registro físico de número inteiro 1323 inclui um arquivo de registros de número inteiro físico, que em uma modalidade pode incluir 168 registros de número inteiro físicos. Cada de ALUs 1324 e AGUs 1325 é acoplada ao arquivo de registro físico 1323 para receber valores a serem usados como entradas na execução de micro-ops e/ou fornecer valores como saídas da execução de micro-ops.
[126] Também, na Figura 13, a unidade FP 1330 inclui a unidade de renomear FP 1331, a unidade de programador de FP 1332, arquivo de registro de FP 1333, multiplicadores de FP 1334A e 1334B (coletivamente, multiplicadores de FP 1334), e somadores de FP 1335A e 1335B (coletivamente, somadores de FP 1335). A unidade de renomear FP 1331 é acoplada à unidade de fila de micro-op 1315 para receber uma ou mais micro-ops a serem executadas, totalmente ou em parte, por um ou mais dos multiplicadores de FP 1334 e/ou somadores de FP 1335. A unidade de renomear FP 1331 inclui conjunto de circuitos de renomear registro e também é acoplada à unidade de programador de FP 1332, que por sua vez são acoplados ao arquivo de registro de FP 1333, para fornecer renomeação de registro de FP. A unidade de programador de FP 1332 inclui conjunto de circuitos de programação para programar micro-ops a serem executados, totalmente ou em parte, por um ou mais dos multiplicadores de FP 1334 e/ou somadores de FP 1335. Cada dos multiplicadores de FP 1334 e somadores de FP 1335 é acoplado ao arquivo de registro de FP 1333 para receber valores a serem usados como entradas na execução de micro-ops e/ou fornecer valores como saídas da execução de micro-ops.
[127] Também, na Figura 13, a unidade de carregar-armazenar 1340 inclui unidade de fila de carregar-armazenar 1341 e unidade de cache de dados (d-cache) 1342. A unidade de fila de carregar-armazenar 1341 pode incluir qualquer número de filas de carregar e/ou armazenar, em uma modalidade fornecendo duas cargas e uma armazenagem por ciclo de relógio, acopladas a AGUs 1325 para receber endereços de memória para operações de carregar e/ou armazenar. A unidade d-cache 1342 inclui uma d- cache, que em uma modalidade pode ser um d-cache de nível 1 (L1), de oito vias, 32 K, no qual cache dados, acoplados ao arquivo de registro físico de número inteiro 1323, arquivo de registro de FP 1333 e unidade de fila de carregar-armazenar 1341 para receber e fornecer dados gerados por e a serem usados na execução de micro-ops.
[128] Também, na Figura 13, a unidade de cache L2 1350 inclui um cache L2, que em uma modalidade pode ser um cache de oito vias, 512 K, no qual cache instruções e dados.
ARQUITETURAS DE PROCESSADOR EXEMPLIFICADORAS
[129] A Figura 14 é um diagrama de blocos de um processador 1400 que pode ter mais de um número, pode ter um controlador de memória integrada, e pode ter gráfico integrado de acordo com modalidades da invenção. Os quadrados de linha cheia na Figura 14 ilustram um processador 1400 com um núcleo único 1402A, um agente de sistema 1410, um conjunto de uma ou mais unidades de controlador de barramento 1416, enquanto a adição opcional dos quadrados de linha tracejada ilustra um processador alternativo 1400 com múltiplos núcleos 1402A-N, um conjunto de uma ou mais unidade (ou unidades) de controlador de memória integrada 1414 na unidade de agente de sistema 1410 e lógica de propósito especial 1408.
[130] Desse modo, implementações diferentes do processador 1400 podem incluir: 1) uma CPU com a lógica de propósito especial 1408 sendo lógica gráfica e/ou científica integrada (capacidade de transmissão) (que pode incluir um ou mais núcleos) e os núcleos 1402A-N sendo um ou mais núcleos de propósito geral (por exemplo, núcleos em ordem de propósito geral, núcleos fora de ordem de propósito geral, uma combinação dos dois); 2) um coprocessador com os núcleos 1402A-N sendo um número grande de núcleos de propósito especial destinados principalmente a gráfico e/ou científico (capacidade de transmissão); 3) um coprocessador com os núcleos 1402A-N sendo um número grande de núcleos em ordem de propósito geral; e 4) os núcleos 1402A-N representando qualquer número de núcleos desagregados com um bloco de entrada/saída (I/O) separado. Desse modo, o processador 1400 pode ser um processador de propósito geral, processadores de servidor ou elementos de processamento para uso em um ambiente de servidor, coprocessadores (por exemplo, coprocessadores de segurança) processadores MIC de capacidade de transmissão alta, GPGPUs, aceleradores (como, por exemplo, aceleradores gráficos ou unidades de processamento de sinais digitais (DSP), aceleradores criptográficos, aceleradores de função fixa, aceleradores de aprendizagem por máquina, aceleradores de funcionamento em rede, ou aceleradores de visão de computador), disposições de porta programável em campo, ou qualquer outro processador ou dispositivo de processamento. O processador pode ser implementado em um ou mais chips. O processador 1400 pode fazer parte de e/ou pode ser implementado em um ou mais substratos utilizando qualquer de um número de tecnologias de processo, como, por exemplo, BiCMOS, CMOS ou NMOS.
[131] A hierarquia de memória inclui um ou mais níveis de cache nos núcleos, um conjunto ou uma ou mais unidades de cache compartilhadas 1406, e memória externa (não mostrada) acoplada ao conjunto de unidades de controlador de memória integrada
1414. O conjunto de unidades cache compartilhadas 1406 pode incluir um ou mais caches de nível médio, como nível 2 (L2), nível 3 (L3), nível 4 (L4) ou outros níveis de cache, um cache de último nível (LLC), e/ou combinações dos mesmos. Embora em uma modalidade uma unidade de interconexão baseada em anel 1412 interconecte a lógica gráfica integrada 1408 (lógica gráfica integrada 1408 é um exemplo de e também é mencionada na presente invenção como lógica de propósito especial), o conjunto de unidades cache compartilhadas 1406, e a unidade de agente de sistema 1410/unidade (ou unidades) de controlador de memória integrada 1414, modalidades alternativas podem usar qualquer número de técnicas bem conhecidas para interconectar tais unidades. Em uma modalidade, a coerência é mantida entre uma ou mais unidades cache 1406 e núcleos 1402-A-N.
[132] Em algumas modalidades, um ou mais dos núcleos 1402A- N são capazes de múltiplas linhas de execução. O agente de sistema 1410 inclui aqueles componentes coordenando e operando núcleos 1402A-N. A unidade de agente de sistema 1410 pode incluir, por exemplo, una unidade de controle de energia (PCU) e uma unidade de exibição. A PCU pode ser ou inclui lógica e componentes necessários para regular o estado de energia dos núcleos 1402A-N e a lógica gráfica integrada 1408. A unidade de exibição é para acionar um ou mais displays externamente conectados.
[133] Os núcleos 1402A-N podem ser homogêneos ou heterogêneos em termos de conjunto de instruções de arquitetura; isto é, dois ou mais dos núcleos 1402A-N podem ser capazes de execução do mesmo conjunto de instruções, enquanto outros podem ser capazes de executar somente um subconjunto daquele conjunto de instruções ou um conjunto de instruções diferente.
[134] A Figura 15 é um diagrama de blocos de um complexo da unidade de processamento central (CPU) ilustrativo que pode ser incluído em um processador de acordo com modalidades da invenção. Em uma modalidade, o cache L3 é um cache de 16 vias 8 MB dividido através de um módulo de quatro núcleos (mencionado como um complexo CPU ou CCX), fornecendo uma “fatia” de 2 MB de cache L3 por núcleo. Entretanto, as fatias de cache L3 em um CCX são implementadas de modo que o cache L3 seja um cache compartilhado. Múltiplos CCXs podem ser incluídos em um processador único (por exemplo, dois CCXs formam um cache L3 de 16 MB). Os caches de 8 MB em cada CCX são separados, de modo atuam como um cache de último nível por módulo de quatro núcleos com os ganchos apropriados no outro cache L3 para determinar se os dados são necessários (os protocolos envolvidos no design de cache L3 permitem que cada núcleo acesse o cache L3 de cada outro núcleo). Desse modo, esses caches L1, L2 e L3 são caches coerentes, com as fatias de cache L3 em um CCX e entre CCXs sendo conectadas por uma interconexão coerente de cache (também mencionada como um pano corrente de cache).
[135] A Figura 16 é um diagrama de blocos de uma hierarquia de cache ilustrativa que pode ser incluída em um processador de acordo com modalidades da invenção. Na Figura 16, a hierarquia de cache 1600 inclui i-cache L1 1610A e d-cache L1 1610B (coletivamente, cache L1 1610), cache de dados e instrução L2 1620, e cache de dados e instrução nível 3 (L3)
1630. Em uma modalidade, ambos os cache L1 1610 e cache L2 1620 são caches de escrever de volta locais/privados, enquanto o cache L3 1630 é um cache de vítima. Em uma modalidade, i- cache L1 1610A é um cache de 4 bias de 64 KB, d-cache L1 1610B é um cache de 8 vias de 32 KB, cache L2 1620 é um cache de 8 vias de 512 KB, e cache nível 3 (L3) 1630 é um cache de 16 vias de 8 MB.
ARQUITETURAS DE COMPUTADOR EXEMPLIFICADORAS
[136] As Figuras 17-21 são diagramas de blocos de arquiteturas de computador exemplificadoras. Outros designs e configurações de sistema conhecidos na técnica para computadores do tipo laptop, desktops, Pcs portáteis, assistentes pessoais digitais, estações de trabalho de engenharia, servidores, dispositivos de rede, hubs de rede, comutadores, processadores incorporados, processadores de sinais digitas (DSPs), processadores de propósito geral, processadores de servidor ou elementos de processamento para uso em um ambiente de servidor, coprocessadores (por exemplo, coprocessadores de garantia) processadores MIC de capacidade de transmissão alta, GPGPUs, aceleradores (como, por exemplo, aceleradores gráficos, aceleradores criptográficos, aceleradores de função fixa, aceleradores de aprendizagem por máquina, aceleradores de funcionamento em rede ou aceleradores de visão de computador), disposições de porta programável em campo, ou qualquer outro processador ou dispositivo de processamento, dispositivos gráficos, dispositivos de videogame, decodificadores, micro controladores, telefones celulares, tocadores de mídia portáteis, dispositivos portáteis, e vários outros dispositivos eletrônicos, também são adequados. Em geral, uma imensa variedade de sistemas ou dispositivos eletrônicos capazes de incorporar um processador e/ou outra lógica de execução como revelado na presente invenção é em geral adequada.
[137] Com referência agora à Figura 17, é mostrado um diagrama de blocos de um sistema 1700 de acordo com uma modalidade da presente invenção. O sistema 1700 pode incluir um ou mais processadores 1710, 1715, que são acoplados a um hub de controlador 1720. Em uma modalidade, o hub de controlador 1720 inclui um hub de controlador de memória gráfica (GMCH) 1790 e um Hub de entrada/saída (IOH) 1750 (que pode estar em chips separados); o GMCH 1790 inclui controladores gráficos e de memória aos quais são acoplados memória 1740 e um coprocessador 1745; o IOH 1750 acopla dispositivos I/O) 1760 ao GMCH 1790. Alternativamente, um ou ambos os controladores gráficos e de memória são integrados no processador (como descrito na presente invenção), a memória 1740 e o coprocessador 1745 são acoplados diretamente ao processador 1710, e o hub de controlador 1720 em um chip único com o IOH 1750.
[138] A natureza opcional de processadores adicionais 1715 é indicada na Figura 17 com linhas interrompidas. Cada processador 1710, 1715 pode incluir um ou mais dos núcleos de processamento descritos na presente invenção e pode ser alguma versão do processador 1400.
[139] A memória 1740 pode ser, por exemplo, memória de acesso aleatório dinâmica (DRAM), memória de mudança de fase (PCM) ou uma combinação das duas. Para pelo menos uma modalidade, o hub de controlador 1720 comunica com o processador (ou processadores) 1710, 1715 através de um barramento de multi-drop, como um barramento de lado frontal (FSB), interface de ponto a ponto como Interconexão de QuickPath (QPI) ou conexão similar 1795.
[140] Em uma modalidade, o coprocessador 1745 é um processador de propósito especial (incluindo, por exemplo, processadores de propósito geral, processadores de servidor ou elementos de processamento para uso em um ambiente de servidor, coprocessadores como coprocessadores de segurança, processadores MIC de capacidade de transmissão alta, GPGPUs, aceleradores, como, por exemplo, aceleradores gráficos ou unidades de processamento de sinais digitais (DSP), aceleradores criptográficos, aceleradores de função fixa, aceleradores de aprendizagem por máquina, aceleradores de funcionamento em rede, ou aceleradores de visão de computador), disposições de porta programável em campo ou qualquer outro processador ou dispositivo de processamento). Em uma modalidade, o hub de controlador 1720 pode incluir um acelerador gráfico integrado.
[141] Pode haver uma variedade de diferenças entre os recursos físicos 1710, 1715 em termos de um espectro de métrica de mérito incluindo características de arquitetura, microarquitetura, térmica, consumo de energia e similares.
[142] Em uma modalidade, o processador 1710 executa instruções que controlam operações de processamento de dados de um tipo geral. Instruções de coprocessador podem ser incorporadas nas instruções. O processador 1710 reconhece essas instruções de coprocessador como sendo de um tipo que deve ser executado pelo coprocessador 1745, anexado. Por conseguinte, o processador 1710 emite essas instruções de coprocessador (ou sinais de controle representando instruções de coprocessador) em um barramento de coprocessador ou outra interconexão para o coprocessador 1745. O coprocessador (ou processadores) 1745 aceita e executa as instruções recebidas do coprocessador.
[143] Com referência agora à Figura 18, é mostrado um diagrama de blocos de um primeiro sistema exemplificador mais específico 1800 de acordo com uma modalidade da presente invenção. Como mostrado na Figura 18, o sistema de multiprocessador 1800 é um sistema de interconexão de ponto a ponto, e inclui um primeiro processador 1870 e um segundo processador 1880 acoplado através de uma interconexão de ponto a ponto 1850. Cada dos processadores 1870 e 1880 pode ser alguma versão do processador 1400. Em uma modalidade da invenção, processadores 1870 e 1880 são respectivamente processadores 1710 e 1715, enquanto o coprocessador 1838 é coprocessador 1745. Em outra modalidade, os processadores 1870 e 1880 são respectivamente o coprocessador 1745 do processador
1710.
[144] Os processadores 1870 e 1880 são mostrados incluindo unidades de controlador de memória integrada (IMC) 1872 e 1882, respectivamente. O processador 1870 inclui também como parte das interfaces de ponto a ponto (P-P) 1876 e 1878, da sua unidade de controlador de barramento; similarmente, o segundo processador 1880 inclui interfaces P-P 1886 e 1888. Os processadores 1870, 1880 podem trocar informações através de uma interface de ponto a ponto (P-P) 1850 utilizando circuitos de interface P-P 1878, 1888. Como mostrado na Figura 18, os IMCs 1872 e 1882 acoplam os processadores a respectivas memórias, a saber, uma memória 1832 e uma memória 1834, que podem ser porções da memória principal localmente fixada nos respectivos processadores.
[145] Os processadores 1870, 1880 podem trocar, individualmente informações com um conjunto de chips 1890 através de interfaces P-P individuais 1852, 1854 utilizando circuitos de interface de ponto a ponto 1876, 1894, 1886, 1898.
O conjunto de chips 1890 pode trocar, opcionalmente informações com o coprocessador 1838 através de uma interface de alto desempenho 1892. Em uma modalidade, o coprocessador 1838 é um processador de propósito especial, como, por exemplo, um processador MIC de capacidade de transmissão alta, um processador de comunicação ou rede, motor de compressão, processador gráfico, GPGPU, processador incorporado ou similar.
[146] Um cache compartilhado (não mostrado) pode ser incluído em qualquer processador ou fora dos dois processadores, ainda assim conectado aos processadores através da interconexão P-P, de modo que as informações de cache local de qualquer um ou ambos os processadores podem ser armazenadas no cache compartilhado se um processador for colocado em um modo de baixa energia.
[147] O conjunto de chips 1890 pode ser acoplado a um primeiro barramento 1816 através de uma interface 1896. Em uma modalidade, o primeiro barramento 1816 pode ser um barramento de Interconexão de Componente periférico (PCI), ou um barramento como um barramento de PCI Express ou outro barramento de interconexão de I/O de terceira geração, embora o escopo da presente invenção não seja assim limitado.
[148] Como mostrado na Figura 18, vários dispositivos I/O 1814 podem ser acoplados ao primeiro barramento 1816, juntamente com uma ponte de barramento 1818 que acopla primeiro barramento 1816 a um segundo barramento 1820. Em uma modalidade, um ou mais processador (ou processadores) adicional 1815, como processadores de propósito geral, processadores de servidor ou elementos de processamento para uso em um ambiente de servidor, coprocessadores (por exemplo, coprocessadores de segurança), processadores de MIC capacidade de transmissão alta, GPGPUs, aceleradores (como, por exemplo, aceleradores gráficos ou unidades de processamento de sinais digitais (DSP), aceleradores criptográficos, aceleradores de função fixa, aceleradores de aprendizagem por máquina, aceleradores de funcionamento em rede, ou aceleradores de visão de computador), disposições de porta programável em campo, ou qualquer outro processador ou dispositivo de processamento, são acoplados ao primeiro barramento 1816. Em uma modalidade, o segundo barramento 1820 pode ser um barramento de contagem de pino baixo (LPC). Vários dispositivos podem ser acoplados a um segundo barramento 1820 incluindo, por exemplo, um teclado e/ou mouse 1822, dispositivos de comunicação 1827 e uma unidade de armazenamento 1828 como uma unidade de disco ou outro dispositivo de armazenamento de massa que pode incluir instruções/códigos e dados 1830, em uma modalidade. Adicionalmente, uma I/O e áudio 1824 pode ser acoplada ao segundo barramento 1820. Observe que outras arquiteturas são possíveis. Por exemplo, ao invés da arquitetura de ponto a ponto da Figura 18, um sistema pode implementar um barramento de multi-drop ou outra tal arquitetura.
[149] Com referência agora à Figura 19, é mostrado um diagrama de blocos de um segundo sistema exemplificador mais específico 1900 de acordo com uma modalidade da presente invenção. Elementos similares nas Figuras 18 e 19 contêm numerais de referência similares, e certos aspectos da Figura 18 foram omitidos da Figura 19 para evitar obscurecer outros aspectos da Figura 19.
[150] A Figura 19 ilustra que os processadores 1870, 1880 podem incluir memória e lógica de controle de I/O (“CL”) 1872 e 1882 respectivamente. Desse modo, a CL 1872, 1882 inclui unidades de controlador de memória integrada e inclui lógica de controle de I/O. A Figura 19 ilustra que não apenas são as memórias 1832, 1834 acopladas à CL 1872, 1882, mas também que os dispositivos de I/O 1914 são também acoplados à lógica de controle 1872, 1882. Os dispositivos I/O de legado 1915 são acoplados ao conjunto de chips 1890.
[151] Com referência agora à Figura 20, é mostrado um diagrama de blocos de um SoC 2000 de acordo com uma modalidade da presente invenção. Elementos similares na Figura 14 contêm numerais de referência similares. Também quadrados de linha tracejada são aspectos opcionais em SoCs mais avançados. Na Figura 20, uma unidade (ou unidades) de interconexão 2002 é acoplada a: um processador de aplicação 2010 que inclui um conjunto de um ou mais núcleos 1402A-N, que inclui unidades de cache 1404A-N, e unidade (ou unidades) de cache compartilhada 1406; uma unidade de agente de sistema 1410; uma unidade (ou unidades) de controlador de barramento 1416; uma unidade (ou unidades) de controlador de memória integrada 1414; um conjunto de um ou mais coprocessadores 2020 que podem incluir lógica gráfica integrada, um processador de imagem, um processador de áudio e um processador de vídeo, processadores de propósito geral, processadores de servidor ou elementos de processamento para uso em um ambiente de servidor, coprocessadores de segurança, processadores MIC de capacidade de transmissão alta, GPGPUs, aceleradores (como, por exemplo, aceleradores gráficos ou unidades de processamento de sinais digitais (DSP), aceleradores criptográficos, aceleradores de função fixa, aceleradores de aprendizagem por máquina, aceleradores de funcionamento em rede, ou aceleradores de visão de computador), disposições de porta programável em campo, ou qualquer outro processador ou dispositivo de processamento; uma unidade de memória de acesso aleatório estática (SRAM) 2030; uma unidade de acesso de memória direta (DMA) 2032; e uma unidade de exibição 2040 para acoplamento a um ou mais displays externos. Em uma modalidade, o coprocessador (ou coprocessadores) 2020 inclui um processador de propósito especial, como, por exemplo, um processador de comunicação ou rede, motor de compressão, GPGPU, um processador MIC de capacidade de transmissão alta, processador incorporado ou similar.
[152] Com referência agora à Figura 21, é mostrado um diagrama de blocos de um SoC 2000 de acordo com uma modalidade da presente invenção.
COMENTÁRIOS DE CONCLUSÃO
[153] As modalidades dos mecanismos revelados na presente invenção podem ser implementadas em hardware, software, firmware ou uma combinação de tais abordagens de implementação. As modalidades da invenção podem ser implementadas como programas de computador ou código de programa executando em sistemas programáveis compreendendo pelo menos um processador, incluindo, por exemplo, processadores de propósito geral, processadores de servidor ou elementos de processamento para uso em um ambiente de servidor, coprocessadores (por exemplo, coprocessadores de segurança) processadores MIC de capacidade de transmissão alta, GPGPUs, aceleradores (como, por exemplo, aceleradores gráficos ou unidades de processamento de sinais digitais (DSP), aceleradores criptográficos, aceleradores de função fixa, aceleradores de aprendizagem por máquina, aceleradores de funcionamento em rede, ou aceleradores de visão de computador), disposições de porta programável em campo, ou qualquer outro processador ou dispositivo de processamento; um sistema de armazenamento (incluindo memória volátil e não volátil e/ou elementos de armazenamento), pelo menos um dispositivo de entrada e pelo menos um dispositivo de saída.
[154] Código e programa, como código 1830 ilustrado na Figura 18, pode ser aplicado a instruções de entrada para executar as funções descritas na presente invenção e gerar informações de saída. As informações de saída podem ser aplicadas a um ou mais dispositivos de saída, em modo conhecido. Para fins desse pedido, um sistema de processamento inclui qualquer sistema que tenha um processador, como, por exemplo, um processador de sinais digitais (DSP), um microcontrolador, um circuito integrado de aplicação específica (ASIC) ou um microprocessador.
[155] O código de programa pode ser implementado em uma linguagem de programação orientada para objeto ou de procedimento de alto nível para comunicar com um sistema de processamento. O código de programa pode ser também implementado em linguagem de máquina ou montagem, se desejado. Na realidade, os mecanismos descritos na presente invenção não são limitados em escopo a qualquer linguagem de programação específica. Em qualquer caso, a linguagem pode ser uma linguagem compilada ou interpretada.
[156] Um ou mais aspectos de pelo menos uma modalidade podem ser implementados por instruções representativas armazenadas em uma mídia legível por máquina que representa várias lógicas no processador, que quando lidas por uma máquina fazem com que a máquina fabrique lógica para executar as técnicas descritas na presente invenção. Tais representações, conhecidas como “núcleos IP” podem ser armazenadas em uma mídia legível por máquina, tangível e fornecida a vários clientes ou instalações de fabricação para carregar nas máquinas de fabricação que na realidade fazem a lógica ou processador.
[157] Tal mídia de armazenamento legível por máquina pode incluir, sem limitação, disposições tangíveis, não transitórias de artigos fabricados ou formados por uma máquina ou dispositivo, incluindo mídia de armazenamento como discos rígidos, qualquer outro tipo de disco incluindo discos flexíveis, discos óticos, memórias somente de leitura de disco compacto (CD-ROMs), regraváveis de disco compacto(CD-RWs), e discos magneto-óticos, dispositivos semicondutores como memórias somente de leitura (ROMs), memórias de acesso aleatório (RAMs) como memórias de acesso aleatório dinâmicas (DRAMs), memórias de acesso aleatório estáticas (SRAMs), memórias somente de leitura programáveis apagáveis (EPROMs), memórias flash, memórias somente de leitura programáveis eletronicamente apagáveis (EEPROMs), memória de mudança de fase (PCM) cartões magnéticos ou óticos, ou qualquer outro tipo de mídia adequado para armazenamento de instruções eletrônicas.
[158] Por conseguinte, as modalidades da invenção incluem também mídia legível por máquina tangível não transitória contendo instruções ou contendo dados de design, como Linguagem de Descrição de Hardware (HDL), que define estruturas, circuitos, aparelhos, processadores e/ou aspectos de sistema descritos na presente invenção. Tais modalidades também podem ser mencionadas como produtos de programa.
[159] As instruções a serem executadas por um núcleo de processador de acordo com modalidades a invenção podem ser incorporadas em um “formato de instrução favorável a vetor genérico” que é detalhado abaixo. Em outras modalidades, tal formato não é utilizado e outro formato de instrução é utilizado, entretanto, a descrição abaixo dos registros de máscara de gravação, várias transformadas de dados (swizzle, broadcast etc.), endereçamento etc., é em geral aplicável à descrição das modalidades da instrução (ou instruções) acima.
Adicionalmente, sistemas, arquiteturas e pipelines exemplificadores são detalhadas abaixo. As instruções podem ser executadas em tais sistemas, arquiteturas e pipelines, porém não são limitadas àquelas detalhadas.
[160] Em alguns casos, um conversor de instruções pode ser utilizado para converter uma instrução a partir de um conjunto de instruções de fonte em um conjunto de instruções alvo. Por exemplo, o conversor de instruções pode transladar (por exemplo, utilizando translação binária estática, translação binária dinâmica incluindo compilação dinâmica), morf., emular ou de outro modo converter uma instrução em uma ou mais outras instruções a serem processadas pelo núcleo. O conversor de instruções pode ser implementado em software, hardware, firmware ou uma combinação dos mesmos. O conversor de instruções pode estar no processador, fora do processador ou parte no e parte fora do processador.
[161] A Figura 22 é um diagrama de blocos contrastando o uso de um conversor de instrução de software para converter instruções binárias em um conjunto de instruções de fonte para instruções binárias em um conjunto de instruções alvo de acordo com modalidades da invenção. Na modalidade ilustrada, o conversor de instruções é um conversor de instruções de software, embora alternativamente o conversor de instruções possa ser implementado em software, firmware, hardware ou várias combinações dos mesmos. A Figura 22 mostra um programa em uma linguagem de alto nível 2202 pode ser compilado utilizando um compilador x86 2204 para gerar código binário x86 2206 que pode ser nativamente executado por um processador com pelo menos um núcleo de conjunto de instruções x86 2216. O processador com pelo menos um núcleo de conjunto de instruções x86 2216 representa qualquer processador que pode executar substancialmente as mesmas funções que um processador Intel com pelo menos um núcleo de conjunto de instruções x86 por executar compativelmente ou de outro modo processar (1) uma porção substancial do conjunto de instruções do núcleo de conjunto de instruções x86 ou (2) versões de código de objeto de aplicações ou outro software direcionado para rodar em um processador Intel com pelo menos um núcleo de conjunto de instruções x86, para obter substancialmente o mesmo resultado que um processador Intel com pelo menos um núcleo de conjunto de instruções x86. O compilador x86 2204 representa um compilador que é operável para gerar código binário x86 2206 (por exemplo, código de objeto) que pode, com ou sem processamento de ligação adicional, ser executado no processador com pelo menos um núcleo de conjunto de instruções x86 2216. Similarmente, a Figura 22 mostra o programa na linguagem de alto nível 2202 pode ser compilado utilizando um compilador de conjunto de instruções alternativo 2208 para gerar código binário de conjunto de instruções alternativo 2210 que pode ser nativamente executado por um processador sem pelo menos um núcleo de conjunto de instruções x86 2214 (por exemplo, um processador com núcleos que executam o conjunto de instruções MIPS da MIPS Technologies de Sunnyvale, CA e/ou que executam o conjunto de instruções ARM da ARM Holdings de Sunnyvale, CA). O conversor de instruções 2212 é utilizado para converter o código binário x86 2206 em código que pode ser nativamente executado pelo processador sem um núcleo de conjunto de instruções x86 2214. Esse código convertido provavelmente não deve ser igual ao código binário de conjunto de instruções alternativas 2210 porque um conversor de instruções capaz disso é difícil de fazer; entretanto, o código convertido realizará a operação geral e será composto de instruções a partir do conjunto de instruções alternativas.
Desse modo, o conversor de instruções 2212 representa software,
firmware, hardware ou uma combinação dos mesmos que, através de emulação, simulação ou qualquer outro processo, permite que um processador ou outro dispositivo eletrônico que não tem um núcleo ou processador de conjunto de instruções x86 execute o código binário x86 2206.
[162] As operações em fluxogramas podem ter sido descritas com referência a modalidades exemplificadoras de outras Figuras. Entretanto, deve ser entendido que as operações dos fluxogramas podem ser executadas por modalidades da invenção diferente daquelas discutidas com referência a outras Figuras, e as modalidades da invenção discutidas como referência a outras Figuras podem executar operações diferentes daquelas discutidas com referência a fluxogramas. Adicionalmente, embora os fluxogramas nas Figuras mostrem uma ordem de operações específica executadas por certas modalidades da invenção, deve ser entendido que tal ordem é exemplificadora (por exemplo, as modalidades alternativas podem executar as operações em uma ordem diferente, combinar certas operações, sobrepor certas operações etc.).
[163] Uma ou mais partes de modalidades da invenção podem ser implementadas utilizando combinações diferentes de software, firmware e/ou hardware. As modalidades podem ser implementadas utilizando um dispositivo eletrônico que armazena e transmite (internamente e/ou com outros dispositivos eletrônicos através de uma rede) código (que é composto de instruções de software e que é às vezes mencionado como código de programa de computador ou um programa de computador) e/ou dados utilizando mídia legível por máquina (também chamada mídia legível por computador), como mídia de armazenamento legível por máquina (por exemplo, discos magnéticos, discos óticos, memória somente de leitura (ROM),
dispositivos de memória flash, memória de mudança de fase) e mídia de transmissão legível por máquina (também chamada uma portadora) (por exemplo, elétrica, ótica, rádio, acústica ou outra forma de sinais propagados - como ondas portadoras, sinais infravermelhos). Desse modo, um dispositivo eletrônico (por exemplo, um computador) pode incluir hardware e software, como um conjunto de um ou mais processadores acoplados a uma ou mais mídia de armazenamento legível por máquina para armazenar código para execução no conjunto de processadores e/ou armazenar dados. Por exemplo, um dispositivo eletrônico pode incluir memória não volátil contendo o código uma vez que a memória não volátil pode persistir código/dados mesmo quando o dispositivo eletrônico é desligado (quando energia é retirada), e enquanto o dispositivo eletrônico é ligado aquela parte do código que deve ser executada pelo processador (ou processadores) daquele dispositivo eletrônico é tipicamente copiado a partir da memória não volátil mais lenta em memória volátil (por exemplo, memória de acesso aleatório dinâmica (DRAM), memória de acesso aleatório estática (SRAM)) daquele dispositivo eletrônico. Dispositivos eletrônicos típicos incluem também um conjunto ou uma ou mais interfaces de rede física para estabelecer conexões de rede (para transmitir e/ou receber código e/ou dados utilizando sinais de propagação) com outros dispositivos eletrônicos.
[164] Embora a invenção tenha sido descrita em termos de várias modalidades, aqueles versados na técnica reconhecerão que a invenção não é limitada às modalidades descritas, pode ser posta em prática com modificação e alteração compreendidas no espírito e escopo das reivindicações apensas. A descrição deve ser considerada, desse modo, como ilustrativa ao invés de limitadora.

Claims (20)

REIVINDICAÇÕES
1. Processador para defesa contra a análise especulativa de canal lateral caracterizado pelo fato de que compreende: um decodificador para decodificar uma instrução, sendo que a instrução deve especificar um primeiro endereço associado a um objeto de dados, o primeiro endereço tendo uma primeira marca de memória; um cache; conjunto de circuitos de translação de endereço para transladar o primeiro endereço em um segundo endereço, sendo que o segundo endereço deve identificar um local de memória do objeto de dados; um comparador para comparar a primeira marca de memória e uma segunda marca de memória associada ao segundo endereço; um controlador de cache para detectar uma falta de cache associada ao local de memória; e um controlador de memória para, em resposta à detecção pelo comparador de uma combinação entre a primeira marca de memória e a segunda marca de memória e à detecção pelo controlador de cache da falta de cache, carregar o objeto de dados a partir do local de memória no cache.
2. Processador, de acordo com a reivindicação 1, caracterizado pelo fato de que o primeiro endereço é um endereço virtual e o segundo endereço é um endereço físico.
3. Processador, de acordo com a reivindicação 1, caracterizado pelo fato de que o controlador de memória também deve evitar carregar uma linha de cache correspondente ao local de memória até que o comparador tenha detectado a combinação entre a primeira marca de memória e a segunda marca de memória.
4. Processador, de acordo com a reivindicação 1, caracterizado pelo fato de que o controlador de memória também, em resposta à detecção pelo comparador de um descombinamento entre a primeira marca de memória e a segunda marca de memória, deve carregar dados não indicativos do objeto de dados em uma linha de cache correspondente ao local de memória.
5. Processador, de acordo com a reivindicação 1, caracterizado pelo fato de que compreende adicionalmente conjunto de circuitos de segurança de ponteiro para fornecer a primeira marca de memória.
6. Processador, de acordo com a reivindicação 1, caracterizado pelo fato de que compreende adicionalmente conjunto de circuitos de criptografia para assegurar de modo criptográfico o objeto de dados pelo menos parcialmente com base na primeira marca de memória.
7. Processador, de acordo com a reivindicação 1, caracterizado pelo fato de que a primeira marca de memória inclui uma marca de identificação para identificar um tipo, uma função, um local de memória ou um uso para o objeto de dados.
8. Processador, de acordo com a reivindicação 6, caracterizado pelo fato de que o conjunto de circuitos de criptografia usa pelo menos uma porção da marca de memória para pelo menos parcialmente definir uma entrada de otimização em um algoritmo de criptografia.
9. Processador, de acordo com a reivindicação 6, caracterizado pelo fato de que a primeira marca de memória inclui uma marca de criptografia, em que o conjunto de circuitos de criptografia deve usar a marca de criptografia para identificar uma de uma pluralidade de chaves de criptografia.
10. Processador, de acordo com a reivindicação 1, caracterizado pelo fato de que a primeira marca de memória inclui uma marca de objeto pequeno para indicar se uma linha de cache associada ao local de memória deve incluir uma pluralidade de objetos de dados.
11. Processador, de acordo com a reivindicação 10, caracterizado pelo fato de que a marca de objeto pequeno deve habilitar a granularidade de sublinha de cache de marcação de memória.
12. Processador, de acordo com a reivindicação 1, caracterizado pelo fato de que compreende adicionalmente conjunto de circuitos de verificação de integridade para gerar um valor de verificação de integridade pelo menos parcialmente com base no primeiro endereço e um valor criptografado do objeto de dados.
13. Processador, de acordo com a reivindicação 12, caracterizado pelo fato de que compreende adicionalmente conjunto de circuitos de segurança de ponteiro para detectar adulteração com o primeiro endereço pelo menos parcialmente com base nos valores de verificação de integridade.
14. Processador para defesa contra a análise especulativa de canal lateral caracterizado pelo fato de que compreende: um decodificador para decodificar uma primeira instrução, sendo que a primeira instrução deve alocar uma região de memória em um programa de software; uma unidade de execução para executar a primeira instrução e a segunda instrução, sendo que a unidade de execução inclui: conjunto de circuitos de regra de faixa para determinar uma faixa válida para a região de memória; conjunto de circuitos de ajuste de endereço para determinar um primeiro número de bits de endereço a serem usados pelo programa de software para manipular um endereço dentro da faixa válida e um segundo número de bits de endereço para incluir uma marca de memória para indicar permissão de acesso; e conjunto de circuitos de criptografia para criptografar pelo menos uma porção do endereço e da marca de memória para gerar um endereço criptografado a ser retornado para o programa de software.
15. Processador, de acordo com a reivindicação 14, caracterizado pelo fato de que o decodificador também deve decodificar uma segunda instrução, sendo que a segunda instrução deve especificar um primeiro endereço criptografado associado a um objeto de dados, o processador compreende adicionalmente conjunto de circuitos de descriptografia para descriptografar o primeiro endereço criptografado para gerar um endereço descriptografado e uma marca de memória descriptografada.
16. Método para defesa contra a análise especulativa de canal lateral caracterizado pelo fato de que compreende: decodificar uma instrução, sendo que a instrução deve especificar um primeiro endereço associado a um objeto de dados, o primeiro endereço tendo uma primeira marca de memória; transladar o primeiro endereço em um segundo endereço, sendo que o segundo endereço deve identificar um local de memória do objeto de dados; comparar a primeira marca de memória e uma segunda marca de memória associada ao segundo endereço; detectar uma falta de cache associada ao local de memória; e carregar, em resposta à detecção de uma combinação entre a primeira marca de memória e a segunda marca de memória e à detecção da falta de cache, o objeto de dados a partir do local de memória em um cache.
17. Método, de acordo com a reivindicação 16, caracterizado pelo fato de que o primeiro endereço é um endereço virtual e o segundo endereço é um endereço físico.
18. Método, de acordo com a reivindicação 16, caracterizado pelo fato de que compreende adicionalmente evitar carregar uma linha de cache correspondente ao local de memória até que a combinação seja detectada.
19. Método, de acordo com a reivindicação 16, caracterizado pelo fato de que compreende adicionalmente carregar, em resposta à detecção de um descombinamento entre a primeira marca de memória e a segunda marca de memória,
dados não indicativos do objeto de dados em uma linha de cache correspondente ao local de memória.
20. Método, de acordo com a reivindicação 16, caracterizado pelo fato de que compreende adicionalmente descriptografar um endereço criptografado para fornecer o primeiro endereço e a primeira marca de memória.
BR112021010475-5A 2018-12-28 2019-12-02 Defesa contra análise especulativa de canal lateral de um sistema de computador BR112021010475A2 (pt)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US16/236,117 US11010067B2 (en) 2018-12-28 2018-12-28 Defense against speculative side-channel analysis of a computer system
US16/236/117 2018-12-28
PCT/US2019/063994 WO2020139517A1 (en) 2018-12-28 2019-12-02 Defense against speculative side-channel analysis of a computer system

Publications (1)

Publication Number Publication Date
BR112021010475A2 true BR112021010475A2 (pt) 2021-08-24

Family

ID=71122930

Family Applications (1)

Application Number Title Priority Date Filing Date
BR112021010475-5A BR112021010475A2 (pt) 2018-12-28 2019-12-02 Defesa contra análise especulativa de canal lateral de um sistema de computador

Country Status (6)

Country Link
US (2) US11010067B2 (pt)
EP (1) EP3903214A4 (pt)
KR (1) KR20210097021A (pt)
CN (1) CN113260994A (pt)
BR (1) BR112021010475A2 (pt)
WO (1) WO2020139517A1 (pt)

Families Citing this family (25)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11635965B2 (en) 2018-10-31 2023-04-25 Intel Corporation Apparatuses and methods for speculative execution side channel mitigation
US11023379B2 (en) * 2019-02-13 2021-06-01 Google Llc Low-power cached ambient computing
CN112148665B (zh) * 2019-06-28 2024-01-09 深圳市中兴微电子技术有限公司 缓存的分配方法及装置
US11947663B2 (en) * 2019-09-24 2024-04-02 The Trustees Of Columbia University In The City Of New York Control flow protection based on phantom addressing
CN112783811B (zh) * 2019-11-04 2023-08-18 富泰华工业(深圳)有限公司 微控制器架构及架构内数据读取方法
US11029957B1 (en) * 2020-03-27 2021-06-08 Intel Corporation Apparatuses, methods, and systems for instructions to compartmentalize code
US11374744B2 (en) * 2020-05-15 2022-06-28 The Boeing Company Threshold scheme enabled symmetric key member deletion
US11797673B2 (en) 2020-08-27 2023-10-24 Ventana Micro Systems Inc. Processor that mitigates side channel attacks by expeditiously initiating flushing of instructions dependent upon a load instruction that causes a need for an architectural exception
US11868469B2 (en) 2020-08-27 2024-01-09 Ventana Micro Systems Inc. Processor that mitigates side channel attacks by preventing all dependent instructions from consuming architectural register result produced by instruction that causes a need for an architectural exception
US11907369B2 (en) 2020-08-27 2024-02-20 Ventana Micro Systems Inc. Processor that mitigates side channel attacks by preventing cache memory state from being affected by a missing load operation by inhibiting or canceling a fill request of the load operation if an older load generates a need for an architectural exception
US11733972B2 (en) 2020-10-06 2023-08-22 Ventana Micro Systems Inc. Processor that mitigates side channel attacks by providing random load data as a result of execution of a load operation that does not have permission to access a load address
US11907126B2 (en) * 2020-09-25 2024-02-20 Advanced Micro Devices, Inc. Processor with multiple op cache pipelines
US11734426B2 (en) * 2020-10-06 2023-08-22 Ventana Micro Systems Inc. Processor that mitigates side channel attacks by prevents cache line data implicated by a missing load address from being filled into a data cache memory when the load address specifies a location with no valid address translation or no permission to read from the location
US11853424B2 (en) 2020-10-06 2023-12-26 Ventana Micro Systems Inc. Processor that mitigates side channel attacks by refraining from allocating an entry in a data TLB for a missing load address when the load address misses both in a data cache memory and in the data TLB and the load address specifies a location without a valid address translation or without permission to read from the location
US11675899B2 (en) * 2020-12-15 2023-06-13 International Business Machines Corporation Hardware mitigation for Spectre and meltdown-like attacks
US20210117341A1 (en) * 2020-12-26 2021-04-22 Intel Corporation Cache line slot level encryption based on context information
EP4248323A1 (en) * 2021-02-12 2023-09-27 Huawei Technologies Co., Ltd. Low overhead active mitigation of security vulnerabilities by memory tagging
US20220278963A1 (en) * 2021-03-01 2022-09-01 Samsung Electronics Co., Ltd. Storage device, storage system, and method of secure data movement between storage devices
KR20230015636A (ko) 2021-07-23 2023-01-31 주식회사 엘지에너지솔루션 음극 및 이를 포함하는 이차전지
US11556482B1 (en) 2021-09-30 2023-01-17 International Business Machines Corporation Security for address translation services
TWI785952B (zh) * 2021-12-30 2022-12-01 新唐科技股份有限公司 密碼加速器以及加解密運算的差分故障分析方法
CN114968088B (zh) * 2022-04-08 2023-09-05 中移互联网有限公司 文件存储方法、文件读取方法及装置
US11940927B2 (en) 2022-06-14 2024-03-26 Intel Corporation Technologies for memory tagging
US20230418929A1 (en) * 2022-06-28 2023-12-28 Apple Inc. PC-Based Instruction Group Permissions
CN115033188B (zh) * 2022-08-10 2022-11-15 武汉麓谷科技有限公司 一种基于zns固态硬盘的存储硬件加速模块系统

Family Cites Families (32)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5544347A (en) * 1990-09-24 1996-08-06 Emc Corporation Data storage system controlled remote data mirroring with respectively maintained data indices
US5396604A (en) * 1991-07-12 1995-03-07 Hewlett-Packard Company System and method for reducing the penalty associated with data cache misses
US6240183B1 (en) * 1997-06-19 2001-05-29 Brian E. Marchant Security apparatus for data transmission with dynamic random encryption
TW501011B (en) * 1998-05-08 2002-09-01 Koninkl Philips Electronics Nv Data processing circuit with cache memory
US7310706B1 (en) * 2001-06-01 2007-12-18 Mips Technologies, Inc. Random cache line refill
US6976131B2 (en) * 2002-08-23 2005-12-13 Intel Corporation Method and apparatus for shared cache coherency for a chip multiprocessor or multiprocessor system
JP2005539309A (ja) * 2002-09-16 2005-12-22 ティギ・コーポレイション 記憶システムアーキテクチャおよび多重キャッシュ装置
US7624236B2 (en) * 2004-12-27 2009-11-24 Intel Corporation Predictive early write-back of owned cache blocks in a shared memory computer system
US7475321B2 (en) * 2004-12-29 2009-01-06 Intel Corporation Detecting errors in directory entries
JP4912174B2 (ja) * 2007-02-07 2012-04-11 株式会社日立製作所 ストレージシステム及び記憶管理方法
EP2077559B1 (en) * 2007-12-27 2012-11-07 Hagiwara Solutions Co., Ltd. Refresh method of a flash memory
JP2009163542A (ja) * 2008-01-08 2009-07-23 Hitachi Ltd 論理ボリュームに関する設定を制御する制御装置
US20090220088A1 (en) * 2008-02-28 2009-09-03 Lu Charisse Y Autonomic defense for protecting data when data tampering is detected
US8494168B1 (en) * 2008-04-28 2013-07-23 Netapp, Inc. Locating cryptographic keys stored in a cache
WO2010055494A1 (en) * 2008-11-17 2010-05-20 Nxp B.V. A cache management policy and corresponding device
US8185692B2 (en) * 2009-02-09 2012-05-22 Oracle America, Inc. Unified cache structure that facilitates accessing translation table entries
US8443263B2 (en) * 2009-12-30 2013-05-14 Sandisk Technologies Inc. Method and controller for performing a copy-back operation
WO2012015766A2 (en) * 2010-07-28 2012-02-02 Rambus Inc. Cache memory that supports tagless addressing
WO2012127266A1 (en) 2011-03-23 2012-09-27 Sandisk Il Ltd. Storage device and method for updating data in a partition of the storage device
FR2980285B1 (fr) * 2011-09-15 2013-11-15 Maxim Integrated Products Systemes et procedes de gestion de cles cryptographiques dans un microcontroleur securise
US8909942B1 (en) * 2012-03-30 2014-12-09 Western Digital Technologies, Inc. MRAM-based security for data storage systems
US9111621B2 (en) * 2012-06-20 2015-08-18 Pfg Ip Llc Solid state drive memory device comprising secure erase function
US10346095B2 (en) * 2012-08-31 2019-07-09 Sandisk Technologies, Llc Systems, methods, and interfaces for adaptive cache persistence
US9213653B2 (en) * 2013-12-05 2015-12-15 Intel Corporation Memory integrity
US9361182B2 (en) * 2014-05-20 2016-06-07 Transcend Information, Inc. Method for read disturbance management in non-volatile memory devices
US9405920B1 (en) * 2014-05-21 2016-08-02 Amazon Technologies, Inc. Data integrity verification
CN105793832B (zh) * 2014-09-18 2018-12-18 上海兆芯集成电路有限公司 处理器及其操作方法、以及计算机可读存储介质
US10089240B2 (en) * 2014-12-26 2018-10-02 Wisconsin Alumni Research Foundation Cache accessed using virtual addresses
MA41915A (fr) * 2015-04-07 2018-02-13 Benjamin Gittins Unités de requête de transfert de mémoire programmable
US10229051B2 (en) * 2015-12-30 2019-03-12 Samsung Electronics Co., Ltd. Storage device including nonvolatile memory device and controller, operating method of storage device, and method for accessing storage device
US10489303B2 (en) 2016-03-10 2019-11-26 Arm Limited Multi-range lookup in translation lookaside buffer
US10877897B2 (en) * 2018-11-02 2020-12-29 Intel Corporation System, apparatus and method for multi-cacheline small object memory tagging

Also Published As

Publication number Publication date
JP2022514803A (ja) 2022-02-16
US20200210070A1 (en) 2020-07-02
US11733880B2 (en) 2023-08-22
US11010067B2 (en) 2021-05-18
KR20210097021A (ko) 2021-08-06
CN113260994A (zh) 2021-08-13
US20210349634A1 (en) 2021-11-11
EP3903214A1 (en) 2021-11-03
WO2020139517A1 (en) 2020-07-02
EP3903214A4 (en) 2022-09-07

Similar Documents

Publication Publication Date Title
BR112021010475A2 (pt) Defesa contra análise especulativa de canal lateral de um sistema de computador
US11620391B2 (en) Data encryption based on immutable pointers
US11711201B2 (en) Encoded stack pointers
US11625337B2 (en) Encoded pointer based data encryption
US20200257827A1 (en) Memory write for ownership access in a core
CN112149152A (zh) 使用加密的基地址和用于多租户环境的以密码方式的计算
CN112149151A (zh) 用于微架构流水线的存储器加载单元和存储单元的加密计算引擎
US11250165B2 (en) Binding of cryptographic operations to context or speculative execution restrictions
US20220382885A1 (en) Cryptographic computing using encrypted base addresses and used in multi-tenant environments
CN112149114A (zh) 利用用于指示数据类型的隐藏内联元数据的存储器保护
JP7464586B2 (ja) メモリ完全性チェックのための完全性ツリー
US20220121447A1 (en) Hardening cpu predictors with cryptographic computing context information
CN116260606A (zh) 与遗留外围设备的密态计算
US20220100907A1 (en) Cryptographic computing with context information for transient side channel security
JP7497806B2 (ja) コンピュータシステムの投機的サイドチャネル分析に対する防御
US20240104027A1 (en) Temporal information leakage protection mechanism for cryptographic computing
CN116340963A (zh) 用于密态计算的瞬时侧信道感知架构