BR112019013874A2 - identidade de enclave abstrata - Google Patents

identidade de enclave abstrata Download PDF

Info

Publication number
BR112019013874A2
BR112019013874A2 BR112019013874A BR112019013874A BR112019013874A2 BR 112019013874 A2 BR112019013874 A2 BR 112019013874A2 BR 112019013874 A BR112019013874 A BR 112019013874A BR 112019013874 A BR112019013874 A BR 112019013874A BR 112019013874 A2 BR112019013874 A2 BR 112019013874A2
Authority
BR
Brazil
Prior art keywords
enclave
identity
key
data
platform
Prior art date
Application number
BR112019013874A
Other languages
English (en)
Inventor
Costa Manuel
Original Assignee
Microsoft Technology Licensing Llc
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 Microsoft Technology Licensing Llc filed Critical Microsoft Technology Licensing Llc
Publication of BR112019013874A2 publication Critical patent/BR112019013874A2/pt

Links

Classifications

    • 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/52Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow
    • G06F21/53Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow by executing in a restricted environment, e.g. sandbox or secure virtual machine
    • 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/57Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
    • 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/64Protecting data integrity, e.g. using checksums, certificates or signatures
    • 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/74Protecting 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 operating in dual or compartmented mode, i.e. at least one secure mode
    • 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/0643Hash functions, e.g. MD5, SHA, HMAC or f9 MAC
    • 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/32Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials
    • H04L9/3247Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials involving digital signatures

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Mathematical Physics (AREA)
  • General Health & Medical Sciences (AREA)
  • Bioethics (AREA)
  • Health & Medical Sciences (AREA)
  • Power Engineering (AREA)
  • Storage Device Security (AREA)
  • Stored Programmes (AREA)
  • Debugging And Monitoring (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Materials Applied To Surfaces To Minimize Adherence Of Mist Or Water (AREA)
  • Lubricants (AREA)
  • Acyclic And Carbocyclic Compounds In Medicinal Compositions (AREA)
  • Calculators And Similar Devices (AREA)
  • Design And Manufacture Of Integrated Circuits (AREA)
  • Facsimiles In General (AREA)
  • Pharmaceuticals Containing Other Organic And Inorganic Compounds (AREA)

Abstract

a presente invenção refere-se a uma identidade de enclave abstrata. uma identidade abstrata pode ser uma identidade segura que pode ser a mesma para múltiplas instanciações de enclave relacionadas, mas não idênticas. um valor da identidade de enclave pode ser determinado a partir de um tipo de identidade de enclave abstrata com respeito a um enclave instanciado. várias operações de enclave podem ser executadas com uma identidade abstrata, tal como a travação de dados a uma identidade abstrata, a incrementação de um contador monotônico, a execução da medição do tempo confiável.

Description

Relatório Descritivo da Patente de Invenção para IDENTIDADE DE ENCLAVE ABSTRATA.
CAMPO TÉCNICO [001] A presente invenção refere-se a sistemas de computação seguros.
ANTECEDENTES [002] Regiões isoladas seguras ou os ambientes de execução confiáveis provêm um invólucro seguro, indicado no presente documento como um enclave, para executar o código confiável em um computador que também pode ter um código menos confiável em uma região fora da região isolada. A região isolada de um enclave inclui uma porção da memória que é protegida durante a execução do código que reside fora do enclave. A memória isolada pode conter o código e os dados para o enclave, e a proteção desta memória pode incluir restrições na execução do código contido na memória de enclave além das restrições na leitura de ou na gravação na memória de enclave. Os aspectos de segurança de enclave, tais como o isolamento da memória e as restrições da execução, podem ser reforçados, por exemplo, pelo hardware no processador do computador. A atestação do software pode conferir confiança na segurança do isolamento de um enclave particular e no código de enclave que é carregado dentro da região de memória isolada desse enclave particular. A atestação também pode prover a prova da integridade da plataforma de hardware e de software em que o enclave atestado está rodando.
[003] Os sistemas de enclave, tais como Virtual Secure Mode (VSM) da Microsoft e Software Guard Extensions (SGX) da Intel, conferem a segurança em parte mediante o isolamento de um enclave de outro código que roda tanto no modo do usuário quanto no modo de kernel. As garantias da integridade e da privacidade podem conferir a um enclave um nível mais elevado de confiança na autenticidade do
Petição 870190062354, de 04/07/2019, pág. 13/140
2/100 código que roda em um enclave, e a confiança na execução segura do código de enclave. Uma garantia da integridade pode ser conferida pela atestação do software de um enclave particular. A atestação do software pode incluir uma comprovação criptograficamente assinada dos conteúdos (instruções e dados) dentro de um enclave e pode ser combinada com os dados sobre o ambiente de enclave. Quando um enclave é usado em combinação com um módulo de segurança de hardware (HSM), tal como o hardware que se conforma a um padrão Trusted Computing Group (TCG) Trusted Platform Module (TPM), ο enclave pode conferir um nível adicional de garantias de segurança e privacidade.
[004] Além da segurança conferida pelo isolamento de um enclave local confiável do código local não confiável fora do isolamento de enclave, a atestação do software de um enclave pode permitir uma computação confiável remota. A atestação de um enclave remoto pode conferir confiança tanto na integridade da execução das instruções no enclave, quanto na privacidade dos dados processados pelo enclave. Quando a atestação de um enclave remoto é provida pelo hardware de um fabricante confiável, um enclave pode ser confiável mesmo quando o enclave reside em um computador desconhecido que seja possuído e mantido por uma parte não confiável. Este é frequentemente o caso, por exemplo, quando os recursos de computação são alugados em um recurso de computação baseado em nuvem da Internet.
SUMÁRIO [005] São apresentados métodos e os sistemas para a abstração de uma plataforma de enclave. O método pode compreender a recepção, por uma plataforma de abstração de enclave, de um primeiro pedido para usar um enclave de um cliente de enclave. O primeiro pedido pode se conformar a um protocolo de abstração do cliente. O primeiro pedido pode ser convertido em um segundo pedido que se con
Petição 870190062354, de 04/07/2019, pág. 14/140
3/100 forma a um protocolo de enclave nativo associado com uma plataforma de enclave nativa. O segundo pedido pode então ser enviado à plataforma de enclave nativa. O primeiro pedido pode ser, por exemplo, um pedido para instanciar um enclave, um pedido para verificar um relatório de atestação de um enclave, um pedido para efetuar um enclave, ou um pedido para alocar a memória que é compartilhada com o enclave e o cliente do enclave. A plataforma nativa pode se conformar à arquitetura do enclave Software Guard Extensions (SGX) da Intel, e a plataforma nativa pode se conformar à arquitetura de enclave Virtual Secure Mode (VSM) da Microsoft.
BREVE DESCRIÇÃO DOS DESENHOS [006] A Figura 1 ilustra um diagrama de blocos de alto nível exemplificador de um sistema de enclave.
[007] A Figura 2 ilustra um processo exemplificador para a passagem de mensagem com a garantia de privacidade.
[008] A Figura 3 ilustra um processo exemplificador para a passagem de mensagem com uma garantia de integridade.
[009] A Figura 4 ilustra um processo exemplificador para a passagem de mensagem com uma garantia de novidade.
[0010] A Figura 5 ilustra um processo exemplificador para a atestação de software de um enclave.
[0011] A Figura 6 ilustra um protocolo de Diffe-Hellman Key Exchange (DKE) exemplificador.
[0012] A Figura 7 ilustra uma cadeia exemplificadora de confiança para a atestação de software.
[0013] A Figura 8 é um diagrama de blocos de interfaces de componentes de software para um sistema de enclave local exemplificador.
Petição 870190062354, de 04/07/2019, pág. 15/140
4/100 [0014] A Figura 9 é um diagrama de blocos de interfaces de componentes de software para um sistema de enclave local exemplificador com uma camada de abstração.
[0015] A Figura 10 é um diagrama de blocos de interfaces de componentes de software para um sistema de enclave remoto exemplificador com uma camada de abstração.
[0016] A Figura 11 ilustra um ambiente de computação de finalidades gerais exemplificador.
[0017] A Figura 12 ilustra um fluxograma exemplificador para um método de abstração de uma plataforma de enclave nativa.
[0018] A Figura 13 ilustra um fluxograma exemplificador para um método de abstração de uma plataforma de enclave nativa.
[0019] A Figura 14 ilustra um fluxograma exemplificador para um método de execução de uma operação de enclave com a identidade de enclave abstrata.
[0020] A Figura 15 ilustra um fluxograma exemplificador para um método 1500 de execução de uma operação de enclave com a identidade de enclave abstrata.
[0021] A Figura 16 ilustra um sistema exemplificador com equivalência de identidade de enclave abstrata.
[0022] A Figura 17 ilustra um fluxograma exemplificador para processamento paralelo com dois enclaves equivalentes.
[0023] A Figura 18 ilustra um fluxograma exemplificador para processamento em série com dois enclaves equivalentes.
[0024] A Figura 19 é um diagrama de blocos de um sistema de travação de dados distribuídos exemplificador.
[0025] A Figura 20 é um fluxograma exemplificador para a travação e a destravação de dados distribuídos.
[0026] A Figura 21 é um diagrama de blocos de um enclave do cofre de chave exemplificador.
Petição 870190062354, de 04/07/2019, pág. 16/140
5/100 [0027] A Figura 22 é um fluxograma exemplificador para algumas operações de enclave de cofre chave.
[0028] A Figura 23 é um fluxograma exemplificador para a operação de enclave de cofre chave com uma chave trancada no cofre.
DESCRIÇÃO DETALHADA DE MODALIDADES ILUSTRATIVAS [0029] É apresentado um modelo de abstração para enclaves que simplifica o desenvolvimento de clientes de enclave e um software que roda dentro de um enclave. Um modelo de abstração pode ser uma simplificação e uma unificação de arquiteturas de plataformas de enclave nativas, tais como SGX da Intel e VSM da Microsoft. Um componente de software da camada de abstração pode traduzir uma comunicação entre um cliente de enclave e uma ou mais plataformas nativas, entre o software dentro de um enclave e uma ou mais plataformas de enclave nativas, e entre o software dentro de um enclave e um cliente de enclave. Tal plataforma de abstração pode conferir o benefício de habilitar uma única versão do software de enclave e do software do cliente de enclave para rodar no topo de múltiplas plataformas de enclave nativas, tais como SGX e VSM. Além de simplificar a tarefa de gravar o software para enclaves e clientes de enclave, permite que os usuários finais dos enclaves rodem o software de enclave e do cliente de enclave em um computador que suporta qualquer arquitetura de enclave nativa suportada sem ter que encontrar as versões do software de enclave e do cliente de enclave que sejam adaptadas à plataforma de enclave nativa de um computador específico.
[0030] Um modelo de abstração de enclave pode, por exemplo, incluir elementos primitivos para: gerenciar o ciclo de vida de um enclave, uma atestação local e remota de um enclave, travar os dados a um enclave, programar o controle de transferência de e para um enclave, e outros elementos de segurança tais como contadores monotônicos e tempo confiável. Uma identidade abstrata ou em camadas de
Petição 870190062354, de 04/07/2019, pág. 17/140
6/100 um enclave também é apresentada, a qual abstrai a identidade de um enclave além de um único binário ou uma única comprovação do conteúdo de um enclave. As interfaces de componentes de software, tais como uma interface de programação de aplicativo (API) ou a interface binária de aplicativo (ABI), são apresentadas para o desenvolvimento dos enclaves e dos programas de cliente de enclave ao usar os elementos primitivos de modelos de abstração.
[0031] Uma identidade abstrata pode incluir uma identidade aninhada ou uma hierarquia de identidade que pode ser usada para identificar com segurança grupos de exemplos de enclave. Um exemplo de enclave no presente documento pode se referir ao mesmo código binário de enclave carregado em um enclave na mesma máquina e ter a mesma identidade. Por outro lado, uma versão nova do código binário, ou do mesmo código binário carregado em uma máquina diferente, pode ser considerada como um exemplo diferente. Estes exemplos diferentes também podem ter a mesma identidade a um nível mais elevado em uma hierarquia de identidade. Uma identidade de enclave abstraída permite que grupos de binários de enclave relacionados sejam identificados tal como relacionados. Por exemplo, versões diferentes do mesmo enclave, tais como as versões de binários de enclave antes e depois que um erro é fixado, podem receber o mesmo nome, independentemente da versão. Em uma camada mais elevada de abstração, todos os enclaves em uma família de enclaves podem receber um único nome de família ou identidade. Neste caso, todos os enclaves que executam funções relacionadas mas diferentes podem ser identificados juntos. Outras camadas de identidade ou agrupamentos de identidades são descritos a seguir.
[0032] Qualquer camada de uma identidade abstrata pode ser usada para várias operações criptográficas, tais como a travação de dados, a atestação de um enclave, ou a garantia de novidade dos da
Petição 870190062354, de 04/07/2019, pág. 18/140
7/100 dos (através dos contadores monotônicos). Por exemplo, com a travação dos dados produzidos por um exemplo de enclave a uma identidade de um nível mais elevado, esses dados podem então ser consumidos com segurança mais tarde por um exemplo de enclave diferente com a mesma identidade de enclave de um nível mais elevado. Com a travação dos dados, por exemplo, a uma família de enclave, qualquer exemplo de enclave que for um membro dessa família, e somente membros dessa família, poderá destravar os dados. A atestação a uma identidade da família de um exemplo de enclave confere a garantia que o exemplo de enclave é um membro dessa família. Os contadores monotônicos atados a uma abstração da identidade podem conferir garantias de novidade relacionadas a todos os exemplos de enclave que são membros da identidade de abstração.
[0033] O modelo de abstração apresentado inclui interfaces de componentes de software, tais como uma interface de programação de aplicativo (API) ou a interface binária de aplicativo (ABI), que podem simplificar o desenvolvimento do software dos enclaves e dos hosts de enclave. Uma API é um conjunto de definições de subrotina de programação, protocolos e ferramentas para a criação do software. Uma API pode definir as entradas e as saídas de um componente de software, dos tipos de dados usados pelo componente de software, e a funcionalidade ou a operação do componente de software independente de qualquer implementação particular do componente de software. Uma API pode ser definida em uma linguagem de computador de alto nível, tal como C, C++, C#, e outras ainda. Uma definição formalizada de uma API pode facilitar a interação entre os componentes de software, por exemplo, dois componentes de software gravados em tempos diferentes ou por autores diferentes. Uma API pode ser formalizada em parte com uma linguagem de descrição de interface (IDL) tal como Interface Definition Language da Microsoft (MIDL) ou Object Manage
Petição 870190062354, de 04/07/2019, pág. 19/140
8/100 merit Group (OMG) IDL. Uma ABI também é uma interface entre componentes de software, mas é uma interface de código de objeto. Por exemplo, uma ABI pode ser pontos de entrada (ou endereços de instrução) do código de objeto resultante da compilação de uma implementação do código fonte de uma API junto com protocolos para usar esses pontos de entrada, tais como os protocolos que especificam os registros da máquina que contêm argumentos quando os pontos de entrada são conclamados.
[0034] Além de permitir a interação com níveis diferentes da identidade de enclave tal como descrito acima, uma API de enclave pode abstrair as diferenças entre as arquiteturas de plataforma de enclave, por exemplo, entre as arquiteturas para a execução isolada segura provida por Software Guard Extensions (SGX) da Intel, Virtual Secure Mode (VSM) da Microsoft e Secure Encrypted Virtualization (SEV) da AMD, e as arquiteturas baseadas em Disposições de Portas Programáveis no Campo (FPGAs). As APIs incluem interfaces para uma plataforma de enclave que abstrai alguns detalhes das arquiteturas de enclave abstraídas. Essas interfaces de plataforma de enclave incluem uma API host de enclave, uma API de plataforma de enclave, e uma API de atestação remota. A API host de enclave pode ser usada por um processo de host não confiável para gerenciar o ciclo de vida de um enclave, bem como prover a comunicação de e para um enclave. A API de plataforma de enclave pode ser provida pela plataforma de enclave confiável ao enclave, e pode incluir elementos primitivos de segurança para a atestação, a travação da comunicação com o código não confiável que roda no computador que hospeda o computador de enclave, assim como o suporte do tempo de execução do núcleo tal como o gerenciamento da memória e a programação de inserção. A API de atestação remota pode ser usada para executar a atestação remota, onde um enclave e seu cliente não estão hospedados no
Petição 870190062354, de 04/07/2019, pág. 20/140
9/100 mesmo computador. Por exemplo, a API de atestação remota pode ser usada por um cliente local verificar que os dados originados (ou que foram enviados) de um enclave com uma determinada identidade que roda sob isolamento provida por uma plataforma de enclave em um computador remoto. De modo mais geral, a API de atestação remota pode ser usada para estabelecer canais de comunicação seguros entre um cliente local e o enclave remoto.
[0035] Os enclaves provêm geralmente soluções para os problemas para os quais são específicos, e são originários do reino da tecnologia de computação. Mais especificamente, os enclaves provêm um mecanismo para segregar o código confiável do código não confiável onde amos os segmentos de códigos confiável e não confiável residem dentro do espaço de endereço de um único processador do computador. Por exemplo, os enclaves provêm uma solução de segurança ao problema de código potencialmente não confiável (tal como o código que contém potencialmente erros ou então vírus) que roda no mesmo computador de finalidades gerais que o código que deve acessar dados sensíveis ou privativas. As modalidades desta invenção fornecem soluções ainda mais melhoradas para tais problemas de segurança que são originários do reino da tecnologia de computação, incluindo: a simplificação do desenvolvimento de software mediante a habilitação de um único enclave ou cliente de enclave a ser autorado para múltiplas plataformas de enclave nativas; a simplificação do gerenciamento de computador incorporado mediante a redução do número de componentes de software que devem ser customizados aos elementos de hardware específicos de um computador particular; e a habilitação de novos cenários de computação seguros com a travação dos dados distribuídos, tal como a distribuição de processamento de enclave seguro através dos enclaves hospedados em múltiplos computadores.
Petição 870190062354, de 04/07/2019, pág. 21/140
10/100 [0036] A Figura 1 ilustra um diagrama de blocos de alto nível de um sistema de enclave junto com algumas relações de confiança. O sistema de enclave 100 inclui um enclave 176 (chamado alternativamente de um invólucro de enclave ou um ambiente de execução seguro), que inclui uma região isolada segura da memória que contém o código 180 e os dados 182. O código 180 pode ser público ou privativa, e os dados 182 podem ser públicos ou privativos. Por exemplo, o código ou os dados privativos podem pertencer (ou ser privativos de) a um proprietário de dados 142, ao passo que o código ou os dados públicos podem ter sido fornecidos por uma outra parte, tal como o fornecedor de software 148. Em uma modalidade, o código que roda dentro de um invólucro de enclave 176 pode ser completamente público e não privativo, ao passo que os dados que o código de enclave público usa como entrada ou produz como saída podem ser privativos. Em uma outra modalidade, o inverso é possível, onde o código é privativo quando os dados são públicos. Em ainda uma outra modalidade, ambos o código e os dados de entrada podem ser públicos, ao passo que a saída da execução do código com os dados de entrada pode ser privativa. Outras combinações públicas e privativas do código, dos dados de entrada e dos dados de saída são possíveis.
[0037] O invólucro de enclave 176 é hospedado no hardware confiável 172, que pode simultaneamente hospedar o software não confiável 174. Uma finalidade primordial do sistema de enclave 100 pode incluir pelo menos um aspecto selecionado da lista que consiste em: a manutenção da integridade do código 180, a manutenção da privacidade do código 180, a manutenção da integridade dos dados 182, e a manutenção da privacidade dos dados 182. A proteção do conteúdo do enclave 176 do software não confiável 174 (por exemplo, a divulgação ao software não confiável, a modificação pelo software não confiável, ou algo do gênero) pode ser um objetivo. O hardware confiável é
Petição 870190062354, de 04/07/2019, pág. 22/140
11/100 construído pelo fabricante 162, e é possuído e controlado pelo proprietário de infraestrutura 152.
[0038] O cliente de enclave 104 pode ser um processo ou um programa fora do invólucro de enclave para o qual o enclave 176 executa as suas computações com o código 180 e os dados 182. Em uma modalidade de enclave local, o cliente de enclave 104 também pode rodar no hardware confiável 172. Em uma modalidade de enclave remoto, o cliente de enclave pode rodar em um computador quando o hardware confiável 172 for um computador remoto diferente conectado ao computador do cliente de enclave através de uma rede. No caso de enclave local, o processo do cliente de enclave também pode ser o processo de host de enclave do invólucro de enclave 176 em que o processo do cliente de enclave pode controlar a criação de enclave local 176. No caso de enclave remoto, o enclave 176 pode, por exemplo, ser rodado em um computador de nuvem da Internet onde o proprietário de infraestrutura 152 é um fornecedor de serviço de computação em nuvem, e o computador de nuvem inclui a hardware confiável 172 que é manufaturado pelo fabricante 162.
[0039] O cliente de enclave 104 pode incluir um método de configuração 106 para configurar uma computação solicitada pelo enclave 176. O método de configuração 106 pode incluir a realização da criação do invólucro seguro de enclave 176, a realização da instanciação de enclave (por exemplo, mediante o envio de um pedido ao software não confiável 174 para pedir a instanciação do enclave), que pode incluir a cópia do código binário no invólucro seguro, e a realização ou a solicitação de uma computação no enclave, por exemplo, ao chamar um método no código copiado no invólucro seguro. A computação solicitada pode incluir a execução do código 180, e os dados 182 podem ser inseridos, ou podem ser uma resultante, da computação solicitada. Os dados inseridos para a computação solicitada podem ser criptogra
Petição 870190062354, de 04/07/2019, pág. 23/140
12/100 fados quando fora do enclave, e os dados de entrada criptografados podem ser descriptografados antes de serem usados dentro de enclave. Uma vez que o enclave 176 tenha completado a tarefa solicitada, os dados que representam o resultado da tarefa são criptografados e enviados de volta ao cliente de enclave 104. Quando o cliente de enclave 104 recebe os resultados criptografados, um método de verificação 108 pode confirmar a integridade e a novidade dos resultados recebidos. Um único fornecedor de software 148 pode fornecer ambos o código 180 para rodar dentro de enclave 176, e pelo menos uma porção do método de verificação 108 que roda como parte do cliente de enclave 104.
[0040] A confiança de um proprietário dos dados na privacidade de uma porção privativa dos dados 182 e uma porção privativa do código 180, assim como a confiança na exatidão dos resultados produzidos pelo enclave 176, pode ser baseada em relações de confiança. Por exemplo, um proprietário de dados 142 pode confiar no cliente de enclave 104, que pode não estar rodando dentro do próprio invólucro de enclave. O proprietário dos dados também pode confiar no fornecedor de software 148 do próprio enclave. E o proprietário dos dados pode confiar no fabricante de hardware confiável 172. O hardware confiável 172 pode assumir muitas formas, dependendo da arquitetura de enclave usada, e pode incluir um módulo de segurança de hardware (HSM), onde o HSM se conforma, por exemplo, ao padrão Trusted Plataform Module (TPM). O hardware confiável 172 pode incluir, por exemplo, um TPM e também pode compreender somente o hardware. Por exemplo, uma implementação do hardware confiável 172 ao usar a arquitetura de enclave VSM da Microsoft pode incluir um processador de commodities com instruções para operar as instruções de virtualização do sistema e um TPM. A arquitetura de enclave de VSM da Microsoft pode incluir um hipervisor para gerenciar as divisórias de
Petição 870190062354, de 04/07/2019, pág. 24/140
13/100 convidados (processadores virtuais), e o hipervisor pode expor as interfaces de hiperchamadas às divisórias do convidado para permitir que as divisórias do convidado interajam com o hipervisor. Um invólucro de enclave na arquitetura de VSM da Microsoft pode ser implementado como um tipo especial de divisória de convidado. Um exemplo do hardware confiável 172 com arquitetura de enclave de SGX da Intel pode incluir um processador com instruções específicas de enclave e funcionalidade de segurança.
[0041] Um enclave, tal como o enclave 176, pode prover um ambiente de execução isolado que pode proteger o código ou os dados, tais como o código 180 e os dados 182, ao prover uma região da memória com restrições na leitura, na gravação, ou na execução dessa região protegida. Essa região de memória protegida é um invólucro seguro para o código e os dados privativas. As restrições na execução da região de memória protegida de um enclave podem incluir restrições nas transferências de execução, tais como instruções de chamadas ou de saltos, entre o código fora de enclave para codificar dentro do enclave, e vice-versa. Restrições diferentes podem ser executadas entre a chamada no enclave de fora do enclave e a chamada fora de enclave de dentro de enclave. A execução dessas transferências de execução entre o interior e o exterior de um enclave pode ser provida pelo hardware, por exemplo, com a tecnologia de hardware de virtualização de commodities ou com o hardware de especialidades tal como a plataforma de SGX da INTEL.
[0042] A Figura 2 ilustra um processo 200 exemplificador para a passagem de mensagem com uma garantia de privacidade. Uma garantia de privacidade confere algum nível de garantia de que a comunicação entre duas partes, tais como Anne 210 e Ben 230 neste exemplo, permaneça escondida de terceiros quando as mensagens são passadas através de um meio de comunicação público ou despro
Petição 870190062354, de 04/07/2019, pág. 25/140
14/100 tegido tal como a rede 218. Neste exemplo, a Anne 212 gostaria de enviar uma mensagem privativa ao Ben 230. Um bloco de mensagens 212 contendo dados privativas é criptografado ao usar a chave pública 216 por uma operação de criptografia 214. A operação de criptografia 214 pode ser, por exemplo, Advanced Encryption Standard Galois/Counter Mode (AES-CGM), mas também pode ser qualquer operação de criptografia conhecida dos elementos versados no estado da técnica de criptografia digital. O bloco criptografado 220 pode passar através de uma rede 218 para o Ben onde o bloco criptografado 234 é descriptografado com a chave privativa 236 para produzir o bloco de mensagens descriptografadas 232 da mensagem para o Ben. Com a seleção cuidadosa das chaves e dos algoritmos de criptografia, tal como é conhecido no estado da técnica de criptografia de dados de computador, a mensagem pode permanecer privativa até mesmo quando passa através de uma rede pública.
[0043] A Figura 3 ilustra um processo 300 exemplificador para a passagem de mensagens com uma garantia de integridade. Uma garantia de integridade confere algum nível de garantia de que a comunicação entre duas partes, tais como Anne 310 e Ben 350 neste exemplo, não seja violada ou então alterada quando as mensagens são passadas através de um meio de comunicações público ou desprotegido tal como a rede 340. No exemplo da Figura 3, a Anne 310 envia uma mensagem 314 ao Ben 350 de maneira tal que há uma confiança de que a mensagem 314 não vai ser violada nem corrompida quando o Ben 350 a receber. Para conferir esta garantia de integridade, um processo de comprovação “hashing” seguro 316 opera na mensagem 314 para produzir um valor comprovado 318. O valor comprovado 318 é então assinado pelo processo de assinatura 320 ao usar a chave privativa da Anne para produzir uma assinatura 342. A assinatura 342 pode ser enviada através de uma rede pública 340 ou um outro pro
Petição 870190062354, de 04/07/2019, pág. 26/140
15/100 cesso de comunicação desprotegido junto com uma cópia da mensagem 314 como mensagem 344. O Ben recebe então uma mensagem 354 para a qual o Ben gostaria de verificar a integridade, de maneira tal que o Ben possa ter a confiança de que a mensagem 354 é a mesma que a mensagem 314 que a Anne enviou depois de ter passado através de uma rede não confiável 340. Para verificar a integridade, a mensagem recebida 354 é processada pela comprovação “hashing” seguro 356 que é idêntica à comprovação “hashing” seguro 316 para produzir o valor comprovado 358. A assinatura recebida 342 é verificada pelo processo de verificação da assinatura 360 ao usar a chave pública da Anne. O valor comprovado 318 que é extraído da assinatura 342 é comparado então ao valor comprovado 358 para verificar 380 se as assinaturas são as mesmas. Se elas forem as mesmas, a mensagem é aceitada 384 como dotada de integridade. Alternativamente, se a mensagem 314 for alterada de qualquer maneira antes de ser recebida como mensagem 354, então a assinatura não estará correta e a mensagem será rejeitada 388.
[0044] Em algumas modalidades, a comprovação “hashing” segura 316 e a comprovação “hashing” segura 356 podem ser uma função de comprovação criptográfica (função “hash”). Uma função de comprovação criptográfica é uma função de sentido único que mapeia os dados de tamanho arbitrário a uma corrente de bits de um tamanho fixo (tipicamente muito menor). A saída de uma função de comprovação pode ser chamada de valor comprovado ou simplesmente uma comprovação. Uma boa função de comprovação será de sentido único, uma vez será difícil determinar a entrada arbitrariamente dimensionada tendo apenas a saída da comprovação. Com uma boa função de comprovação, até mesmo uma mudança pequena na entrada irá produzir uma mudança na saída.
Petição 870190062354, de 04/07/2019, pág. 27/140
16/100 [0045] Um sistema de comunicação pode combinar as garantias da privacidade e da integridade. Por exemplo, a criptografia do bloco de mensagens da Figura 2 pode ser combinada com a assinatura de uma comprovação de mensagem da Figura 3. O sistema de combinação pode requerer dois conjuntos de pares de chaves públicas/privativas, um para o remetente e um para o destinatário. Um sistema de combinação pode usar uma chave privativa no destinatário para descriptografar uma mensagem (a chave privativa do Ben tal como na Figura 2), ao passo que é usada uma outra chave privativa para assinar a comprovação da mensagem (chave privativa da Anne tal como na Figura 3).
[0046] A Figura 4 ilustra um processo 400 exemplificador para a passagem de mensagem com uma garantia de novidade. Uma garantia de novidade confere algum nível de garantia de que, quando múltiplas mensagens são enviadas de uma parte a outra, tal como da Anne 410 ao Ben 450 neste exemplo, a mensagem recebida no destinatário é a mensagem mais recente. Uma garantia de novidade pode ser construída em cima de uma garantia de integridade, e pode impedir o ataque de reprodução. Com uma garantia de integridade, é difícil para um terceiro com uma intenção nefasta criar a sua própria mensagem e enviar a mesma ao Ben de maneira tal que o Ben compreenda que a mensagem foi criada pela Anne. No entanto, um terceiro pode pegar uma mensagem criada realmente pela Anne, talvez observada uma vez como tendo sido enviada por uma rede pública, e o terceiro pode reenviar a mesma ao Ben em outro momento mais tarde (isto é, reproduzir a mensagem). O Ben irá determinar se a mensagem foi criada realmente pela Anne (porque foi mesmo), mas o Ben não irá saber que Anne não é a pessoa que a enviou naquele momento. Isto pode ser chamado de um ataque de reprodução em Ben ou em Anne pelo terceiro. A Figura 4 é uma solução exemplificadora para impedir ataques
Petição 870190062354, de 04/07/2019, pág. 28/140
17/100 de reprodução mediante a provisão de uma garantia de novidade ao usar nonces e marcas de tempo. Um nonce é um número aleatório de um só uso, acoplado com um sistema para assegurar que o mesmo número nunca seja usado como um nonce mais de uma vez. Em alguns sistemas um nonce pode ser simplesmente um número monotonicamente crescente, de maneira tal que cada número usado é maior do que todos os números que vieram antes dele.
[0047] Na Figura 4, a mensagem de Anne 414 pode ser enviada por uma rede pública 430 como mensagem 436 junto com o nonce 434 e a marca de tempo 432. O nonce 434 é gerado por um gerador de número pseudorrandômico criptograficamente seguro (CSPRNG) 426, e a marca de tempo 432 é produzida por um relógio sincronizado 424. Há muitos sistemas de CSPRNG que são conhecidos dos elementos versados no estado da técnica de criptografia digital. O relógio sincronizado 424 no lado da Anne da rede 430 é sincronizado com o relógio sincronizado 480 no lado do Ben da rede. No lado do Ben, quando uma mensagem 454 é recebida, o nonce acompanhante 434 é armazenado em um cache de nonces recentes 470. A novidade dessa mensagem recebida 450 pode ser verificada com dois testes. Em primeiro lugar, o nonce 434 é testado na caixa 460 ao comparar o nonce 434 ao cache de nonces recentes 470 para determinar se o nonce atualmente recebido 434 foi visto antes. Se o nonce recebido 434 foi visto antes, a mensagem 454 é rejeitada como uma mensagem de reprodução na caixa 468. Se o nonce recebido 434 não foi visto antes, a mensagem é determinada como OK na caixa 464 para este primeiro teste. Em segundo lugar, a marca de tempo recebida 432 é comparada ao relógio sincronizado local 490. Se a marca de tempo for recente, a mensagem 454 é determinada como aceitável na caixa 494, e em caso negativo a mensagem 454 é rejeitada como expirada na caixa 498. A quantidade de retardo tolerado quando é determinado se uma
Petição 870190062354, de 04/07/2019, pág. 29/140
18/100 marca de tempo recente é recente na caixa 490 pode depender da distorção prevista do relógio entre o relógio sincronizado 424 e o relógio sincronizado 480 e os retardos do tempo no processamento e transmissão da mensagem através da rede 430.
[0048] Um sistema de comunicação pode combinar uma garantia de novidade com uma ou outra ou com ambas uma garantia de privacidade, tal como na Figura 2, e uma garantia de integridade, tal como na Figura 3. Em um sistema que combina todas as três, a mensagem 436 enviada pela rede 430 será uma versão criptografada da mensagem original 414 de Anne, e uma assinatura que compreende uma comprovação assinada da mensagem 414 deve ser incluída junto com a marca de tempo 432, o nonce 434 e a mensagem 436.
[0049] A Figura 5 ilustra um processo 500 exemplificador para a atestação de software de um enclave. A atestação de software, quando combinada com um protocolo de concordância de chave tal como aquele da Figura 6, pode assegurar um verificador que foi estabelecido um segredo compartilhado com uma parte específica de software que é hospedada dentro de um invólucro isolado criado pelo hardware confiável. Na modalidade da Figura 5, um cliente de enclave 510 (o verificador da atestação) pode querer usar os serviços de computação segura de enclave na plataforma confiável 530. A plataforma confiável 530 é hospedada em um computador (não ilustrado) de maneira tal que a plataforma confiável 530 pode compreender um subconjunto do computador hospedeiro. A plataforma confiável 530 pode compreender elementos de hardware e elementos de software do computador hospedeiro. O enclave compreende um invólucro seguro 536 e o código de enclave e os dados dentro do mesmo, tais como o código e os dados públicos 538 e código e os dados secretos 542.
[0050] Três processos são combinados no processo exemplificador 500: um processo de troca de chave que produz uma chave com
Petição 870190062354, de 04/07/2019, pág. 30/140
19/100 partilhada SK; um processo de atestação para a atestação ao cliente de enclave 510 do enclave na plataforma confiável 530; e uma computação segura são executados. A chave compartilhada SK do primeiro processo é usada para comunicar as entradas e as saídas da computação segura. Na troca de chave, o cliente de enclave computa gA, armazenado na caixa 512, da chave privativa do cliente de enclave A e uma função de gerador, por exemplo, tal como descrito a seguir para o protocolo de troca de chave de Diffe-Hellman (DKE) da Figura 6. O gA computado é enviado então na mensagem 520 à plataforma confiável 530. A mensagem 520 pode ser enviada com segurança sem criptografia e antes que a atestação esteja completa. O software dentro do invólucro de enclave seguro 536 pode usar uma chave de enclave privativa B para computar gB ao usar a mesma função g. Amos B e gB podem ser armazenados no invólucro de enclave na caixa 540.
[0051] Para atestar a identidade de enclave (para conferir garantia sobre qual código é rodado dentro do invólucro de enclave seguro 536), uma mensagem de atestação 522 é enviada ao cliente de enclave 510. Uma mensagem de atestação pode ser uma mensagem especial assinada para a integridade tal como na Figura 3. A mensagem especial pode conter a informação da identidade sobre o enclave. Quando combinada com DKE tal como na modalidade da Figura 5, a mensagem especial também pode incluir os parâmetros de troca de chave. Na modalidade da Figura 5, o estado inicial 538 do invólucro de enclave seguro 536 de código público e os dados públicos são usados como uma identidade de enclave, embora outras identidades sejam possíveis. Em vez de enviar o estado inicial inteiro 538 em uma mensagem de atestação, uma comprovação do estado inicial, M = Comprovação (Estado Inicial), é de preferência enviada. A mensagem de atestação 522 inclui o conteúdo da mensagem (M e gB), e uma assinatura do conteúdo da mensagem (SignAK/Hash(gB), Μ)). A assinatura do
Petição 870190062354, de 04/07/2019, pág. 31/140
20/100 conteúdo da mensagem pode ser criada, por exemplo, pelo software dentro do invólucro de enclave seguro 536 que pede que a plataforma confiável 530 que hospeda o enclave ateste uma comprovação do gB computado e a identidade de enclave. A plataforma confiável 530 pode fazer isso ao prover uma assinatura ao usar a chave de atestação de plataforma (AK) 532 para produzir SignAK(Hash(gB), M). Neste exemplo, a identidade de enclave é uma comprovação M do estado inicial 538, mas outras indicações da identidade são possíveis. Esta assinatura de atestação SignAK(Hash(gB), M) liga o valor gB à identidade de enclave M e também liga ambos gB e M à plataforma confiável 530. O cliente de enclave 510 pode então verificar a mensagem de atestação ao verificar a assinatura da atestação e a identidade de enclave. A assinatura pode ser verificada tal como na Figura 3 ao usar uma chave pública que corresponde à chave de atestação AK. A verificação da assinatura pode prover uma garantia da integridade da identidade de enclave na mensagem de atestação. A identidade de enclave pode ser verificada ao comparar a informação da identidade na mensagem de atestação com um valor de identidade independentemente conhecido. Por exemplo, se a informação da identidade na mensagem de atestação for uma comprovação do estado inicial de enclave, o cliente de enclave 510 pode conhecer a comprovação do estado inicial, ou vai poder computar tal comprovação a partir de um estado inicial conhecido, e esse valor pode então ser comparado ao valor de identidade fornecido na mensagem de atestação.
[0052] Para produzir a chave compartilhada SK, o cliente de enclave 510 e o código dentro do invólucro seguro 536 pode gerar gAB (a função do gerador g aplicada ao produto de A vezes B) que pode servir como chave compartilhada SK. A chave compartilhada SK pode ser usada para criptografar mensagens para a privacidade entre o cliente de enclave 510 e o enclave, por exemplo, para enviar dados de entra
Petição 870190062354, de 04/07/2019, pág. 32/140
21/100 da para, e dados de saída de, o código dentro do invólucro de enclave 536. Deve ser observado que a chave compartilhada é produzida independentemente em cada lado do canal de comunicação nas caixas 540 e 514 sem que o cliente de enclave ou então o enclave conheça outra chave privativa Por exemplo, na modalidade da Figura 5, o código secreto e os dados podem providos com segurança pelo cliente de enclave 510 mediante a criptografia do código secreto e dos dados com a chave compartilhada SK previamente estabelecida, produzindo EncssK(secret codes/data) antes de enviar a mesma em uma mensagem 524 à plataforma confiável 530. Em outras modalidades, o código secreto e os dados 542 executados em ou usado por um invólucro de enclave seguro 536 podem ser originários de outros locais. Uma computação segura pode ser executada dentro do invólucro de enclave seguro 536 ao usar o código secreto e/ou os dados 542 para produzir um resultado de computação 544. Os resultados de computação 516 podem então ser comunicados com segurança de volta ao cliente de enclave 510 ao criptografar os resultados com a chave compartilhada SK (EncsK(results)) antes de enviar a mesma ao cliente de enclave na mensagem 526.
[0053] O processo da Figura 5 descrito acima confere uma garantia a um cliente de enclave que está se comunicando com um enclave real de uma determinada identidade, e que o enclave é protegido pela plataforma de enclave. Ele não fornece nenhuma garantia para o código dentro do invólucro de enclave sobre a entidade no outro lado do canal de comunicação. Em uma modalidade alternativa (não ilustrada), tal garantia sobre o cliente de enclave pode ser fornecida ao rodar o cliente de enclave como o próprio enclave. Nesta modalidade alternativa, o cliente de enclave pode pedir à plataforma confiável de enclave uma assinatura na comprovação de gA, que pode então ser verificada pelo outro enclave.
Petição 870190062354, de 04/07/2019, pág. 33/140
22/100 [0054] A atestação pode ser feita local ou remotamente. Na Figura 5, o cliente de enclave 510 pode ou não residir no mesmo computador que a plataforma confiável 530, de maneira tal que as comunicações entre o cliente de enclave 510 e a plataforma confiável 530 podem ocorrer dentro de um único computador (por exemplo, ao passar buffers de dados entre processos diferentes no mesmo computador), ou pode ocorrer em rede de computadores que conecta o cliente de enclave 510 à plataforma confiável 530. A atestação local pode ser executada quando o cliente de enclave 510 e a plataforma confiável 530 estão hospedados no mesmo computador local. O artefato, ou resultado, da atestação local é chamado de relatório de atestação, e é SignAK(Hash(gA), M) no exemplo da Figura 5. A atestação remota pode ocorrer quando o cliente de enclave 510 e a plataforma confiável 530 estão hospedados em computadores diferentes. O artefato, ou resultado, da atestação remota é chamado de citação de atestação, que em alguns casos pode ser muito similar ou idêntica a um relatório de atestação local. Em outros casos uma citação de atestação pode incluir um artefato de confiança adicional relacionado ao computador ou à plataforma nativa que fornece a citação. Tal artefato adicional de confiança pode incluir um certificado de saúde do host, tal como um registro de TCG associado com um TPM. A atestação de um enclave pode ser executada em qualquer camada de identidade de um enclave. Um enclave pode ter uma identidade aninhada ou hierárquica, e a atestação a níveis mais elevados de identidade pode atestar que um enclave instanciado é um membro de um grupo progressivamente maior de instanciações de enclave potenciais à medida que o nível de identidade aumenta. Os níveis mais elevados podem corresponder a um superconjunto de instanciações de enclave potenciais de nível mais baixo. Uma hierarquia exemplificadora das identidades pode incluir, a partir do nível mais específico mais baixo ao mais alto, em que os níveis
Petição 870190062354, de 04/07/2019, pág. 34/140
23/100 menos específicos podem ser: ExactHash, InstanceHash, ImagelD, FamilylD e AuthorlD.
[0055] A identidade de um enclave pode ser derivada dos arquivos binários (os binários de enclave) carregados no invólucro seguro do enclave. Um enclave binário pode ser assinado por seu autor ao usar uma chave privativa do autor. Para uma atestação de nível de ExactHash, o estado inicial 538 usado para computar um relatório de atestação (a entrada para uma função de comprovação para produzir um relatório de atestação) pode incluir o conteúdo inteiro de cada arquivo binário carregado no invólucro seguro 536, com exceção dos binários associados com a plataforma confiável 530.
[0056] A atestação ao nível de identidade de InstanceHash pode incluir um subconjunto do estado inicial 538. O subconjunto pode ser especificado então no momento em que os arquivos binários de enclave (os arquivos binários) que são carregados no invólucro seguro 536 foram assinadas originalmente pelo autor desses arquivos binários de enclave. Por exemplo, um primeiro (ou primário) arquivo binário de enclave pode incluir uma lista das identidades de outros arquivos binários de enclave dos quais o primeiro arquivo binário de enclave depende. Para cada identidade listada, um sinalizador pode ser incluído no primeiro arquivo binário para indicar se cada arquivo binário listado é medido ou não pela função de comprovação para produzir um relatório de atestação de InstanceHash.
[0057] A atestação a níveis mais elevados de uma ID de enclave pode não incluir a execução dos conteúdos inteiros de quaisquer binários de enclave através de uma função de comprovação. Ao invés disto, somente uma estrutura de dados de IDs pode ser executada através da função de comprovação. Por exemplo, um arquivo binário de enclave pode incluir uma lista de identificadores de enclave de nível mais elevado, tais como os identificadores universalmente singulares
Petição 870190062354, de 04/07/2019, pág. 35/140
24/100 (UUIDs), indicando: uma ID de imagem (ImagelD) singular para esse arquivo binário de enclave particular; uma ID de família (FamilylD) singular para um grupo de arquivos binários de enclave que incluem esse arquivo binário de enclave particular e que são de autoria do mesmo autor; e uma ID de autor (AuthorlD) singular para um grupo de famílias de arquivos binários de enclave que são todos da autoria do mesmo autor. A ImagelD, a FamilylD e a AuthorlD podem ser atribuídas pelo autor de um enclave binário no momento em que o binário é assinado originalmente. A imitação de identidades de enclave pode ser impedida onde o cliente de enclave pode acessar os binários de enclave e verificar a assinatura do autor nesses binários ao usar a chave pública do autor (ou uma chave pública associada com o autor). Isto verifica a integridade dos binários de enclave, incluindo todas as identidades de um nível mais elevado atribuídas pelo autor, como tendo sido criadas por esse autor de enclave.
[0058] A Figura 6 ilustra um protocolo de Diffe-Hellman Key Exchange (DKE) exemplificador. O DKE é um processo exemplificador para estabelecer uma chave compartilhada K através de um canal de comunicação que tem somente uma garantia de integridade; outros processos para criar as chaves compartilhadas conhecidas no estado da técnica de criptografia digital podem ser usados. No exemplo de DKE da Figura 6, uma chave secreta K é compartilhada entre a Anne 610 e o Ben 650 sem comunicar sempre K explicitamente em um meio de comunicação público (não seguro) entre a Anne 610 e o Ben 650. Antes que o processo comece, 1) um número primo grande p e 2) um gerador g em Zp podem ser estabelecidos e conhecidos pela Anne e pelo Ben. O processo começa então com o Anne e o Ben escolhendo um número aleatório entre 1 e p. O número aleatório de Anne é A, escolhido na caixa 612, e o número aleatório de Ben é B, escolhido na caixa 652. A Anne usa o seu número aleatório para computar gA mod p
Petição 870190062354, de 04/07/2019, pág. 36/140
25/100 na caixa 614, e transmite essa quantidade na caixa 616 que é recebida por Ben na caixa 656. O Ben usa o seu número aleatório para computar gB mod p na caixa 654, o qual é transmitido na caixa 656 para a Anne e recebido na caixa 618. A Anne pode produzir a chave compartilhada K como (gB Mod p)A = gAB mod p na caixa 620, e o Ben pode produzir a chave compartilhada K (gA mod p)B = gAB mod p na caixa 660. A fim de impedir ataques de intermediários, a comunicação entre a Anne e o Ben em uma rede desprotegida das caixas 616 e 658 pode incluir uma garantia de integridade da mensagem, por exemplo, criada ao usar um processo tal como aquele da Figura 3.
[0059] A Figura 7 ilustra uma cadeia exemplificadora de confiança 700 para a atestação de software. A cadeia de confiança na atestação de software pode ser enraizada em uma chave de assinatura possuída pelo fabricante da plataforma confiável, tal como a plataforma confiável 530 da Figura 5. A plataforma confiável pode incluir componentes de hardware tais como um processador seguro ou um módulo de segurança de hardware (HSM), e desse modo o fabricante pode ser um fornecedor de hardware de computador e também pode fornecer o software para a plataforma confiável. O fabricante pode ser considerado como confiável pelo verificador 702, e o verificador pode conhecer a chave pública PubRK 732 da chave raiz do fabricante 736. O cliente de enclave 510 da Figura 5 é um exemplo de um verificador 702 que pode querer ter garantias sobre um invólucro seguro 708. O fabricante pode agir como uma autoridade de certificação e prover a cada caso da plataforma confiável que produz, por exemplo, cada processador seguro, uma chave de atestação singular 722, a qual é usada para produzir assinaturas de atestação. O fabricante também envia um certificado de endosso 728 para cada chave de atestação 722. A chave raiz do fabricante 736 inclui uma chave privativa PrivRK 734 que é usada para assinar o certificado de endosso 728. A assinatura do certi
Petição 870190062354, de 04/07/2019, pág. 37/140
26/100 ficado de endosso confere uma garantia de integridade, por exemplo, tal como mostrado na Figura 3.
[0060] O certificado de endosso 728 inclui a chave pública PubAK 724 da chave de atestação 722. O certificado de endosso 728 pode indicar que a chave de atestação 722 deve ser usada para a atestação do software, e pode ser comunicado ao verificador 702. O verificador pode ser qualquer entidade que queira verificar uma atestação do invólucro seguro 708, por exemplo, o verificador 702 pode ser o cliente de enclave 510 da Figura 5 que quer que uma computação segura seja feita dentro do invólucro seguro 708. O verificador 702 pode inspecionar o certificado de endosso ao usar a PubRK 732 para verificar a integridade e a origem do certificado de endosso. O verificador também pode extrair a PubAK 724 do certificado de endosso. O certificado de endosso pode ser associado com uma política de certificação, o que pode requerer que a chave de atestação 722 seja usada para produzir somente assinaturas de atestação e que a chave privativa 726 da chave 722 da chave de atestação 726 seja mantida exclusivamente no armazenamento que é separado da memória de computador geralmente acessível da plataforma confiável, tal como no armazenamento de hardware resistente a violação 730. O hardware resistente a violação pode ser, por exemplo, um hardware que se conforma a um padrão Trusted Plataform Module (TPM).
[0061] Um invólucro seguro 708 pode ser instanciado na plataforma confiável 736. A instanciação do invólucro seguro 708 pode incluir a definição de um espaço de memória isolado para o invólucro seguro que é restringido no acesso por processamento não seguro. O processamento inseguro pode incluir, por exemplo, o acesso de fora da plataforma confiável, mas no computador que hospeda a plataforma confiável, ou o acesso dentro de outros invólucros seguros dentro da plataforma confiável. A instanciação do invólucro seguro 708 também pode
Petição 870190062354, de 04/07/2019, pág. 38/140
27/100 incluir o carregamento de código público e dados no invólucro seguro, por exemplo, o estado inicial 535 da Figura 5.
[0062] O invólucro seguro instanciado 708 pode trocar chaves com o verificador 702 para estabelecer uma chave compartilhada para uma comunicação confidencial. O processo de troca de chave pode ser o processo de troca de chave da Figura 5 ou o processo de DKE da Figura 6. O verificador envia a mensagem 1 de troca de chave 704 à plataforma confiável 736, por exemplo, tal como na caixa 616 da Figura 6, e a plataforma confiável 736 envia a mensagem 2 de troca de chave de volta ao verificador 702, por exemplo, tal como na caixa 658 da Figura 6.
[0063] A assinatura de atestação 710 pode ser criada depois que o invólucro seguro 708 é instanciado e a troca de chave é completada. O invólucro seguro instanciado 708 pode ser medido ao rodar uma função de comprovação criptográfica em todo ou em uma parte do invólucro seguro. Isto pode incluir a execução da função de comprovação no conteúdo da memória isolada, e as arquivos binários que são carregados na memória isolada, qualquer outra memória associada com a plataforma confiável que é usada ou afetada durante a instanciação do invólucro seguro, ou qualquer subconjunto ou porção destes. A saída da execução dessa função de comprovação é a medição 712, que faz parte da assinatura de atestação 710. Uma comprovação criptográfica das mensagens de troca de chave 704 e 706 também pode ser incluída com a assinatura de atestação 710, ilustrada como dados 714. A medição 712 e os dados 714 podem ser assinados ao usar a chave privativa de atestação PrivAK 726. A assinatura de atestação pode então ser enviada ao verificador 702 junto com a medição 712 e os dados 714. O verificador pode verificar a integridade da assinatura de atestação ao usar a PubAK 724 do certificado de endosso que, no exemplo da Figura 7, também permite a verificação da integridade da
Petição 870190062354, de 04/07/2019, pág. 39/140
28/100 medição 712 e dos dados 714. O verificador 702 pode verificar a integridade do invólucro seguro 708 ao comparar a medição 712 versus um resultado previsto (o resultado previsto determinado, por exemplo, pela execução local da mesma comprovação da medição 712), e verificar que a assinatura de atestação foi criada para este caso de passagem de comunicação do verificador 702 particular mediante a inspeção dos dados 714 (por exemplo, porque a comprovação dos dados 714 é amarrada à mensagem 2 de troca de chave 706). Depois dessas operações de verificação e da verificação do certificado de endosso acima, o verificador tem agora alguma garantia que pode estabelecer comunicações que têm a privacidade e a integridade com o invólucro seguro 708 ao usar uma chave compartilhada estabelecida, que o hardware de plataforma confiável pode ser confiável de acordo com seu fabricante, e que o estado de software da plataforma confiável usada para criar o invólucro seguro é conhecido. O verificador 702 está agora pronto para solicitar o processamento seguro dentro do invólucro seguro 708 ao usar um código privativo e/ou dados privativos.
PLATAFORMA DE ABSTRAÇÃO DE ENCLAVE E ELEMENTOS PRIMITIVOS [0064] A Figura 8 é um diagrama de blocos de interfaces de componentes de software para um sistema de enclave local exemplificador. O sistema de enclave 800 inclui um computador 810 com a plataforma de enclave nativa 812 hospedando o enclave 814 e um cliente 816 do enclave. A plataforma nativa 812 pode ser um componente de hardware e/ou de software baseado, por exemplo, em SGX da Intel ou em VSM da Microsoft. O enclave 810 pode ser o enclave 176 da Figura 1. Um protocolo nativo 844 para enclaves pode ser usado para uma comunicação entre o enclave 814, o cliente 816 e a plataforma nativa 812. Tal como ilustrado na Figura 8, o protocolo nativo 844 inclui a interface 820 no enclave 814, as interfaces 822 e 824 na plataforma na
Petição 870190062354, de 04/07/2019, pág. 40/140
29/100 tiva, e a interface 826 no cliente. Essas interfaces podem ser APIs ou ABIs em componentes de software.
[0065] O uso dessas interfaces de software 820, 822, 824 e 826 pode incluir a transferência de controle de execução entre componentes de software. A transferência de controle pode incluir a execução de uma instrução de chamada ou de salto para um ponto de entrada (um endereço de uma instrução) no componente de software ao qual o controle está sendo transferido. Por exemplo, se a plataforma nativa 812 for um componente de software, a transferência de controle da plataforma nativa 812 para o cliente 816 pode ocorrer através da interface de software 826 quando uma instrução de chamada ou de salto na plataforma nativa 812 é executada especificando um endereço dentro do cliente 816 a ser chamado ou saltado. O endereço especificado dentro do cliente 816 pode ser um ponto de entrada para uma função ou um método na interface 816. A transferência de controle é indicada como uma seta na Figura 8, por exemplo: da plataforma nativa 812 ao enclave 814 através da interface 820; do enclave 814 à plataforma nativa 812 através da interface 822; do cliente 816 à plataforma nativa 812 através da interface 824, e da plataforma nativa 812 ao cliente 816 através da interface 826. Um protocolo nativo 844 pode incluir padrões de comunicação através das interfaces 820, 822, 824 e 826.
[0066] Em algumas modalidades, a plataforma nativa 812 pode ser executada pelo menos em parte como um componente de hardware, por exemplo, com instruções especiais do processador para controlar um enclave. Tal instrução especial de hardware pode ser executada como parte de um componente de software nativo da plataforma 812. Em modalidades alternativas, pode não haver nenhum componente de software para algumas ou todas as funções da plataforma nativa 812. Nessas modalidades alternativas, as interfaces de plataformas nativas 822 e 824 podem ser instruções de hardware em vez dos pontos de
Petição 870190062354, de 04/07/2019, pág. 41/140
30/100 entrada do software, de modo que uma função da plataforma nativa 812 pode ser usada pelo enclave 814 ou cliente 816 ou pode ser usada ao executar uma instrução de hardware especial de preferência no enclave 814 ou cliente 816, respectivamente, em vez de executar uma instrução de chamada ou de salto.
[0067] Em algumas modalidades, o próprio cliente 816 do enclave 814 pode ser um enclave. Por exemplo, um cliente de enclave 816 pode usar a interface 824 para pedir que o enclave 814 seja criado. Nestas modalidades, uma comunicação entre o enclave 814 e o cliente 816 através da plataforma nativa 812 é realmente uma comunicação entre dois enclaves. Quando o cliente 816 também é um enclave, o cliente de enclave 816 também pode usar a interface 822 e expor uma interface similar a 820 (não ilustrado).
[0068] A Figura 9 é um diagrama de blocos de interfaces de componentes de software para um sistema de enclave local exemplificador com uma camada de abstração. O sistema de enclave 900 inclui uma plataforma de abstração 912 para a tradução entre o protocolo nativo 944 e os protocolos de abstração 940, 942. A plataforma nativa 918 pode ser similar à plataforma de abstração 812 da Figura 8, e as interfaces 928 e 930 podem combinar as funções das interfaces 820, 822, 824 e 825 da Figura 8. O protocolo de abstração de enclave 940 inclui as interfaces 920, 922 para o enclave 914, ao passo que o protocolo de abstração de cliente 942 inclui as interfaces 924, 926 para o cliente 916. Tal como na Figura 8, o cliente 916 que roda no computador 910 pode pedir a criação de enclave 914 através da interface 924. A camada de abstração 9122 pode causar a criação do enclave 914 ao usar o protocolo nativo 944 e as interfaces 928, 930 com a plataforma nativa 918. O cliente 916 e enclave 914 pode usar os protocolos de abstração 940 e 942 quando a plataforma nativa 918 e protocolo nativo 944 são baseados em arquiteturas de enclave diferentes, tais como
Petição 870190062354, de 04/07/2019, pág. 42/140
31/100
SGX da Intel ou VSM da Microsoft. Tal como na Figura 8, o próprio cliente de enclave 916 914 pode ser um enclave, e a plataforma nativa 918 pode incluir componentes de hardware e/ou de software.
[0069] O enclave 914 e o cliente 916 podem não se comunicar diretamente e podem de preferência se comunicar somente através da plataforma de abstração 912. Uma comunicação direta pode não ser possível ou desejável, por exemplo, devido ao isolamento da memória de enclave 914. O isolamento da memória de enclave pode impedir a leitura a partir de, a gravação em, ou a execução (saltando para dentro ou fora de) da memória isolada do enclave.
[0070] O enclave 914 pode incluir instruções localizadas dentro de um invólucro seguro de enclave do computador 910. O cliente 916 pode incluir instruções localizadas no espaço de endereço da memória do computador 910, mas fora do invólucro seguro de enclave 914. A plataforma de abstração 912 pode ser executada de várias maneiras, inclusive como instruções que estão dentro ou fora do invólucro seguro de enclave 914, e também pode incluir as instruções executadas dentro das hiperchamadas. No caso em que a plataforma de abstração 912 é incluída pelo menos em parte dentro do invólucro seguro de enclave 914, o código da plataforma de abstração dentro do invólucro seguro pode ser criado separadamente do restante do código de enclave 914 e só pode interagir com o outro código de enclave através de APIs/ABIs públicas. Tal código da plataforma de abstração pode ser estaticamente ligado ou dinamicamente ligado ao restante do código dentro do invólucro seguro de enclave. O código da plataforma de abstração estaticamente ligado pode ser o código objeto que é associado com a plataforma de abstração e é incluído (ligado estaticamente), junto com o código que é mais específico para o enclave 914, em uma imagem binária da qual o enclave 914 pode ser instanciado. No exemplo de uma plataforma de abstração dinamicamente ligada, o código
Petição 870190062354, de 04/07/2019, pág. 43/140
32/100 de enclave que é mais específico para o enclave 914 e o código associado mais geralmente com a plataforma de abstração podem ser provenientes de imagens binárias separadas. Para um exemplo dinamicamente ligado, vide a Figura 14.
[0071] A Figura 10 é um diagrama de blocos de interfaces de componentes de software para um sistema de enclave remoto exemplificador com uma camada de abstração. O sistema de enclave remoto 1000 inclui um enclave 1014 no computador 1010, e um cliente 1056 do enclave 1014 em um computador separado 1050. A combinação do tronco 1016 do cliente e da plataforma remota de abstração 1052 pode facilitar a interação entre o enclave 1014 e o cliente 1056. Muitos elementos no computador 1010 podem ser idênticos ou similares aos elementos identicamente nomeados do computador 910 da Figura 9. Em particular, a plataforma de abstração 1012, os protocolos 1040, 1042, 1044, e a plataforma nativa 1018 podem ser similares ou idênticos aos elementos correspondentes 912, 940, 942, 944, e 918, respectivamente.
[0072] O tronco 1016 do cliente pode se comunicar com a plataforma remota de abstração 1052 através de uma comunicação de rede 1080. O protocolo de cliente remoto 1082 e as interfaces 1064, 1066 podem ser similares ao protocolo de abstração de cliente 1042 e às interfaces 1024, 1026. No entanto, o protocolo de cliente remoto pode incluir a funcionalidade adicional para controle remoto. Por exemplo, um método na interface 1064 tal como CreateEnclave para pedir a criação de um enclave pode incluir ainda a capacidade de especificar um computador host de enclave, tal como o computador 1010, onde é pedida a criação de um enclave. Uma citação de atestação do enclave 1014 fornecida ao cliente 1056 através do protocolo de cliente remoto pode ser fornecida ao invés de, ou além de, um relatório de atestação. O computador 1050 com o cliente 1056 pode ou não incluir uma plata
Petição 870190062354, de 04/07/2019, pág. 44/140
33/100 forma de enclave nativa 1058. Se a plataforma nativa 1058 estiver presente, ela pode ou não se conformar à plataforma nativa de arquitetura de enclave de amostra 1018, e desse modo o protocolo nativo 1044 e o protocolo nativo remoto 1084 podem não ser o mesmo.
[0073] Em uma modalidade alternativa (não ilustrada), o tronco de cliente 1016 pode não existir, e a plataforma de abstração 1012 pode se comunicar diretamente com a plataforma de abstração remota 1052 por uma rede.
[0074] Protocolos de abstração de enclave, tais como 940, 942, 1040, 1042, 1082 das Figuras 9 e 10, podem incluir uma variedade de métodos da interface ou pontos de entrada para controlar e usar os enclaves que são construídos em múltiplas plataformas nativas, tais como SGX da Intel e VSM da Microsoft Esses métodos podem prover elementos primitivos de enclave que podem ser executados em múltiplas plataformas nativas, provendo desse modo uma abstração das plataformas nativas. Os elementos primitivos de enclave aqui divulgados incluem o gerenciamento do ciclo de vida do enclave, a atestação, a travação dos dados, a transferência de controle, os contadores monotônicos, e o tempo confiável.
[0075] Os elementos primitivos para o gerenciamento do ciclo de vida do enclave podem incluir métodos para causar a instanciação ou a terminação de um enclave tal como o enclave 914. Os elementos primitivos de gerenciamento do ciclo de vida podem fazer parte do protocolo de abstração de cliente 942 e, mais especificamente, podem ser implementados pela plataforma de abstração 912 como parte da interface 924 para o uso pelo cliente 916.
[0076] Um método para a instanciação ou criação de um enclave pode incluir a especificação ode uma imagem executável do código e/ou dos dados a serem carregados na memória isolada do invólucro seguro de enclave. Esse código, antes ou depois de ser carregado no
Petição 870190062354, de 04/07/2019, pág. 45/140
34/100 invólucro de enclave, pode se tornar parte do estado inicial usado para a atestação do enclave instanciado (tal como explicado acima no que diz respeito à Figura 5). Por exemplo, a imagem executável de um enclave (um enclave binário) pode ser especificada por um cliente de enclave mediante a provisão de um apontador a um buffer na memória que contém a imagem executável. Alternativamente, uma imagem de enclave pode ser especificada mediante a indicação de um arquivo em um sistema de arquivos que contém o enclave binário. Em algumas modalidades, a imagem especificada de enclave pode ser criptografada; em outras modalidades, o enclave pode não ser criptografado; em outras modalidades, o enclave pode ser parcialmente criptografado. A medição do enclave binário para a atestação pode ocorrer em uma imagem executável criptografada ou após a descriptografia.
[0077] O código e/ou os dados a ser carregados inicialmente em um enclave podem ser indicados mediante a especificação de um arquivo que contém uma imagem primária do enclave. Além desse código e/ou dados, uma imagem primária do enclave pode incluir metadados adicionais, tal como um tamanho desejado de enclave (a quantidade de memória requerida dentro do invólucro de enclave), as localizações de pontos de entrada dentro do código no arquivo, e uma lista de arquivos dependentes da imagem. Os arquivos dependentes de imagem são outros arquivos de imagem (não primária) que também podem ser carregados no enclave junto com o código e os dados no arquivo de imagem primária. Os próprios arquivos de imagem dependente podem conter listas de outros arquivos de imagem dependente. No caso do sistema de enclave local da Figura 9, as imagens primárias e dependentes podem ser arquivadas em qualquer dispositivo de armazenamento acessível, tal como através de um sistema de arquivos localmente acessível. No caso do sistema de enclave remoto da Figura 10, o arquivo de imagem primária pode estar em qualquer dis
Petição 870190062354, de 04/07/2019, pág. 46/140
35/100 positivo de armazenamento acessível ao computador 1010 ou ao computador 1050. Se o cliente 1056 pedir a criação de um enclave no computador 1010 ao usar uma imagem primária localizada no computador 1050, a plataforma remota de abstração e o tronco de cliente 1016 podem coordenar para copiar o arquivo de imagem primária especificada no computador 1010.
[0078] CreateEnclave é um método exemplificador para a instanciação de um enclave. O método CreateEnclave pode ser descrito com pseudocódigo:
HANDLE
CreateEnclave( ln_ PCWSTR ln_ DWORD
In DWORD enclavePath, flEnclaveType, dwFlags, ln_reads_bytes_(dwlnfoLength)
PCVOID ln_ DWORD
Out_opt_PDWORD enclaveinformation, dwInfoLength, enclaveError [0079] O pseudocódigo usado para descrever os métodos no presente documento pode usar várias convenções de pseudocódigo para definir interfaces da API. Por exemplo, os parâmetros de função, tais como enclavePath acima, podem ser decorados com _ln ou _Out_ para indicar respectivamente que um parâmetro é um parâmetro de entrada ou de saída. _Out_opt_ pode indicar um parâmetro de saída opcional. Todas as palavras em maiúsculas podem indicar um tipo de dados. HANDLE pode ser um número, tal como um número de 32 bits, usado para se referir indiretamente a algo. Por exemplo, o método de CreateEnclave acima retorna um HANDLE ao chamador de CreateEn clave, e esse HANDLE pode ser uma alça de enclave que foi criada;
Petição 870190062354, de 04/07/2019, pág. 47/140
36/100
PCWSTR pode ser um apontador para um certo tipo de corda de texto; DWORD pode ser uma quantidade de 32 bits não assinada; PCVOID pode ser um apontador para os dados de tipo não específico; BOOL pode ser um valor binário.
[0080] CreateEnclave pode permitir que um cliente, tal como o cliente 916, crie um enclave e carregue a imagem primária dentro do enclave. Qualquer informação da configuração de enclave nessa imagem pode ser associada com o enclave instanciado. CreateEnclave pode incluir os parâmetros a seguir:
IpEnclaveName: pode especificar a passagem para a imagem primária de enclave, que nas implementações pode ser algum outro tipo de identificador para identificar o código e/ou os dados da imagem primária de enclave, tal como uma alça para um arquivo aberto, um identificador de recurso uniforme (URI), ou um identificador que é usado em uma consulta externa. Por exemplo, um identificador globalmente singular (GUID) pode ser usado como uma chave em um banco de dados de imagens primárias. Em outras implementações, este parâmetro pode identificar uma região de memória que contém a imagem primária do enclave.
flEnclaveType: pode especificar o tipo de enclave para criar (no caso em que uma imagem de imagem suporta múltiplos tipos). Pode ser ajustado a DEFAULT no caso em que o binário suporta somente um enclave ou o desenvolvedor especificou explicitamente um default. dwFlags: pode especificar uma ou mais ações predeterminadas a serem tomadas ao criar enclaves e ao carregar a imagem primária do enclave.
enclaveinformation: pode ser um parâmetro de entrada opcional para a configuração em tempo de execução do enclave.
IpEnclaveError: pode especificar um parâmetro opcional para retornar um código de erro específico da arquitetura.
Petição 870190062354, de 04/07/2019, pág. 48/140
37/100 [0081] Com a conclusão bem sucedida, CreateEnclave pode retornar uma aba ao enclave. Com o erro, NULL pode ser retornado. Outros identificadores (GUID, URI, etc.) também podem ser retornados sem desviar do âmbito desta invenção. Para fins de simplificação, este relatório descritivo irá descrever as APIs ao usar uma alça. A criação de enclave pode falhar, por exemplo, devido à falta de memória de enclave, à falta de suporte para o tipo de enclave especificado na plataforma de abstração ou na plataforma nativa, ou a criação pode falhar devido às políticas de configuração explícitas que impedem que um enclave de um tipo específico rode no sistema.
[0082] As implementações de CreateEnclave e de outro método de API descritos a seguir podem excluir um ou mais dos parâmetros do método descritos. Por exemplo, no que diz respeito a CreateEnclave, o IpEnclaveName, o flEnclaveType, os dwFlags, e a enclaveinformation podem ser excluídos, ao usar um valor predeterminado específico para essa API particular. O argumento de IpEnclaveError também pode ser excluído da API, e os métodos alternativos para verificar se há erros na chamada da API podem ser opcionalmente implementados.
[0083] CreateEnclave pode ser responsável por carregar todos os módulos dependentes tal como especificado na imagem primária do enclave. A imagem primária do enclave pode ser um arquivo de execução portátil (PE) que especifica outros arquivos de imagem binária dos quais a imagem primária depende. CreateEnclave também pode executar a iniciação específica da plataforma nativa, tal como a finalização das medições para a atestação, a alocação de estruturas para a segurança da camada de transporte (TLS) e/ou outros protocolos chaves de concordância de chave e comunicação, etc. As interfaces do protocolo de abstração de enclave, 920 922 (incluindo os métodos, por exemplo, para a travação e a atestação de dados) podem ser operáveis uma vez que a iniciação de enclave tenha sido completada.
Petição 870190062354, de 04/07/2019, pág. 49/140
38/100 [0084] TerminateEnclave é um método exemplificador para terminar um enclave:
VOID
TerminateEnclave( _ln_ HANDLE hEnclave )
[0085] TerminateEnclave pode ser usado para destruir um enclave. Nas implementações, destruir um enclave pode incluir forçar todas as inserções de enclave para retornar ao host ou para terminar, e/ou liberar a memória associada com o enclave. A chamada de TerminateEnclave em um enclave rodando pode terminar o mesmo e liberar todos os recursos associados com o enclave.
[0086] A plataforma de abstração de enclave 912 pode incluir elementos primitivos de transferência de controle de execução que podem ser usados, por exemplo, para transferir o controle entre um enclave e seu cliente. Os elementos primitivos de transferência de controle de execução podem permitir uma comunicação entre o enclave 914 e o cliente 916 ao começar a execução do código em um ponto de entrada no outro componente. Os elementos primitivos de transferência de controle de execução permitem a passagem dos dados para dentro/para fora dos enclaves ao permitir que os parâmetros sejam associados com um pedido de transferência de controle; os parâmetros podem especificar itens de dados individuais (os próprios parâmetros são comunicados) ou os parâmetros podem ser apontadores para áreas de memória (os buffers apontados pelos parâmetros são comunicados). Esses elementos primitivos podem permitir a transferência de controle apesar das limitações na chamada ou no salto diretos entre o enclave 914 e cliente 916 devido às limitações de segurança no invólucro de enclave.
Petição 870190062354, de 04/07/2019, pág. 50/140
39/100 [0087] Para a chamada em urn enclave, a interface 924 pode incluir mecanismos para permitir que um cliente 916 convoque um enclave 914 através da interface 920. Por exemplo, a interface 924 pode incluir métodos de GetProcAddress e de CallEnclave:
typedefPVGID (*ENCPROC)(PVOID);
ENCPROC
GetProcAddress(l _ln_ HMODULE hEnclave, _ln_ LPCTSTR IpProcName )
BOOL
CallEnclaveln( _ln_ ENCPROC pCallin, _ln_ PVOID pParamente, _Out_ PVOID pReturn )
[0088] Um cliente de enclave, tal como o cliente 916, pode chamar um enclave, tal como o enclave 914, ao usar o apontador de função retornado por GetProc.Address(). O parâmetro de IpProcName pode combinar a função exportada na imagem primária de enclave. Por exemplo:
// Call Callin function for enclave.
ENCPROC PCallin = (ENCPROC) GetProcAddress(hEnclave, CallinExample);
PVOID pParameter; // Pointer to memory if (NULL ! = pCallin) {
CallEnclaveln(pCallin, pParameter);
}
Petição 870190062354, de 04/07/2019, pág. 51/140
40/100 [0089] Em outras modalidades de GetProcAddress, IpProcName pode ser um outro identificador da função exportada específica, tal como um número, tal como uma seleção de uma enumeração de pontos de entrada exportados de uma imagem de enclave, ou um outro identificador não textual que corresponde à função. Outras modalidades de CallEnclaveln também podem tomar um parâmetro de entrada que especifica o enclave a ser conclamado, por exemplo, CreateEnclave retornado à alça.
[0090] Ao chamar um enclave, uma inserção no processo do cliente pode ser suspensa e uma inserção de enclave (com a ID da inserção separada) pode ser usada para atender o pedido de chamada de entrada. O código de enclave, rodando na inserção de enclave, pode então ter acesso à memória que estava previamente disponível ao cliente de enclave antes da chamada no enclave. Por exemplo, o cliente pode colocar dados no buffer apontado por pParameter antes de chamar o método de abstração de CallEnclaveln, e então o enclave pode ter acesso ao buffer apontado pelo pParameter enquanto atende a chamada solicitada. Com a chamada, a inserção de chamada original (cliente) pode ser usada para atender o pedido de chamada de saída. A reentrada pode ser suportada (por exemplo, uma chamada de saída no host pode ser conclamada no enclave outra vez).
[0091] Para a chamada de saída de um enclave, a interface 922 pode incluir os métodos relacionados aos métodos de CallEnclaveln acima que permitem que um enclave 914 faça uma chamada de saída ao cliente de enclave 916. Por exemplo, o enclave 914 pode fazer a chamada de saída para qualquer função no processo do host de um tipo particular, por exemplo, o tipo da função de ENCPROC. O apontador da função para o mesmo pode ser passado ao usar os parâmetros de chamada de entrada ao enclave.
Petição 870190062354, de 04/07/2019, pág. 52/140
41/100
BOOL
CallEnclaveOut( _ln_ ENCPROC pCallout, _ln_ PVOID pParameter, _Out_ PVOID pReturn ) // Call out to function in host process ENCPROC pCallout = (ENCPROC) 0 x FOO; // address to same function in host
PVOID pParameter =// Pointer to memory CallEnclaveOut(pCallout, pSharedMemory);
[0092] A interface 920 pode incluir os pontos de entrada registrados como função de CallinExample acima, e a interface 926 pode incluir os pontos de entrada registrados como funções de Callout acima. Por exemplo, no caso em que uma imagem primária de enclave está em um formato de imagem executável imagem (PE), os pontos de entrada da função na imagem podem ser listados como pontos de entrada de exportação, e cada um tais pontos de entrada exportados pode incluir um nome textual, tal como CallinExample, para identificar e diferenciar os pontos de entrada nessa imagem PE de enclave; em outras implementações, os pontos de entrada da função podem ser marcados com metadados adicionais, tal como um bit que indica que uma função pode ser um ponto de entrada para o enclave. No exemplo acima para a chamada de saída de enclave, o endereço da função de chamada de saída é fornecido como 0 x F00 e é somente um exemplo. O endereço real de uma função de chamada de saída pode ser determinado em uma variedade de maneiras. Por exemplo, um endereço da função de chamada de saída dentro de um cliente pode ser passado ao enclave como um parâmetro para a função de chamada de entrada. Em um outro exemplo, o endereço de uma função de
Petição 870190062354, de 04/07/2019, pág. 53/140
42/100 chamada de saída pode ser registrado pelo cliente ao usar uma função tal como RegisterCallOut:
BOOL RegisterCallOut( _ln_ ENCPROC pCallout, _ln_ LPCTSTR IpProcName) [0093] O código dentro de enclave pode obter o endereço da função de chamada de saída ao chamar uma função complementar tal como GetCallOut:
BOOL GetCallOut( _Out_ ENCPROC *pCallout, _ln_ LPCTSTR IpProcName) [0094] Em outras modalidades, os métodos de CallEnclaveln e de CallEnclaveOut podem ser realmente o mesmo método. Por exemplo, um único método de Call Enclave pode ser usado para a chamada de entrada e a chamada de saída de um enclave. Nas situações em que o cliente de enclave 916 também é um enclave, a chamada de saída de enclave 914 ao cliente 916 também será a chamada de entrada de um enclave.
[0095] A plataforma de abstração 912 pode prover elementos primitivos para a travação de dados a um enclave. Por exemplo, a interface 922 pode fornecer serviços ao enclave 914, tais como a travação e a destravação de dados a uma identidade de enclave. Tal como explicado acima, um enclave pode ter múltiplas identidades aninhadas, e os dados podem ser travados a uma identidade. Quando os dados são travados a uma identidade que corresponde a um conjunto de instanciações possíveis de enclave, os dados travados podem ser destravados por qualquer instanciação desse conjunto correspondente de instanciações de enclave. Por exemplo:
Petição 870190062354, de 04/07/2019, pág. 54/140
43/100 struct SEALING POLICY {
ENCLAVE_ID_TYPE enclaveldType;
[0096] Para cada valor de enclaveldType, o enclave irá travar a uma ID de mapeamento. Os tipos possíveis de identidade de enclave (e os valores de enclaveldType) incluem:
ENCLAVE EXACTHASH
ENCLAVE INSTANCEHASH:
// seal using MRENCLAVE for SGX,
IMAGE HASH for VSM
ENCLAVE IMAGEIDS:
// not supported in SGX, will use IMAGE IDS for VSM
ENCLAVE FAMILYID:
// will use PRODUCTID for
SGX, FAMILY ID for VSM
ENCLAVE AUTHORID:
// will use MRSIGNER for de
SGX, AUTHOR ID for VSM [0097] A plataforma também pode aplicar uma configuração depuração (autorada e tempo de execução) à política de travação. Para diferentes políticas de depuração, diferentes chaves de travação podem ser usadas. Por exemplo, as configurações de depuração e liberação podem usar diferentes chaves de travação.
DWORD
EnclaveSeal( _ln_ SEALING POLICY sealingPolicy, _ln_reads_bytes_opt_(dwPlaintextSize) LPCVOID pPlaintext, _ln_ DWORD dwPlaintextSize, _ln_reads_bytes_opt_(dwpAuthdataSize) LPCVOID pAuthdata,
Petição 870190062354, de 04/07/2019, pág. 55/140
44/100 _ln_ DWORD dwAuthdataSize, _Out_writes_bytes_to_(dwSealedtextSize) LPVOID pSealedtext, _lnout_ DWORD *dwSealedtextSize )
DWORD
EnclaveUnseal( _ln_reads_bytes_opt_(dwSealedtextSize) LPCVOID pSealedtext, _ln_ DWORD dwSealedtextSize, _ln-reads_bytes-opt_(dwAuthdataSize) LPCVOID pAuthdata, _ln_ DWORD dwAuthdataSize, _Out_writes_bytes_to_(dwPlaintextSize) LPCVOID pPIaintext, _lnout_ DWORD * dwPlaintextSize )
[0098] A plataforma de abstração 912 pode prover elementos primitivos para a atestação, tal como para produzir relatórios de atestação e citações, e para verificar relatórios e citações. Por exemplo:
DWORD
CreateReport( _ln_reads_bytes_opt_(dwTargetlnfoSize) PCVOID pTargetlnfo, _ln_ DWORD dwTargetlnfoSize, _ln_reads_bytes_opt_(dwAuthData) PVOID pAuthData, _ln_ DWORD DwAuthData, _Out-writes-Bytes_opt_(*pReportSize) PVOID pReport, _lnout_ PDWORD pReportSize, _Out_opt_ PDWORD IpEnclaveError
Petição 870190062354, de 04/07/2019, pág. 56/140
45/100 )
DWORD
Verify Report( _ln_reads_bytes_(dwReportSize) PCVOID pReport, _ln_ DWORD dwReportSize, _Out_opt_ LPDWORD IpEnclaveError )
[0099] VerifyReport() pode ser usado por um enclave para afirmar a integridade do relatório e que o relatório foi gerado por um enclave na mesma máquina.
DWORD CreateQuote( _ln_ GUID quoteType, _ln_ DWORD authDataSize, _ln_reads_bytes_opt_(authDataSize) const BYTE* authData, _Out_ DWORD * quoteSize, _Outptr_result_bytebuffer_opt_(*quoteSize) BYTE** quote )
[00100] Em CreateQuote, quoteType pode mapear para um provedor de citações, que pode ser uma fonte de confiança para gerar as citações específicas. Em CreateQuote, authData pode ser um apontador para os dados que são criados, e em um formato definido, pelo chamador de CreateQuote. Nota: authData não precisa ser compreendido pela plataforma de abstração 912. authData pode ser acondicionado nas citações resultantes. Pode-se esperar que os provedores de citações suportem isto.
DWORD VerifyQuote( _ln_ DWORD quoteSize, _ln_reads_bytes_(quoteSize) const BYTE* quote,
Petição 870190062354, de 04/07/2019, pág. 57/140
46/100 _Out_ DWORD* reportSize, _Outptr_result_bytebuffer_all_(*reportSize) BYTE* report ) [00101] Além aos elementos primitivos de enclave descritos acima, uma plataforma de abstração de enclave pode prover: o gerenciamento da memória (por exemplo, alocar e liberar a memória, tal como a memória restringida a um enclave ou a memória que é compartilhada entre um enclave e seu cliente); a manipulação da exceção (por exemplo, para manipular o erro, ou as exceções, que ocorrem ao executar o código de enclave); a sincronização da inserção; e funções criptográficas (por exemplo, criptografia, funções de comprovação, e assinatura).
[00102] As técnicas descritas acima podem ser implementadas em um ou mais dispositivos ou ambientes de computação, tal como descrito a seguir. A Figura 11 ilustra um ambiente de computação de finalidades gerais exemplificador, por exemplo, que pode incorporar um ou mais dentre o hardware confiável 172, a plataforma confiável 736, ou os computadores 810, 910, 1010 e 1050, em que algumas das técnicas descritas no presente documento podem ser incorporadas. O ambiente de sistema de computação 1102 é somente um exemplo de um ambiente de computação apropriado e não se presta a sugerir nenhuma limitação no que diz respeito ao âmbito do uso ou da funcionalidade do objeto presentemente divulgado. Nem o ambiente de computação 1102 deve ser interpretado como tendo qualquer dependência ou requisito relacionados a qualquer um ou uma combinação dos componentes ilustrados no ambiente operacional exemplificador 1102. Em algumas modalidades, os vários elementos de computação ilustrados podem incluir os circuitos configurados para instanciar aspectos específicos da presente invenção. Por exemplo, o termo circuito usado na invenção pode incluir os componentes de hardware especializados
Petição 870190062354, de 04/07/2019, pág. 58/140
47/100 configurados para executar a(s) função(ões) por firmware ou comutadores. Em outras modalidades exemplificadoras, o termo circuito pode incluir uma unidade de processamento de finalidades gerais, uma memória, etc., configuradas pelas instruções de software que incorporam a lógica operável para executar a(s) função(ões). Nas modalidades exemplificadoras onde os circuitos incluem uma combinação de hardware e software, um implementador pode gravar o código fonte que incorpora a lógica, e o código fonte pode ser compilado no código que pode ser lido por máquina que pode ser processado pela unidade de processamento de finalidades gerais. Uma vez que o elemento versado na técnica pode apreciar que o estado da técnica evoluiu até um ponto em que há pouca diferença entre a hardware, o software, ou uma combinação de hardware/software, a seleção do hardware versus o software para executar funções específicas é uma escolha do projeto que fica a cargo de um implementador. Mais especificamente, um elemento versado no estado da técnica pode apreciar que um processo de software pode ser transformado em uma estrutura equivalente de hardware, e uma própria estrutura de hardware pode ser transformada em um processo equivalente de software. Desse modo, a seleção de uma implementação de hardware versus uma implementação de software é uma da escolha do projeto e fica a cargo do implementador.
[00103] O computador 1102, que pode incluir qualquer uma dentre um dispositivo móvel ou um smartphone, um tablet, um laptop, um computador do tipo desktop, ou uma coleção de dispositivos em rede, recursos de computação na nuvem, etc., e inclui tipicamente uma variedade de meios que podem ser lidos por computador. Os meios que podem ser lidos por computador podem ser quaisquer meios disponíveis que podem ser acessados pelo computador 1102 e incluem meios voláteis e meios não voláteis, meios removíveis e não removíveis. A
Petição 870190062354, de 04/07/2019, pág. 59/140
48/100 memória de sistema 1122 inclui meios de armazenamento que podem ser lidos por computador na forma de memória volátil e/ou não volátil, tais como a memória só de leitura (ROM) 1123 e a memória de acesso aleatório (RAM) 1160. Um sistema de entrada/saída básico 1124 (BIOS), contendo as rotinas básicas que ajudam a transferir informações entre os elementos dentro do computador 1102, tal como durante a inicialização, é armazenado tipicamente na ROM 1123. A RAM 1160 contém tipicamente módulos de dados e/ou de programa que são imediatamente acessíveis e/ou são presentemente operados pela unidade de processamento 1159. A título de exemplo, e não de limitação, a Figura 11 ilustra o hipervisor 1130, sistema operacional (OS) 1125, os programas aplicativos 1126, outros módulos de programa 1127 incluindo um cliente de enclave 1165, e o enclave 1128.
[00104] O computador 1102 também pode incluir outros meios de armazenamento em computador voláteis/não voláteis removíveis/não removíveis. A título de exemplo somente, a Figura 11 ilustra um drive de disco rígido 1138 que faz a leitura ou a gravação em meios magnéticos não voláteis não removíveis, um drive de disco magnético 1139 que faz a leitura ou a gravação em um disco magnético não volátil removível 1154, e um drive de disco óptico 1104 que faz a leitura ou a gravação em um disco óptico não volátil removível 1153, tal como um CD ROM ou outros meios ópticos. Outros meios de armazenamento em computador voláteis removíveis/não removíveis que podem ser usados no ambiente operacional exemplificador incluem, mas sem ficar a eles limitados, cassetes de fitas magnéticas, cartões de memória flash, discos versáteis digitais, fitas de vídeo digitais, RAM de estado sólido, ROM de estado sólido, e outros ainda. O drive de disco rígido 1138 é conectado tipicamente ao barramento do sistema 1121 através de uma interface de memória não removível como a interface 1134, e o drive de disco magnético 1139 e o drive de disco óptico 1104 são
Petição 870190062354, de 04/07/2019, pág. 60/140
49/100 conectados tipicamente ao barramento do sistema 1121 por uma interface de memória removível, tal como a interface 1135 ou 1136.
[00105] Os drives e seus meios de armazenamento em computador associados discutidos acima e ilustrados na Figura 11 propiciam o armazenamento de instruções que podem ser lidas por computador, estruturas de dados, módulos de programa e outros dados para o computador 1102. Na Figura 11, o drive de disco rígido 1138 é ilustrado, por exemplo, como armazenando o sistema operacional 1158, programas de aplicativos 1157, outros módulos de programa 1156, tais como aplicativos do cliente de enclave e arquivos binários de enclave, e dados de programa 1155. Deve ser observado que esses componentes podem ser idênticos ou diferentes ao sistema operacional 1125, aos programas de aplicativos 1126, a outros módulos de programa 1127, e aos dados de programa 1128. O sistema operacional 1158, os programas de aplicativos 1157, outros módulos de programa 1156, e os dados de programa 1155 recebem aqui números diferentes para ilustrar que, no mínimo, trata-se de cópias diferentes. Um usuário pode inserir comandos e informações no computador 1102 através de dispositivos de entrada tais como um teclado 1151 e o dispositivo apontador 1152, normalmente conhecido como mouse, um trackball ou uma almofada de toque. Outros dispositivos de entrada (não mostrados) podem incluir um microfone, um joystick, uma almofada de jogos, uma antena via satélite, um scanner, um scanner da retina, ou outros ainda. Estes e outros dispositivos de entrada são conectados frequentemente à unidade de processamento 1159 através de uma interface de entrada do usuário 1136 que é acoplada ao barramento do sistema 1121, mas podem ser conectados por outras estruturas de interface e barramento, tais como uma porta paralela, uma porta de jogos ou um barramento serial universal (USB). Um monitor 1142 ou outros tipos de dispositivo de exibição também são conectados ao barramento do sis
Petição 870190062354, de 04/07/2019, pág. 61/140
50/100 tema 1121 através de uma interface, tal como uma interface de vídeo 1132. Além do monitor, os computadores também podem incluir outros dispositivos de saída periféricos tais como os alto-falantes 1144 e a impressora 1143, que podem ser conectados através de uma interface periférica de saída 1133.
[00106] O computador 1102 pode operar em um ambiente em rede ao usar conexões lógicas a um ou mais computadores remotos, tal como um computador remoto 1146. O computador remoto 1146 pode ser um computador pessoal, um servidor, um roteador, um PC de rede, um dispositivo de par ou um outro nó de rede comum, e inclui tipicamente muitos ou todos os elementos descritos acima em relação ao computador 1102, embora somente um dispositivo de armazenamento na memória 1147 seja ilustrado na Figura 11. As conexões lógicas ilustradas na Figura 11 incluem uma rede de área local (LAN) 1145 e uma rede de área ampla (WAN) 1149, mas também podem incluir outras redes. Tais ambientes de comunicação interrede são lugar comum nos escritórios, em redes de computadores de grandes empresas, em intranets, na Internet, e em recursos de computação em nuvem.
[00107] Quando usado em um ambiente de comunicação interrede de LAN, o computador 1102 é conectado à LAN 1145 através de uma interface de rede ou um adaptador 1137. Quando usado em um ambiente de comunicação interrede de WAN, o computador 1102 inclui tipicamente um modem 1105 ou outros meios para estabelecer comunicações através da WAN 1149, tal como o Internet. O modem 1105, que pode ser interno ou externo, pode ser conectado ao barramento do sistema 1121 através da interface de entrada do usuário 1136, ou a um outro mecanismo apropriado. Em um ambiente de comunicação interrede, os módulos de programa ilustrados em relação ao computador 1102, ou porções do mesmo, podem ser armazenados no dispositivo de armazenamento em memória remoto. A título de exemplo, e
Petição 870190062354, de 04/07/2019, pág. 62/140
51/100 não de limitação, a Figura 11 ilustra os programas de aplicativos remotos 1148 como residindo no dispositivo de memória 1147. Deve ser apreciado que as conexões de rede mostradas são exemplificadoras e outros meios para estabelecer um link de comunicações entre os computadores podem ser usados.
[00108] A Figura 12 ilustra um fluxograma exemplificador para um método 1200 de abstração de uma plataforma de enclave nativa. Uma plataforma de abstração, tal como 912 na Figura 9, pode receber um pedido para uma plataforma de enclave na caixa 1202. O pedido pode vir de um cliente de enclave, tal como o cliente 914, ou de um enclave, tal como o enclave 916.
[00109] Um pedido de um enclave pode ser um pedido para executar uma plataforma de abstração primitiva e pode incluir, por exemplo, um pedido para: criar um relatório de atestação ou citação de um enclave; travar os dados ao enclave; chamar uma função no cliente de um enclave (chamada de saída para o cliente); ler um contador monotônico (fornecer o valor atual de um contador monotônico); prover uma medição de tempo confiável; e alocar a memória que pode ser compartilhada entre um enclave e seu cliente (por exemplo, para permitir que um apontador para a memória compartilhada seja passado como um parâmetro quando é feita uma chamada de entrada ou de saída de um enclave). Em algumas modalidades, o espaço de memória virtual inteiro de um cliente de enclave pode ser compartilhado com (e acessível a partir de) o enclave, de maneira tal que um pedido para alocar a memória compartilhada pode ser implementado como um pedido para alocar a memória para o cliente de enclave. Em algumas modalidades, os métodos para alocar a memória compartilhada ficam disponíveis a um enclave e ao seu cliente.
[00110] Um pedido de um cliente de enclave pode ser um pedido para executar um elemento primitivo de plataforma de abstração e poPetição 870190062354, de 04/07/2019, pág. 63/140
52/100 de incluir, por exemplo, um pedido para: instanciar um enclave; verificar um relatório de atestação de um enclave; chamar uma função dentro de um enclave (chamada de entrada de um enclave); e alocar a memória que pode ser compartilhada entre um enclave e o seu cliente. [00111] Um pedido de plataforma de abstração pode ser traduzido em um pedido de plataforma nativa nas operações 1204-1208. Os parâmetros incluídos ou implicados no pedido recebido podem ser convertidos na etapa opcional 1204 se for determinado, por exemplo, que o formato de dados de um parâmetro no pedido original não é o mesmo que o formato de dados para esse parâmetro na plataforma nativa. Por exemplo, se um pedido de um enclave ou de um cliente incluir um parâmetro derivado de um relatório de atestação de formato de abstração, tal como uma identidade de abstração de enclave, ele será convertido em um parâmetro usado em um relatório de atestação de formato nativo, tal como uma identidade de enclave nativa.
[00112] Se for determinado que a convenção de chamada da plataforma nativa e do pedido recebido difere, a convenção de chamada pode ser convertida na etapa opcional 1206. Uma convenção de chamada pode ser convertida, por exemplo, ao reordenar os parâmetros em uma pilha de chamadas, ao mover os parâmetros entre registros do processador e uma pilha de chamada, e ao converter entre métodos de comunicação de condição de erro tal como o retorno de um valor de erro e a chamada de um manipulador de exceção.
[00113] Em algumas modalidades, a plataforma nativa pode ser idêntica à plataforma de abstração para alguns pedidos, em cujo caso as operações de conversão da caixa 1204 e 1206 podem ser saltadas. [00114] Na caixa 1208, o pedido convertido é enviado à plataforma nativa para fazer com que o pedido seja executado pela plataforma nativa. Por exemplo, no caso em que a plataforma nativa se conforma à arquitetura de enclave de Software Guard Extensions (SGX) da Intel,
Petição 870190062354, de 04/07/2019, pág. 64/140
53/100 a plataforma nativa pode incluir instruções do processador para enclaves. Neste caso, o envio do pedido na caixa 1208 pode incluir a execução de uma ou mais instruções do processador para enclaves. Em um outro exemplo, a plataforma nativa pode se conformar à arquitetura de enclave de Virtual Secure Mode (VSM) da Microsoft, que pode incluir um hipervisor com hiperchamadas para enclaves. Uma hiperchamada é uma armadilha de software para o código do hipervisor, e uma hiperchamada pode causar uma mudança do contexto do processador para um contexto em que operações privilegiadas podem ser permitidas. Neste exemplo de VSM, o envio do pedido na caixa 1208 pode incluir fazer hiperchamadas ao hipervisor e/ou outros mecanismos para comutar o contexto de execução em um contexto em que operações privilegiadas podem ser permitidas.
[00115] O envio de um pedido a uma plataforma nativa se refere aqui de modo geral à execução do pedido ao usar as características da plataforma nativa. A operação de envio do pedido à plataforma nativa 1208 pode envolver múltiplas operações com a plataforma nativa, e pode variar dependendo da operação (ou do elemento primitivo) solicitada, tal como a criação de um enclave, a atestação, a travação de dados, a transferência de controle, ou o uso de contadores monotônicos e tempo confiável.
[00116] O elemento primitivo de CreateEnclave pode ser usado para instanciar um enclave. Um pedido de CreateEnclave para instanciar um enclave pode fazer com que uma plataforma de abstração crie um invólucro seguro (por exemplo, ao alocar alguma memória e ao estabelecer um limite de segurança ou isolamento para essa memória), copie o código de enclave nesse invólucro seguro (por exemplo, de uma imagem de enclave), e configure ou permita pontos de entrada no código de enclave (por exemplo, de acordo com os metadados do ponto de entrada em uma imagem de enclave).
Petição 870190062354, de 04/07/2019, pág. 65/140
54/100 [00117] O envio de um pedido de CreateEnclave a uma plataforma nativa com um hipervisor habilitado por enclave (um hipervisor que provê funções de gerenciamento de enclave, tal como VSM), pode incluir alocar a memória e fazer hiperchamadas para configurar tabelas de páginas do processador para a memória de uma maneira que impede que o código fora do invólucro de enclave acesse essa memória. As hiperchamadas de criação de enclave da plataforma de abstração também podem fazer com que o hipervisor configure a informação da configuração para a transferência de controle no enclave em pontos de entrada designados. Mais tarde, o código fora do invólucro seguro pode fazer hiperchamadas de transferência de controle para transferir a execução nos pontos de entrada designados dentro do invólucro seguro.
[00118] O envio de um pedido de CreateEnclave a uma plataforma nativa com um processador habilitado por enclave (um processador com instruções do processador de gerenciamento de enclave, tal como SGX), pode incluir a execução pela plataforma de abstração de uma instrução tal como ECREATE para informar a CPU que uma certa uma área de memória deve ser criada como um invólucro de enclave seguro, e a execução de uma instrução tal como EADD para adicionar páginas de dados a esse invólucro de enclave. Instruções especiais do processador também podem ser usadas para a criação de páginas especiais na memória para designar os pontos de entrada no enclave para a transferência de controle no enclave. Mais tarde, o código fora do invólucro seguro pode executar uma instrução tal como EENTER especificando um dos pontos de entrada designados para transferir o controle da execução a esse ponto de entrada de enclave.
[00119] O elemento primitivo de CreateReport pode ser usado para criar um relatório de atestação. Um pedido de CreateReport para criar um relatório de atestação de um enclave pode ser executado por uma
Petição 870190062354, de 04/07/2019, pág. 66/140
55/100 camada de abstração tal como explicado acima com relação às Figuras 5 e 7. Com um hipervisor habilitado por enclave, uma camada de abstração pode enviar o pedido à plataforma nativa ao fazer uma hiperchamada que muda o estado da execução, por exemplo, para um contexto do monitor de segurança que tem acesso a uma chave secreta tal como Priv AK726 da Figura 7 que pode ser usada nos relatórios assinados. Esta chave secreta só pode ficar disponível ao contexto do monitor de segurança se o computador for carregado em uma configuração saudável tal como verificado com um registro de TCG com base em um TPM. O monitor de segurança pode etiquetar os dados do relatório com uma identidade de enclave que está sendo atestada.
[00120] Com um processador habilitado por enclave, um pedido de CreateReport pode ser enviado à plataforma nativa mediante a execução de uma instrução, tal como EREPORT, que gera um relatório e envia o mesmo a um enclave especial que tem acesso a uma chave privativa para a assinatura de relatórios.
[00121] O elemento primitivo de EnclaveSeal pode ser usado para travar dados a um enclave. A travação dos dados a um enclave criptografa os dados de uma maneira ou com uma chave que é associada com o enclave. Um pedido de EnclaveSeal pode ser um pedido para travar os dados localizados dentro de um enclave, tal como todo ou uma parte do estado de enclave, ao enclave ao usar uma política de travação. A política de travação, tal como SEALING_POLICY acima, pode especificar um tipo de identidade de enclave que indique quais os enclaves que irão poder destravar os dados. Os próprios processos de travação podem usar uma chave de criptografia associada com a identidade de enclave especificada na política de travação. Mais tarde, uma nova instanciação de enclave vai poder destravar os dados se o novo valor da identidade de enclave no tipo específico de identidade
Petição 870190062354, de 04/07/2019, pág. 67/140
56/100 for o mesmo que o valor da identidade de enclave de travação no tipo específico de identidade.
[00122] a travação dos dados permite que dados de enclave secretos ou sensíveis sejam copiados com segurança para um armazenamento não seguro, tal como na memória fora do invólucro seguro do enclave ou um armazenamento persistente tal como um disco rígido. Quando os dados travados são dados do estado do enclave, a travação permite que um enclave seja restaurado a um estado precedente, e permite que uma operação segura de enclave seja interrompida e continuada mais tarde em um outro enclave.
[00123] Para restaurar um estado de enclave, em primeiro lugar o estado de um enclave é salvo mediante a travação do seu estado ao enclave. A travação pode ser feita ao criptografar os dados do estado com uma chave associada com o enclave. Mais tarde, talvez depois que o estado do enclave tenha sido alterado, os dados do estado travados podem ser destravados ao mesmo enclave mediante a descriptografia dos dados travados e então a substituição de um estado atual de enclave com os dados descriptografados (por exemplo, ao copiar os dados descriptografados no invólucro seguro do enclave).
[00124] Para interromper uma operação segura e continuar em um outro enclave, a operação segura começa mediante a execução de uma operação que compreende múltiplas instruções do processador em um primeiro enclave. Quando o primeiro enclave é interrompido, o estado desse enclave pode ser travado a uma identidade de enclave especificada na política de travação, e os dados travados podem então ser salvos em um armazenamento não seguro, tal como o armazenamento persistente local ou baseado em nuvem. O primeiro enclave pode (opcionalmente) ser terminado ou então iniciar outras operações de enclave. Um segundo enclave pode ser instanciado ou redesignado para continuar a operação interrompida mediante a destravação dos
Petição 870190062354, de 04/07/2019, pág. 68/140
57/100 dados travados do estado no segundo enclave. A operação interrompida pode ser continuada no segundo enclave onde o primeiro enclave ficou desativado.
[00125] Com um hipervisor habilitado por enclave, uma camada de abstração pode enviar um pedido de EnclaveSeal à plataforma nativa ao fazer uma hiperchamada. A hiperchamada pode mudar o estado da execução para um contexto, por exemplo, um contexto do monitor de segurança, que tem acesso a uma chave de travação secreta associada com o enclave que pode ser usado para travar ou destravar os dados. A chave de travação pode ser derivada de uma combinação de uma identidade de enclave e de uma chave secreta da plataforma disponíveis somente ao monitor de segurança. Essa chave da plataforma só pode ficar disponível ao monitor de segurança quando a máquina for carregada em uma configuração saudável, e a configuração de boot é verificada com um registro de TCG com base em um TPM. Nesta modalidade do hipervisor habilitado por enclave, o código de enclave nunca tem acesso à chave do de travação.
[00126] Com um processador habilitado por enclave, um pedido de EnclaveSeal pode ser enviado à plataforma nativa mediante a execução de uma instrução, tal como EGETKEY, para obter uma chave de criptografia. Este algoritmo pode gerar uma chave de travação que é singular para o enclave. A chave de travação pode ser derivada de uma identidade de enclave e de um segredo embutido no processador. O código dentro de um enclave pode então cifrar os dados com a chave de travação. Os dados podem ser travados por meio de criptografia com a chave de travação, por exemplo, pelo código dentro de um enclave, por uma plataforma de abstração, ou por uma plataforma nativa. EnclaveUnseal pode usar similarmente EGETKEY para gerar a chave de destravação.
Petição 870190062354, de 04/07/2019, pág. 69/140
58/100 [00127] Um pedido de transferência de controle pode ser um pedido para transferir o controle de execução do processador das instruções dentro de um enclave para fora para um ponto de entrada fora do enclave (por exemplo, CallEnclaveOut), ou o inverso das instruções fora do enclave para um ponto de entrada dentro do enclave (por exemplo, CallEnclaveln). Isto pode ser feito, por exemplo, para uma operação segura de bancos de dados. Após a instanciação de um enclave de banco de dados, um cliente de enclave pode pedir que o enclave execute uma operação específica, tal como uma pergunta do banco de dados ao usar o elemento primitivo de CallEnclaveln para transferir o controle a um ponto de entrada dentro do enclave do banco de dados que irá fazer a pergunta. Depois que o enclave completa a pergunta, o resultado da pergunta pode ser retornado (possivelmente depois de ter criptografado o resultado) ao cliente com o elemento primitivo de CallEnclaveOut para transferir o controle de volta ao cliente em um ponto de entrada no cliente que pode receber o resultado da pergunta. Os elementos primitivos de CallEnclaveln e de CallEnclaveOut podem tomar um apontador para um buffer da memória que pode ser compartilhado entre um enclave e seu cliente (o buffer pode ser legível, gravável e/ou executável pelo enclave ou por seu cliente).
[00128] Com um hipervisor habilitado por enclave, uma camada de abstração pode enviar um pedido de CallEnclaveln à plataforma nativa ao fazer uma hiperchamada. A hiperchamada pode mudar o estado da execução para um contexto, por exemplo, um contexto do monitor de segurança, que irá salvar os registros da CPU, restaurar um conjunto previamente salvo de valores de registro da CPU do enclave (possivelmente da memória do enclave), mudar a configuração da tabela de página para permitir acesso à memória protegida do enclave, e invocar um ponto de entrada da função dentro de enclave. Similarmente, quando uma plataforma de abstração recebe um pedido de CallEncla
Petição 870190062354, de 04/07/2019, pág. 70/140
59/100 veOut, o pedido pode ser enviado para a plataforma nativa por uma hiperchamada que irá salvar os registros da CPU do enclave (possivelmente salvando na memória do enclave) e restaurar os registros da CPU previamente salvos para um cliente de enclave, mudar a configuração da tabela de página para impedir o acesso à memória do enclave, e transferir o controle do processador a um ponto de entrada no cliente do enclave fora do enclave.
[00129] Com um processador habilitado por enclave, um pedido de CallEnclaveln pode ser enviado à plataforma nativa mediante a execução de uma instrução, tal como EENTER, que pode fazer com que a CPU restaure um conjunto de registos da CPU do enclave (possivelmente da memória do enclave) e invoque uma função (controle de transferência a um ponto de entrada) dentro do enclave. Um elemento primitivo de CallEnclaveOut pode executar uma instrução, tal como EEXIT, que pode transferir o controle às instruções fora do enclave e/ou causar uma falha que transfere o controle fora do enclave.
[00130] O contador monotônico tem uma variedade de usos. Por exemplo, um enclave pode querer restringir o ponto até o qual o seu estado pode ser revertido de volta. Os contadores monotônicos podem ser usados, por exemplo, como um nonce para garantir a novidade das mensagens, tal como discutido acima com o respeito à Figura 4. Os contadores monotônicos têm geralmente a capacidade de serem lidos, e de serem incrementados, mas não podem ser decrementados. Para restringir a repetição ou a reversão do estado de um enclave, o código dentro de um enclave pode incrementar um contador monotônico associado, e então salvar o valor do contador junto com o estado interno do enclave. O estado e o valor contrário podem ser salvos, por exemplo, com o elemento primitivo de EnclaveSeal. Mais tarde, ao restaurar o estado do enclave, por exemplo, ao usar o elemento primitivo de EnclaveUnseal, o código dentro do enclave pode ler o valor atual
Petição 870190062354, de 04/07/2019, pág. 71/140
60/100 do contador monotônico e comparar o mesmo ao valor contrário com o estado não travado. Se o valor do contador com o estado não travado for menor do que o valor atual do contador, o enclave pode impedir o uso do estado não travado.
[00131] Com um hipervisor habilitado por enclave, uma camada de abstração pode enviar um pedido à plataforma nativa para ler ou incrementar um contador monotônico ao fazer uma hiperchamada que é exposta ao enclave. Quando uma hiperchamada para ler ou incrementar o contador é invocada, o processador irá mudar o estado da execução para um contexto, tal como um monitor de segurança, que irá verificar a identidade do enclave que está fazendo a hiperchamada, e então vai ler ou incrementar, respectivamente, o contador monotônico correspondente armazenado, por exemplo, em um meio de armazenamento não volátil tal como um chip de TPM. Alternativamente, o monitor de segurança pode ler ou incrementar um contador armazenado em um servidor confiável remoto ou em um conjunto de servidores confiáveis remoto, ao estabelecer um canal de comunicação seguro com tal servidor e ao pedir que ele leia ou incremente um contador monotônico específico. O servidor ou servidores confiáveis remotos podem manter o contador dentro de um enclave para isolar o mesmo do restante do código no computador host.
[00132] Com um processador habilitado por enclave, um pedido pode ser enviado à plataforma nativa mediante a execução de uma instrução. Com tal processador, os contraelementos primitivos monotônicos podem ser implementados mediante a leitura ou a incrementação de um contador no armazenamento de memória não volátil em um chip na placa mãe do computador. Alternativamente, estes elementos primitivos também podem ser implementados ao usar um servidor remoto confiável com o hipervisor habilitado por enclave.
Petição 870190062354, de 04/07/2019, pág. 72/140
61/100 [00133] A Figura 13 ilustra um fluxograma exemplificador para um método 1300 de abstração de uma plataforma de enclave nativa. Uma plataforma de abstração de enclave pode receber um pedido de um enclave ou de um cliente de enclave na caixa 1302. Na caixa 1304, a plataforma de abstração pode determinar se uma plataforma nativa inclui instruções do processador de enclave, por exemplo, ao determinar se a plataforma nativa se conforma a SGx. Em caso positivo, as instruções do processador de enclave são executadas na caixa 1306. Na caixa 1308, a plataforma de abstração pode determinar se uma plataforma nativa inclui hiperchamadas de enclave, por exemplo, ao determinar se a plataforma nativa se conforma a VSM. Em caso positivo, a plataforma nativa faz hiperchamadas de enclave. Os resultados da execução das instruções de enclave ou da conclamação das hiperchamadas de enclave são eliminados na caixa 1312. A eliminação pode incluir, por exemplo, a conversão dos parâmetros de saída ou a manipulação de exceção das instruções do processador de enclave ou das hiperchamadas de enclave no formato ou no protocolo da interface da camada de abstração. Os parâmetros de saída convertidos são retornados então ao solicitador original (enclave ou cliente) na caixa 1314.
IDENTIDADE DE ENCLAVE ABSTRATA [00134] A Figura 14 ilustra as imagens binárias de enclave exemplificadoras usadas para instanciar um enclave. Um enclave pode ser instanciado mediante a criação de um invólucro seguro, tal como o invólucro de enclave 1490, e a cópia de porções de uma ou mais imagens de enclave no invólucro. O invólucro de enclave 1490 pode ter sido criado por meio de referência à imagem de enclave primária 1410. Uma imagem primária pode incluir referências a outras imagens de enclave dependentes. Neste exemplo, a imagem primária 1410 inclui Dependêncial e Dependência2 como referências às imagens de en
Petição 870190062354, de 04/07/2019, pág. 73/140
62/100 clave dependentes 1420 e 1450, respectivamente. A imagem 1420 inclui outras dependências nas imagens 1430 e 1440, ao passo que a imagem 1450 depende da imagem 1460. Uma vez que todas estas imagens (ou porções das mesmas) são copiadas no invólucro 1490, o enclave resultante pode incluir imagens que não da plataforma 1402, que podem incluir o código e os dados que são singulares ou específicos para o enclave instanciado, as imagens da plataforma de abstração 1404, e as imagens da plataforma nativa 1406.
[00135] Cada imagem de enclave, tal como a imagem primária 1410, pode incluir IDs, dependências, código, dados e uma assinatura do autor da imagem. No exemplo da imagem 1410, duas IDs 1410.1 e
1410.2 são incluídas. Estas IDs podem ser UUIDs que especificam, por exemplo, um valor abstrato da identidade que corresponde a um valor de ImagelD, FamilylD, ou AuthorlD que, individual ou coletivamente, podem ser usados para identificar qualquer enclave instanciado com essa imagem de enclave. Tal como ilustrado, a imagem 1410 tem duas IDs, mas menos ou mais IDs podem ser possíveis. O código na imagem 1410 pode consistir em instruções binárias executáveis pelo processador do computador que hospeda o invólucro de enclave 1490. Os dados na imagem 1410 podem ser usados por qualquer código carregado no invólucro 1410. A imagem 1410 também pode incluir uma assinatura sig 1410 para assegurar a integridade de qualquer um ou de todos os outros conteúdos da imagem, tais como IDs, referências de dependência, código e dados. Outras imagens 1420 a 1460 podem conter similarmente IDs, referências de dependência, código, dados e assinaturas.
[00136] Um indicador de dependência, tal como a Dependêncial e Dependência2 da imagem 1410, Dependêncial e Dependência2 da imagem 1420, e Dependência 1 da imagem 1450, pode ser especificado em uma variedade de maneiras. Se as imagens 1410 a 1460 fo
Petição 870190062354, de 04/07/2019, pág. 74/140
63/100 rem armazenadas em uma memória do sistema computadorizado, um indicador de dependência pode simplesmente ser um endereço na memória. Se as imagens de enclave forem arquivos em um sistema de arquivos, as referências podem ser nomes de arquivos. Em algumas modalidades, as referências podem ser um identificador lógico. Um identificador lógico pode ser um número singular, tal como um UUID, ou pôde ser outros dados, tais como uma sequência de texto, que identifica de outra maneira uma imagem de dependência. Por exemplo, uma sequência de texto pode indicar um autor de imagem binária dependente, uma fonte, um nome de produto, uma família de produtos e/ou um número de versão. Um identificador lógico inclui uma localização da web ou da Internet, tal como uma localização onde uma cópia de um binário dependente pode ser recuperada.
[00137] Em algumas modalidades, um arquivo de imagem de enclave pode ser localizado ao consultar um indicador de dependência, tal como um identificador lógico, em um registro de imagens de enclave para encontrar um apontador para a versão atual ou a cópia local da imagem de enclave em questão. Em alguns casos, um serviço confiável pode ser usado para resolver um indicador de dependência na identificação de uma imagem de enclave particular ou uma localização da imagem.
[00138] Em algumas modalidades, um indicador de dependência pode ser um identificador criptograficamente seguro, tal como uma comprovação criptográfica da imagem binária de enclave dependente pretendida. Tal comprovação pode incluir todo o binário dependente, ou somente uma porção do mesmo. A porção de um binário dependente incluído em um indicador de dependência pode incluir valores abstratos de identidade, tais como ID 1410.1 ou ID 1420.2, e podem ser valores abstratos de identidade. Um serviço de resolução para um identificador criptograficamente seguro pode não ter que ser tão confi
Petição 870190062354, de 04/07/2019, pág. 75/140
64/100 ável como com um identificador lógico porque a entidade que determina as dependências de enclave vai poder verificar que a imagem dependente correta foi encontrada ao computar a comprovação do próprio binário dependente.
[00139] A Figura 15 ilustra um fluxograma exemplificador para um método 1500 de execução de uma operação de enclave com a identidade de enclave abstrata. Um valor abstrato de identidade para um enclave pode prover uma base para determinar uma equivalência entre dois enclaves que têm alguma característica em comum, mas não são exatamente idênticos. Um valor de identidade pode ser incluído em um relatório de atestação e pode ser associado com o tipo abstrato de identidade (tal como ExactHash, InstanceHash, ImagelD, FamilylD, ou AuthorlD). Dois enclaves que não são exatamente os mesmos podem ter o mesmo valor abstrato de identidade para um tipo abstrato de identidade. Além disso, o código de enclave idêntico instanciado em invólucros seguros em duas plataformas de enclave nativas diferentes também pode ter o mesmo valor abstrato de identidade. O método 1500 pode ser executado, por exemplo, por uma camada da plataforma de abstração entre uma plataforma de enclave nativa e um enclave ou um cliente de enclave.
[00140] Na caixa 1502, um enclave é instanciado a partir de uma imagem de enclave, tal como a imagem de enclave primária 1410 da Figura 14. A imagem de enclave pode ser uma imagem primária que inclui o código de enclave, dados, uma lista de identidades, uma lista de quaisquer imagens de enclave dependentes, e uma assinatura. Para assegurar a integridade das imagens de enclave, as imagens podem ser assinadas com uma chave privativa que pode corresponder ao autor da imagem de enclave. A lista das Ids de identidade de enclave na imagem de enclave pode corresponder a tipos de identidade abstratas tais como um tipo ImagelD, FamilylD e AuthorlD, cada um
Petição 870190062354, de 04/07/2019, pág. 76/140
65/100 deles destinado a identificar coletivamente a imagem de enclave junto com outras imagens de enclave relacionadas. Uma lista de imagens de enclave dependentes pode se referir a outras imagens de enclave que contêm o código de enclave das quais o código na imagem de enclave primária depende. Uma imagem de enclave dependente pode ou não ter sida autorada pelo mesmo autor, e algumas imagens de enclave dependentes podem ser associadas com uma plataforma de enclave em geral (tanto uma plataforma de abstração quanto uma plataforma nativa) ao invés de serem particularmente associadas com uma imagem de enclave primária ou o autor da imagem de enclave primária. O enclave pode ser instanciado mediante a criação de um invólucro seguro de enclave ao usar qualquer plataforma de enclave nativa, e a cópia de toda ou uma porção da imagem primária e quaisquer imagens de enclave dependentes no invólucro seguro.
[00141] Na caixa 1503, uma operação de enclave é solicitada, por exemplo, por um enclave ou por um cliente de enclave, junto com um tipo de identidade de enclave. O tipo de identidade pode especificar um tipo de identidade abstrata, tal como ImagelD ou AuthorlD, e ser relacionado a um enclave instanciado particular, mas não especifica o valor de AuthorlD para esse enclave. O restante do método 1500 seguindo a caixa 1503 descreve as operações para executar a operação (tal como a atestação, a travação dos dados, ou o uso de um contador monotônico, etc.) com o enclave instanciado ao usar um valor de identidade derivado para esse tipo de identidade de enclave instanciado. A identidade pode ser determinada ao usar uma comprovação de um subconjunto de imagens de enclave. O subconjunto de imagens de enclave que é usado como entrada para a comprovação pode ser baseado em parte no tipo de identidade desejado a ser usado na operação de enclave.
Petição 870190062354, de 04/07/2019, pág. 77/140
66/100 [00142] Na caixa 1504, uma porção da imagem de enclave, chamada de uma porção de identidade no presente documento, é determinada com base no tipo da identidade. A porção de identidade pode incluir todas, uma parte, ou nenhuma das imagens binárias dos vários enclaves usados para instanciar um enclave na caixa 1502. A porção de identidade pode incluir todo, uma porção, ou nenhum código de enclave contido na imagem de enclave. A porção de identidade também pode incluir zero, uma, ou mais Ids de identidade listadas em uma porção que não de código das imagens de enclave incluídas. A porção de identidade pode ou não também incluir dados de enclave contidos nas imagens de enclave. A porção de identidade pode incluir qualquer combinação dessas várias partes das imagens de enclave. Por exemplo, uma porção de identidade pode incluir todo código, nenhum dos dados, e duas ou quatro IDs de identidade disponíveis. Na caixa opcional 1506, são determinadas quais as imagens dependentes de enclave que devem ser incluídas na porção de identidade, e é determinada uma porção de identidade de cada imagem incluída.
[00143] A porção de identidade de imagens dependentes pode ou não ser a mesma que a porção de identidade de uma imagem de enclave primária. Por exemplo, todos dentre o código e ImagelD são incluídos na porção de identidade de uma imagem primária, ao passo que nenhum código e somente FamilylD de uma imagem dependente pode ser incluído na porção de identidade da imagem dependente.
[00144] Quando o código de enclave é incluído na porção de identidade, as porções do código de enclave na porção de identidade podem ser determinadas por uma combinação do tipo de identidade e uma indicação de que as dependências devem ser incluídas na porção de identidade. O tipo de identidade InstanceHash pode incluir, por exemplo, o código de enclave na imagem primária, mas nenhuma imagem dependente, ao passo que o tipo de identidade ExactHash
Petição 870190062354, de 04/07/2019, pág. 78/140
67/100 pode incluir o código de enclave em todas as imagens dependentes que não são consideradas como parte de uma plataforma de enclave. Por exemplo, todas as imagens dependentes de enclave que não são assinadas com a chave privativa de um autor da plataforma de enclave podem ser consideradas como não sendo parte da plataforma de enclave. Alternativa ou ainda, a imagem primária pode incluir uma lista da qual as imagens de enclave dependentes devem ser incluídas ou excluída na porção de identidade para os tipos de identidade InstanceHash ou ExactHash.
[00145] As IDs de identidade de enclave, que podem ser incluídas como metadados em uma imagem de enclave, podem ser incluídas na porção de identidade da imagem de enclave ao invés, ou além, do código de enclave. Por exemplo, a porção de identidade para os tipos de identidade ImagelD, FamilylD, e AuthorlD pode incluir um metadado de ID correspondente da imagem de enclave. Quando os tipos de identidade são aninhados ou colocados em camadas, a porção de identidade para os tipos de um nível mais baixo pode incluir os dados de ID para os tipos de um nível mais elevado. Por exemplo, a porção de identidade para ImagelD pode incluir os dados de ID para ImagelD, FamilylD, e AuthorlD, ao passo que a porção de identidade para AuthorlD só pode incluir os dados de ID para AuthorlD.
[00146] Os tipos de identidade que incluem o código de enclave, tais como InstanceHash e ExactHash, conferem um nível mais elevado de garantia, por exemplo, ao cliente de enclave através da atestação de que determinado código de enclave está rodando dentro de um enclave. No entanto, a identidade de enclave irá mudar necessariamente quando qualquer porção de identidade do código de enclave mudar. Por exemplo, se uma fixação da segurança ou um outro erro for fixado em uma versão nova de uma imagem de enclave, o valor da identidade resultante com base no novo código também irá mudar. Com a pro
Petição 870190062354, de 04/07/2019, pág. 79/140
68/100 visão de um mecanismo para determinadas porções do código de enclave a serem excluídas do cálculo da comprovação da identidade, a identidade de um enclave pode ser desacoplada das mudanças para a porção excluída do código de enclave. Por exemplo, quando o código de enclave de um autor depende do código de enclave provido pela plataforma de enclave, a identidade de enclave pode ser desacoplada das revisões para a plataforma dependente.
[00147] Na caixa 1508, é determinado um valor da identidade que pode representar uma identidade do enclave instanciado na caixa 1502. Um valor da identidade pode ser determinado ao calcular uma comprovação na porção de identidade previamente determinada da imagem ou imagens de enclave (o valor da identidade é a saída de uma função de comprovação onde a porção de identidade é a entrada para a função de comprovação). Em algumas modalidades, a entrada para a função de comprovação será as porções da(s) imagem(ns) de enclave originais, ao passo que em outras modalidades a entrada para a função de comprovação será as porções de um invólucro de enclave depois de ter copiado a porção de identidade da imagem no invólucro (e possivelmente descriptografada a porção de identidade no caso em que uma imagem de enclave original é criptografada).
[00148] Na caixa 1510, a integridade do valor resultante da identidade pode ser opcionalmente verificada mediante a verificação da integridade da(s) imagem(ns) de enclave original(is). A integridade de uma imagem de enclave pode ser verificada com uma chave pública que corresponde a uma chave privativa usada para assinar a imagem de enclave. Tal par de chaves pública/privativa pode ser associado, por exemplo, com o autor da(s) imagem(ns) de enclave, de modo que a confiança no valor da identidade resultante possa ser enraizada na confiança do autor do enclave.
Petição 870190062354, de 04/07/2019, pág. 80/140
69/100 [00149] Finalmente, na caixa 1512, uma operação relacionada ao enclave instanciado pode ser executada ao usar o valor da identidade. Por exemplo: um relatório de atestação do enclave instanciado pode ser gerado ou verificado quanto a um tipo de identidade; os dados podem ser travados a ou destravados do enclave instanciado em uma identidade; e um contador monotônico ou um tempo confiável amarrado ao enclave instanciado e ao tipo de identidade pode ser usado.
[00150] As operações de enclave que usam tipos de identidade de nível mais elevado permitem interações entre grupos de possíveis instanciações de enclave. A atestação para um tipo de identidade de alto nível pode prover a equivalência do relatório de atestação para todos os enclaves com a mesma identidade de alto nível. Por exemplo, um relatório de atestação para um tipo de identidade de AuthorlD pode ser equivalente ao relatório de atestação de todos os enclaves instanciados de uma imagem primária que contém os mesmos metadados de AuthorlD. Os dados travados a um tipo de identidade de alto nível podem ser destravados por qualquer enclave com o mesmo valor de identidade de alto nível. Por exemplo, os dados travados ao enclave instanciado com o tipo de identidade de AuthorlD podem ser destravados por quaisquer outros enclaves instanciados com os mesmos metadados de AuthorlD em sua imagem primária de enclave.
EQUIVALÊNCIA DE IDENTIDADE DE ENCLAVE [00151] A Figura 16 ilustra um sistema exemplificador com equivalência de identidade de enclave abstrata. Um cliente de enclave 1602 pode se comunicar com um primeiro enclave 1612 instanciado em um invólucro de enclave seguro da primeira plataforma nativa 1616 através da plataforma de abstração 1614, e o cliente 1602 também pode se comunicar com um segundo enclave 1622 instanciado em um invólucro de enclave seguro da segunda plataforma nativa 1626 através da plataforma de abstração 1624. A primeira plataforma nativa 1616 pode
Petição 870190062354, de 04/07/2019, pág. 81/140
70/100 ou não residir no mesmo computador que a segunda plataforma nativa. O cliente de enclave 1602 pode residir no mesmo computador que aquele das plataformas nativas, ou pode residir em um terceiro computador separado. A primeira plataforma nativa 1616 pode não ser a mesma que a segunda plataforma nativa 1626. Por exemplo, a primeira plataforma nativa 1616 pode ser uma versão mais velha da segunda plataforma nativa do mesmo fabricante de plataforma nativa. Alternativamente, a primeira plataforma nativa 1616 e a segunda plataforma nativa 1626 podem se conformar a arquiteturas de enclave completamente diferentes, tais como VSM e SGX.
[00152] Um cliente de enclave pode determinar com segurança quais os enclaves que são equivalentes ao comparar os valores da identidade derivados dos relatórios de atestação. O cliente de enclave 1602 pode identificar com segurança cada um dos enclaves ao receber relatórios de atestação separados do primeiro enclave 1612 e do segundo enclave 1622. Um valor de identidade pode ser incluído (ou derivado de) cada um destes relatórios de atestação. Se os valores da identidade forem os mesmos, o cliente de enclave 1602 pode ter a confiança de que o primeiro enclave 1612 e o segundo enclave 1622 são equivalentes em algum sentido. Os valores da identidade dos relatórios de atestação podem ser valores de identidade abstrata que correspondem a um tipo de identidade abstrata particular (tal como ExactHash, InstanceHash, ImagelD, FamilylD, ou AuthorlD), ou comprovações de tais valores de identidade abstratas. Neste caso, a equivalência pode ser determinada onde os enclaves não são exatamente idênticos. Dois enclaves podem não ser exatamente idênticos, mas ainda determinados como sendo equivalentes, por exemplo, onde as imagens de enclave carregadas no invólucro de enclave são versões diferentes da mesma funcionalidade, ou as mesmas imagens primárias com imagens dependentes diferentes, ou as mesmas imagens de en
Petição 870190062354, de 04/07/2019, pág. 82/140
71/100 clave carregadas em invólucros de enclave de arquiteturas de enclave diferentes.
[00153] O primeiro enclave 1612 pode ser considerado equivalente, mas não idêntico ao segundo enclave 1622 para uma variedade de situações. Em um primeiro exemplo, somente um subconjunto de código carregado inicialmente nos invólucros de enclave é o mesmo (por exemplo, equivalente para os tipos de identidade abstratas ExactHash ou InstanceHash). Em um segundo exemplo, o autor do código de enclave pode ter incluído uma ID idêntica em duas imagens de enclave binárias diferentes, mesmo se o código nas duas imagens binárias for diferente (por exemplo, equivalente para os tipos de identidade ImagelD, FamilylD, ou AuthorlD). Em um terceiro exemplo, o código em cada enclave é integralmente o mesmo, mas é carregado (instanciado) em plataformas nativas diferentes. Neste terceiro exemplo, a primeira plataforma nativa 1616 e a segunda plataforma nativa 1626 podem ser manufaturadas por fabricantes diferentes e a confiança dos relatórios de atestação diferentes é enraizada desse modo em autoridades de certificação diferentes (vide a Figura 7, elemento 738) de fabricantes diferentes. Um exemplo onde as duas plataformas nativas sejam diferentes é em uma fazenda de servidor ou na computação em nuvem onde os servidores alocados para as cargas de trabalho de processamento do primeiro e segundo enclaves são os servidores que não suportam a mesma plataforma de enclave nativa.
[00154] Em uma modalidade alternativa, o primeiro enclave pode ser o cliente do segundo enclave, de maneira tal que as caixas 1602 e 1612 são combinadas. A determinação da equivalência de enclave nesta modalidade pode incluir a determinação, dentro do primeiro enclave, que um valor de identidade de um relatório de atestação do segundo enclave é o mesmo que o próprio valor de identidade do primeiro enclave (em um nível de identidade abstrata particular).
Petição 870190062354, de 04/07/2019, pág. 83/140
72/100 [00155] A Figura 17 ilustra um fluxograma exemplificador para processamento paralelo com os dois enclaves equivalentes. O processo 1700 pode ser executado, por exemplo, por um cliente de dois ou mais enclaves diferentes. Na caixa 1702, dois enclaves são instanciados em exemplos de plataformas nativas diferentes, por exemplo, tal como ilustrado na Figura 16. Os enclaves podem ser instanciados por um cliente de enclave que especifica uma imagem binária de enclave (tal como a imagem primária 1410 da Figura 14) através de um método CreateEnclave de plataformas de abstração 1614 e 1624. A imagem binária de enclave especificada para instanciar os dois enclaves pode ser a mesma ou diferente. Um relatório de atestação para cada enclave instanciado é criado na caixa 1704. Os relatórios de atestação podem ser criados, por exemplo, no pedido do cliente de enclave ou no pedido dos próprios enclaves. Uma entidade que deseja provar a equivalência dos dois enclaves, tais como o cliente de enclave, obtém cópias de ambos os relatórios de atestação. Os relatórios de atestação podem ser opcionalmente verificados na caixa 1706. Por exemplo, a integridade do relatório pode ser verificada ao verificar a assinatura da atestação com um certificado de endosso (tal como na Figura 7, elemento 728) da plataforma nativa que produziu o relatório de atestação. Além disso, o certificado de endosso pode ser verificado com a chave pública do fabricante da plataforma nativa (tal como na Figura 7, elemento 732). Os valores da identidade (ou uma comprovação dos mesmos) podem ser extraídos de cada relatório de atestação na caixa 1708, e a equivalência dos dois enclaves pode ser determinada mediante a verificação se os valores extraídos da identidade são os mesmos para cada enclave. Estes valores da identidade podem ser valores de identidade abstrata (ou comprovações dos mesmos) associados com um tipo de identidade.
Petição 870190062354, de 04/07/2019, pág. 84/140
73/100 [00156] Uma vez que um cliente de enclave tenha provado a equivalência de duas instanciações de enclave das operações nas caixas 1708 e 1710, os dois enclaves podem ser usados de forma intercambiável, de acordo com o tipo de equivalência mostrado. As caixas 1712 a 1720 ilustram um método exemplificador de uso de enclaves equivalentes para usar os dois enclaves equivalentes instanciado em uma maneira de processamento paralelo. Nas caixas 1712 e 1716, uma porção de uma série de dados de entrada, tal como a porção de um banco de dados ou a porção de um arquivo de imagem digital, é copiada no primeiro e segundo enclaves. A porção da série de dados copiada pode ser idêntica ou diferente de acordo com a tarefa de processamento em uso. Uma operação de processamento pode ser executada com segurança em paralelo ao executar simultaneamente parcialmente a operação no primeiro enclave na caixa 1714 e ao executar parcialmente a operação no segundo enclave na caixa 1718.A operação pode ser, por exemplo, a busca no banco de dados ou a execução de uma operação de processamento de imagem. O primeiro enclave pode buscar a primeira metade do banco de dados ou executar a operação de processamento de imagem na primeira metade de uma imagem, ao passo que o segundo enclave pode buscar a segunda metade do banco de dados ou executar a operação de processamento de imagem da segunda metade da imagem. Finalmente, na caixa 1720, os resultados do processamento paralelo no primeiro e segundo enclaves podem ser combinados, por exemplo, ao combinar as duas metades classificadas do banco de dados, ou ao colocar as duas metades da imagem juntas novamente.
[00157] A Figura 18 ilustra um fluxograma exemplificador para processamento em série com dois enclaves equivalentes. Tal como ilustrado na Figura 18, uma operação de enclave, tal como uma operação de banco de dados ou uma operação de processamento de imagem, é
Petição 870190062354, de 04/07/2019, pág. 85/140
74/100 executada com segurança em duas partes sequenciais em dois enclaves separados. O processo 1800 pode ser executado, por exemplo, pelo cliente de enclave 1602 da Figura 16. Na caixa 1802, um primeiro enclave é criado em uma primeira plataforma de enclave nativa, e um relatório de atestação do primeiro enclave é criado na caixa 1804. Este primeiro relatório de atestação (do primeiro enclave) pode ser verificado na caixa 1806, por exemplo, tal como descrito acima em relação à caixa 1706 da Figura 17. Na caixa 1808, uma operação segura é iniciada no primeiro enclave, mas não completada. O estado do primeiro enclave pode ser opcionalmente travado para ser movido com segurança para fora do primeiro enclave na caixa 1810. Por exemplo, o primeiro estado de enclave pode ser travado a um tipo de identidade do primeiro enclave. Uma vez que o estado de enclave tenha sido salvo, o primeiro enclave pode ser completado (não ilustrado).
[00158] Um segundo enclave é usado começando na caixa 1812. Na caixa 1812, o segundo enclave é instanciado em uma segunda plataforma nativa. Tal como na Figuras 16 e 17, a segunda plataforma nativa pode ou não ser hospedada no mesmo computador que a primeira plataforma nativa, e a primeira e a segunda plataformas nativas podem ser as mesmas ou diferentes. Um relatório de atestação da segunda plataforma nativa é criado na caixa 1814 e, opcionalmente, este segundo relatório de atestação pode ser verificado na caixa 1816. Um valor de identidade do primeiro e segundo relatórios de atestação pode ser comparado na caixa 1818 para verificar a equivalência do primeiro e segundo enclaves. Em modalidade alternativas, o segundo enclave pode ser instanciado e a equivalência verificada (caixas 1812 a 1818) antes que a operação segura seja iniciada no primeiro enclave na caixa 1808. Para continuar a operação segura iniciada no primeiro enclave, o estado travado do primeiro enclave pode ser copiado no segundo enclave e destravado na caixa 1820. Na caixa 1822, a operação segu
Petição 870190062354, de 04/07/2019, pág. 86/140
75/100 ra é completada no segundo enclave (ao usar o estado de enclave copiado com segurança do primeiro enclave, se o estado foi copiado). TRAVAÇÃO DE DADOS DISTRIBUÍDA [00159] A Figura 19 é um diagrama de blocos de um sistema de travação de dados distribuída exemplificador. A travação dos dados pode ser distribuída através de múltiplos enclaves, onde esses enclaves são hospedados em plataformas de enclave nativas separadas, e/ou em computadores separados. Tal como explicado acima, os elementos primitivos de abstração EnclaveSeal e EnclaveUnseal podem travar e destravar os dados para um enclave ao usar uma chave amarrada à plataforma de enclave nativa ou ao computador físico em que um enclave está rodando. Isto pode restringir a destravação somente aos enclaves hospedados no mesmo computador ou no mesmo exemplo de plataforma de enclave nativa. A Figura 19 ilustra um sistema de travação de dados distribuída, onde a travação ou a destravação dos dados pode ocorrer em uma plataforma nativa ou um computador diferente da plataforma nativa e do computador que hospeda um enclave. O sistema 1900 inclui os computadores 1910, 1930, 1950, com a rede 1902 conectando os computadores 1910 e 1930, e a rede 1904 conectando os computadores 1930 e 1950. O computador 1910 hospeda o enclave de origem 1912, a partir do qual os dados a ser travados podem ser provenientes; o computador 1930 hospeda um enclave de travação distribuída (DSE) 1932 para atender os pedidos de travação e destravação distribuída; e o computador 1950 hospeda o enclave de destino 1952 onde os dados previamente travados são destravados. Tal como explicado acima em relação à Figura 9, os enclaves 1912, 1932, 1952 podem se comunicar com as plataformas de abstração 1914, 1934, 1954, respectivamente, através de um protocolo de abstração de enclave, e as plataformas de abstração 1914, 1934, 1954 podem se comunicar com as plataformas nativas 1916, 1936, e
Petição 870190062354, de 04/07/2019, pág. 87/140
76/100
1956, respectivamente, através de um protocolo nativo. Em modalidade alternativas, um ou mais enclaves 1912, 1932, 1950 podem ser hospedados diretamente nas plataformas nativas 1961, 1936, 1956 sem uma plataforma de abstração intermediária. Os dados travados 1938 podem ser dados travados ao DSE 1932 ao usar uma chave associada com o DES 1932 ou a sua plataforma nativa host 1936. Os dados travados 1938 podem ser armazenados em um local menos protegido, tal como no computador 1930 fora do invólucro de enclave seguro do DSE 1932, por exemplo, em outra parte no espaço de memória do computador 1930 ou em um sistema de arquivos de um disco rígido.
[00160] A travação de dados distribuída pode incluir a autenticação do DSE 1930 ao enclave de origem, por exemplo, pela atestação do DSE 1932 pela rede 1902. Uma vez que o enclave de origem 1912 é baseado no DSE 1932, o enclave de origem 1912 pode enviar dados sensíveis através de um canal de comunicação seguro ao DSE 1932 junto com uma política de travação para travação pelo DSE 1932. O DSE 1932 pode então travar os dados do enclave 1912 em si mesmo e armazenar os dados travados em um meio de armazenamento não seguro. Mais tarde, o enclave de destino 1952 pode pedir os dados previamente travados. Para destravar os dados, o DSE 1932 pode autenticar o enclave de destino 1952, por exemplo, por meio de atestação pela rede 1904, e verificar se a destravação para o enclave de destino 1952 é permitida de acordo com a política de travação fornecida pelo enclave de origem 1912. O DSE 1932 pode destravar os dados previamente travados do enclave de origem 1912, e então enviar os dados destravados através de um canal de comunicação seguro ao enclave de destino 1952. Os dados de enclave podem ser comunicados com segurança de e para o DSE 1932 mediante a criptografia dos dados de enclave pelas redes 1902 e 1904. Por exemplo, os dados de
Petição 870190062354, de 04/07/2019, pág. 88/140
77/100 enclave enviados pela rede 1902 podem ser criptografados com uma chave gerada durante a atestação do DSE 1932 ao enclave de origem 1912, e os dados enviados pela rede 1904 podem ser criptografados com uma chave gerada durante a atestação do enclave de destino 1952 ao DSE 1932. Outros canais de comunicação seguros são possíveis, tal como a criptografia com uma chave pública do destino, por exemplo, uma chave pública associada com o DSE ou uma chave pública associada com o enclave de destino.
[00161] As identidades de enclave usadas na travação e destravação distribuída podem ou não ser identidades de enclave abstratas. Por exemplo, em algumas modalidades com uma camada da plataforma de abstração, uma política de travação, tal como aquela especificada por um enclave de origem e executada por um DSE, pode identificar as identidades de enclave de destravação permitidas onde as identidades de enclave de destravação permitidas são, por exemplo, uma lista de identidades de enclave abstratas, ou uma lista de tipos de identidade abstrata em combinação com os valores de identidade abstrata do enclave de origem. Em outras situações uma identidade não abstrata pode ser usada. Por exemplo, em algumas modalidades, um DSE pode ser implementado com um código publicamente disponível, de maneira tal que a confiança no DSE é a confiança no conhecimento de seu código e não a confiança no autor de seu código. Neste exemplo, a atestação de um DSE pode ser uma comprovação assinada do código público de todos os DSEs, e a entrada para a função de comprovação pode não incluir os valores de identidade abstrata atribuídos pelo autor.
[00162] Em algumas modalidades as plataformas nativas 1916, 1936, 1956 são plataformas nativas separadas, uma vez que estão hospedadas nos computadores diferentes 1910, 1930, 1950, mesmo se as plataformas nativas 1916, 1936, 1956 se conformam à mesma
Petição 870190062354, de 04/07/2019, pág. 89/140
78/100 versão da mesma arquitetura nativa da plataforma de enclave. Em outras modalidades, as plataformas nativas 1916, 1936, 1956 podem se conformar a arquiteturas de plataforma diferentes ou a versões diferentes da mesma arquitetura de plataforma de enclave nativa. O uso de identidades abstratas na política de travação pode facilitar a hospedagem dos enclaves de origem e de destino em arquiteturas de plataforma nativas diferentes.
[00163] Em outras modalidades de travação de dados distribuída não ilustradas na Figura 19, pode haver três computadores separados (tais como os computadores separados 1910, 1930, 1950). Por exemplo, os enclaves de origem e de destino podem ficar em um computador (e talvez em uma única plataforma nativa), ao passo que o DSE fica em um computador separado. Alternativamente, um DSE pode ser hospedado no mesmo computador que o computador que hospeda o enclave de origem ou o computador que hospeda o enclave de destino. Nestas modalidades de travação de dados distribuída, a travação e a destravação dos dados não são integralmente locais a um único computador, tal como descrito acima no que diz respeito os elementos primitivos de abstração EnclaveSeal e EnclaveUnseal.
[00164] A travação de dados distribuída pode ser implementada em uma API de camada de abstração, tal como pelas plataformas de abstração 1914, 1934, 1954. Por exemplo, os elementos primitivos DistributedEnclaveSeal e DistributedEnclaveUnseal são similares aos elementos primitivos locais de travação de dados EnclaveSeal e EnclaveUnseal discutidos acima.
DWORD
DistributedEnclaveSeal ( _ln_ SEALING POLICY sealingPolicy, _ln_reads_bytes_opt_(dwPlaintextSize) LPCVOID pPlaintext,
Petição 870190062354, de 04/07/2019, pág. 90/140
79/100 _ln_DWORD dwPlaintextSize, _ln_reads_bytes_opt_(dwAuthdataSize) LPCVOID pAuthdata, _ ln_DWORD dwAuthdataSize, _Out_writes_bytes_to_(dwSealedtextSize) LPVOID pSealedtext, _lnout_ DWORD dwSealedtextSize, Set<Enclaveldentity > SetOfTargetEnclaves ) [00165] DistributedEnclaveSeal estende EnclaveSeal ao tomar urn parâmetro SetOfTargetEnclaves adicional, o que permite que urn enclave de chamada, tal como o enclave 1910, especifique um conjunto de identidades de enclave que são autorizadas a destravar os dados fornecidos através do parâmetro pPlaintext. Se nenhuma identidade for fornecida através do SetOfTargetEnclaves, uma identidade de enclave autorizada default pode ser assumida como sendo uma identidade de enclave de travação, por exemplo, ExactHash ou InstanceHash do enclave de travação.
[00166] A implementação de DistributedEnclaveSeal, por exemplo, como um método da plataforma de abstração 1914 no computador do enclave de origem, pode incluir o estabelecimento de um canal de comunicação seguro com um DSE, tal como pela criptografia da mensagem pela rede 1902. A(s) chave(s) para essa criptografia pode(m), por exemplo, ser gerada(s) durante um processo de atestação, tal como descrito acima, ou pode ser qualquer chave pública associada com o DSE 1932.
[00167] DistributedEnclaveSeal também pode ser generalizado ao tomar um parâmetro adicional KeyForData (não mostrado no protótipo da função de DistributedEnclaveSeal acima). Em algumas modalidades, múltiplos conjuntos de dados podem ser mantidos travados simul
Petição 870190062354, de 04/07/2019, pág. 91/140
80/100 taneamente para um único enclave ou uma única identidade de enclave. Neste caso, KeyForData permite a especificação de qual conjunto de dados está sendo travado. KeyForData pode ser qualquer tipo de identificador de dados, tal como uma sequência, um número, ou um conjunto de propriedades. Em algumas modalidades, KeyForData pode ser um parâmetro de entrada para DistributedEnclaveSeal e gerado pelo enclave de travação, permitindo eficazmente que o enclave de travação nomeie o conjunto de dados. Em outras modalidades, KeyForData pode ser um parâmetro de saída, onde o DSE gera o identificador de KeyForData quando os dados são travados.
DWORD
DistributedEnclaveUnseal( _ln_reads_bytes_opt_(dwSealedtextSize) LPCVOID pSealedtext, _ln_ DWORD wSealedtextSize, _ln_reads_bytes_opt_(dw AuthdataSize) LPCVOID pAuthdata, _ln_ DWORD dwAuthdataSize, _Out_writes_bytes_to_dwPlaintextSize) LPCVOID pPlaintext, _lnout_ DWORD dwPlaintextSize
KEY KeyForData
Enclaveidentity Identity )
[00168] DistributedEnclaveUnseal pode ser implementado na plataforma de abstração 1954, e opera em resposta a um pedido de um enclave de destino 1952. DistributedEnclaveUnseal pode estabelecer um canal de comunicação seguro para o DSE 1932, por exemplo, mas criptografa as mensagens com uma chave gerada durante a atestação do enclave de destino 1952 ao DSE 1932, ou criptografa as mensa
Petição 870190062354, de 04/07/2019, pág. 92/140
81/100 gens enviadas ao enclave de destino com uma chave pública do enclave de destino. O DSE pode verificar uma identidade do enclave de pedido (de destino) tal como pela atestação, destrava os dados travados pedidos, e envia com segurança os dados destravados ao enclave de pedido. Nas modalidades em que o enclave de pedido tem múltiplas identidades, uma identidade particular pode ser especificada no parâmetro de identidade. Nas modalidades em que múltiplos conjuntos de dados de enclave são armazenados para uma única identidade de enclave, o parâmetro KeyForData pode especificar qual conjunto de dados específico (para a identidade especificada) é solicitado ao usar o mesmo valor de KeyForData usado em DistributedEnclaveSeal quando a série de dados foi travada.
[00169] Em algumas modalidades, as identidades dos enclaves autorizados a destravar os dados podem ser especificadas (tal como no parâmetro de SetOfTargetEnclaves) por chaves públicas dos enclaves autorizados alvo. Nesta modalidade, a atestação do enclave de destino ao DSE pode não ser necessária, mas os dados destravados só podem então ser fornecidos como criptografados ao usar uma das chaves públicas especificadas. Supondo que somente os enclaves visados têm acesso às chaves privativas correspondentes para a descriptografia, somente os enclaves visados terão acesso aos dados destravados.
[00170] Em modalidades não ilustradas na Figura 19, as próprias funções do enclave de travação distribuída (DSE) 1932 podem ser distribuídas através de múltiplos DSEs. Por exemplo, a funcionalidade de DSE pode ser distribuída através de múltiplos DSEs em múltiplos computadores para a redundância e tolerância a falhas. Neste exemplo, qualquer DSE replicado vai poder atender um pedido de travação ou destravação. Deve ser observado que os dados travados 1938, uma vez que são travados/criptografados, podem ser armazenados
Petição 870190062354, de 04/07/2019, pág. 93/140
82/100 com segurança em qualquer lugar, inclusive sendo replicados através de servidores de armazenamento em nuvem.
[00171] A travação de dados distribuída pode permitir o movimento de das cargas úteis de enclave entre computadores. Por exemplo, os dados do enclave de origem travados por um DSE podem ser dados do estado do enclave de origem em um primeiro servidor de nuvem, os quais podem ser carregados no enclave de destino em um segundo servidor de nuvem após a destravação. Isto pode ser feito similarmente ao que foi descrito acima com respeito à Figura 18. Uma operação segura pode começar a execução no enclave de origem. Mais tarde, talvez depois que a execução no enclave de origem é interrompida, o estado do enclave de origem pode ser travado a um DSE, e então destravado a um enclave de destino quando o enclave de destino estiver pronto para continuar a operação segura que foi iniciada no enclave de origem.
[00172] A Figura 20 é um fluxograma exemplificador para a travação e a destravação de dados distribuída, tal como pode ser executada por um enclave de travação ou por um DSE. As caixas 2002-2006 correspondem à travação de dados distribuída, ao passo que as caixas 2008-2010 correspondem à destravação de dados distribuída. Em resposta a um pedido para travar um conjunto de dados do enclave que origina de um enclave de origem, o próprio enclave de travação (ou DSE) pode atestar ao enclave da fonte, ao enviar um relatório de atestação ou citação ao enclave de origem na caixa 2002. O enclave de origem pode verificar a identidade do enclave de travação como um enclave de travação genuíno e confiável, ao inspecionar um valor da identidade e uma assinatura no relatório de atestação de enclave de travação. Na caixa 2004, o enclave de travação recebe uma lista permitida e os dados de enclave a serem travados. Estes podem ser recebidos através de um canal segura tal como descrito acima com rela
Petição 870190062354, de 04/07/2019, pág. 94/140
83/100 ção à Figura 19. Na caixa opcional 2006, o enclave de travação pode travar os dados de enclave de origem a ele mesmo, por exemplo, se os dados forem armazenados fora do invólucro seguro do enclave de travação, tal como em um sistema de arquivos de computador. Para destravar os dados para um enclave de destino, o próprio enclave de destino pode atestar ao enclave de travação, tal como ao fornecer um relatório de atestação ou citação, na caixa 2008. Na caixa 2010, uma identidade do enclave de destino pode ser verificada, tal como mediante a inspeção do relatório de atestação do enclave de destino. Na caixa 2012, o enclave de travação determina se o enclave de destino está autorizado a destravar os dados do enclave de origem ao verificar se uma identidade autenticada do enclave de destino está incluída na lista permitida recebida com os dados. Uma vez que a permissão tenha sido confirmada, os dados de enclave podem ser destravados se estavam travados, e enviados então ao enclave de destino através de um canal seguro na caixa 2014.
ENCLAVE DE COFRE DE CHAVE [00173] Os cofres de chaves podem ser implementados com enclaves. Um cofre de chave contém chaves de modo seguro, tais como as chaves de um sistema de criptografia para a criptografia e a descriptografia de dados, para os clientes do cofre de chave. Um cofre de chave também pode executar operações com a chave, tal como a criptografia e a descriptografia de dados, a assinatura de dados, e a derivação de novas chaves a partir de uma chave existente. Um cofre de chave, quando implementado como um enclave, pode prover um armazenamento muito seguro e o processamento com chaves de criptografia secretas. Além disso, a atestação de software de um enclave de cofre de chave pode fornecer níveis elevados de garantia a um cliente do cofre que está se comunicando com um cofre de chave autêntico e confiável. Sistemas altamente seguros podem ser construídos em um
Petição 870190062354, de 04/07/2019, pág. 95/140
84/100 enclave de cofre de chave com uma chave trancada em cofre, com o que uma chave armazenada dentro de um cofre de chave nunca é liberada a qualquer cliente fora do cofre de chave, e em alguns casos a chave trancada em cofre só pode existir como armazenada dentro (ou possivelmente travada) do enclave de cofre de chave.
[00174] A Figura 21 é um diagrama de blocos de um enclave de cofre de chave exemplificador. O enclave 2122 é um cofre de chave dentro de um invólucro seguro de enclave da segunda plataforma de enclave nativa 2126. No exemplo da Figura 21, o cliente 2112 do enclave de cofre de chave 2122 também é um enclave, e hospedado dentro de um invólucro seguro de enclave da primeira plataforma de enclave nativa 2116. Os enclaves 2112, 2122 podem interagir com as suas respectivas plataformas nativas 2116, 2126 através das respectivas plataformas de abstração de enclave 2114, 2124. Em outras modalidades, uma ou ambas as plataformas de abstração 2114, 2124 podem não existir onde os enclaves 2112 e/ou 2122 interagem diretamente com a plataformas nativas 2116, 2126.
[00175] O enclave de cofre de chave 2122 pode se comunicar com o cliente de cofre 2112 através do canal de comunicações 2150. Em algumas modalidades, o canal de comunicações 2112 pode ser um canal de comunicações seguro que confere uma garantia de privacidade, integridade e/ou novidade das mensagens enviadas através do canal de comunicação 2150. A privacidade e a integridade de tal canal de comunicações seguro podem ser estabelecidas, por exemplo, com criptografia e assinaturas, tal como nas Figuras 2 e 3, ao usar as chaves compartilhadas geradas como parte de um processo de atestação, tal como na Figuras 5 e 6.
[00176] A atestação de software confere segurança em parte ao prover a garantia de identidade da entidade no outro tamanho de um canal de comunicação. Com a atestação do enclave de cofre de chave
Petição 870190062354, de 04/07/2019, pág. 96/140
85/100
2122 a um cliente do cofre, o cliente pode obter a garantia que o enclave de cofre de chave 2122 é quem diz que é antes de enviar um segredo, tal como uma chave ou outros dados de cleartext, ao cofre de chave. O inverso também é verdadeiro para os clientes que também são enclaves, tal como ilustrado na Figura 21. Com a atestação do enclave de cofre 2112 a um enclave de cofre de chave 2122, o cofre de chave pode obter a garantia que o cliente é quem diz que é antes de revelar um segredo, tal como uma chave ou outros dados de cleartext, ao cliente.
[00177] Sistemas de cofre de chave com chaves trancadas no cofre e chaves derivadas, em particular onde as chaves de criptografia são derivadas de uma chave travada no cofre, podem ser usados para construir um sistema de segurança que seja flexível e variavelmente seguro. Uma função de derivação de chave, que pode ou não ser pública, pode ser usada para gerar múltiplas chaves a partir de uma primeira chave. A primeira chave (um segredo raiz) pode ser trancada no cofre para o nível o mais elevado de segurança, e as chaves derivadas da primeira chave podem ser usadas para finalidades de criptografia. Se uma chave derivada for comprometida, uma nova chave derivada pode ser gerada em um sistema existente sem ter que acessar ou mudar o cofre de chave que contém a primeira chave.
[00178] Um enclave de cofre da chave exemplificador (KVE) é um sistema de cofre de chave baseado em nuvem que provê o armazenamento, a geração, a derivação, a distribuição, a criptografia, a descriptografia e assinaturas de chaves ao usar enclaves. O KVE pode ser identificado por sua comprovação exata (uma comprovação do conteúdo do seu invólucro seguro), ou por um identificador arbitrário atribuído por ou associado com o seu criador. Neste último caso, o enclave pode ser assinado com a chave privativa de seu criador para evitar conflitos e quebra de segurança devido às colisões do identificador.
Petição 870190062354, de 04/07/2019, pág. 97/140
86/100 [00179] Um cliente do cofre de chave pode interagir com um sistema de cofre de chave ao usar os elementos primitivos exemplificadores a seguir. Um protótipo da função de StoreKey exemplificador é:
StoreKey([in] Keyname, [in] KeyType, [in] Key Value, [in] Policy) [00180] StoreKey armazena uma determinada chave no cofre de chave e associa a mesma com um determinado nome. O tipo de chave também é associado com a chave e restringe o que pode ser feito com a chave. Por exemplo, algumas chaves devem ser usadas apenas para a criptografia, e outras para assinaturas, etc. E as chaves específicas só podem ser usadas com criptoalgoritmos específicos. A política pode especificar as políticas para restringir ainda mais o uso da chave. Por exemplo, pode especificar um conjunto de identidades de enclave que podem recuperar a chave e/ou usar a chave. Ela também pode especificar propriedades temporais, por exemplo, que a chave deve ser destruída em uma determinada data, ou que a taxa de operações que usam a chave deve ser limitada.
[00181] Um protótipo da função GenerateKey exemplificador é: GenerateKey([in] keyName, [in] keyType, [in] Policy) [00182] GenerateKey gera uma nova chave de um certo tipo e mantém a mesma armazenada dentro do cofre de chave, isto é, a chave nunca sai do cofre de chave.
[00183] Um protótipo da função GetKey exemplificador é: GetKey([in] KeyName, [out] KeyValue) [00184] GetKey toma uma chave armazenada dentro do cofre de chave. Estes elementos primitivos são implementados tipicamente através de um canal de comunicação seguro e o código que chama o elemento primitivo roda tipicamente em um ambiente confiável. Em tal contexto, é frequentemente aceitável recuperar uma de cofre de chave de chave.
Petição 870190062354, de 04/07/2019, pág. 98/140
87/100 [00185] Um protótipo da função DeleteKey exemplificador é: DeleteKey([in] keyName) [00186] DeleteKey deleta uma de cofre de chave de chave.
[00187] Um protótipo da função DeriveKey exemplificador é:
DeriveKey[in] newKeyName, [in] KeyName, [in] kdfldentifier, [in] Additional Data) [00188] DeriveKey usa uma função de derivação de chave criptográfica (KDF) identificada por kdfldentifier para derivar uma nova chave com base na chave identificada por keyName e os dados passados em Additional Data.
[00189] Um protótipo da função Encrypt exemplificador é:
Encrypt([in] KeyName, [in] algorithm, [in] data, [out] e ncry pted Data) [00190] Encrypt criptografa os dados com a chave identificada por KeyName, ao usar o algoritmo solicitado.
[00191] Um protótipo da função decrypt exemplificador é:
Decrypt([in] KeyName, [in] algorithm, [in] encrytedData, [out]data) [00192] Decrypt descriptografa os dados com a chave identificada por KeyName, ao usar o algoritmo solicitado.
[00193] Um protótipo da função Sign exemplificador é:
Sign([in] KeyName, [in] algorithm, [in] data, [out] signature) [00194] Sign assina os dados com a chave identificada por KeyName, ao usar o algoritmo solicitado.
[00195] Um protótipo da função VerifySignature exemplificador é:
VerifySignature([in]KeyName, [in] algorithm, [in] signature, [out] bool signaturelsCorrect) [00196] VerifySignature verifica a assinatura com a chave identificada por KeyName, ao usar o algoritmo solicitado.
Petição 870190062354, de 04/07/2019, pág. 99/140
88/100 [00197] Todos os elementos primitivos de cofre de chave acima podem ser implementados ao estabelecer um canal seguro com o KVE. O canal pode ser estabelecido ao usar a atestação e ao executar uma troca de chave de Diffie-Hellman tal como descrito acima com respeito às Figuras 5 e 6. Depois que a canal de comunicação é estabelecido, o pedido é enviado com segurança através do canal e a resposta é lida do canal. O canal pode conferir garantias de privacidade e integridade dos dados trocados.
[00198] Em uma outra modalidade, na primeira vez que o KVE funciona, ele gera um par de chaves públicas/privativas e gera uma citação para a chave pública. Então ele grava a citação e a chave pública, enquanto mantém a chave privativa dentro de enclave. A chave pública e a citação podem então ser distribuídas a todos os sistemas/códigos que desejam usar o cofre de chave. Neste caso, a implementação dos elementos primitivos acima verifica a citação para se certificar se está falando com um KVE genuíno, e então criptografa os pedidos ao usar a chave pública do KVE. Como parte do pedido, a implementação dos elementos primitivos pode incluir uma chave para criptografar e proteger a integridade dos resultados enviados do KVE. Esta modalidade pode prover um canal de comunicações em dois sentidos seguro sem atestação.
[00199] A Figura 22 é um fluxograma exemplificador para algumas operações do enclave de cofre de chave. O processo 2200 começa na caixa de entrada 2202 mediante armazenamento com segurança, dentro do enclave de cofre de chave, por uma chave usada em um sistema de criptografia. A chave pode ser usada, por exemplo, para criptografar ou descriptografar dados, gerar uma assinatura criptográfica, ou pode ser usada apenas como uma chave raiz a partir da qual são derivadas outras chaves. A chave pode ser armazenada com segurança no enclave de cofre de chave, por exemplo, ao armazenar a chave
Petição 870190062354, de 04/07/2019, pág. 100/140
89/100 dentro do espaço de memória do invólucro seguro do enclave. Em outras modalidades, a chave pode ser mantida segura fora do invólucro seguro de enclave ao travar os dados da chave ao enclave de cofre de chave, ou pode ser mantida segura mediante a travação remota com um enclave de travação distribuída tal como descrita a respeito às Figuras 19 e 20.
[00200] Na caixa 2204, o enclave de cofre de chave executa um processo de atestação para atestar a identidade do enclave de cofre de chave ao cliente do cofre. Isto pode conferir ao cliente a garantia que o cofre chave não é um impostor e pode ser confiável com segredos tais como uma chave ou dados a serem criptografados. A atestação do enclave de cofre de chave pode incluir o envio, ao cliente do cofre, de um relatório de atestação ou citação de atestação do enclave de cofre de chave. O cliente de cofre de chave pode então verificar a integridade do relatório de atestação ao verificar uma assinatura no relatório de atestação com uma chave pública associada com a plataforma de enclave nativa do enclave de cofre de chave. Por exemplo, o relatório de atestação do cofre de chave 2122 pode ser gerado pela segunda plataforma nativa 2126, e o cliente de cofre 2112 pode verificar a assinatura no relatório ao usar uma chave pública associada com a segunda plataforma nativa 2126. Este processo de atestação também pode gerar as chaves usadas para um canal de comunicação seguro entre o cliente do cofre e o enclave de cofre de chave, por exemplo, tal como mostrado nas Figuras 5 e 6. O relatório de atestação pode incluir uma identidade do enclave de cofre de chave que pode ser determinada de várias maneiras tal como descrito acima, por exemplo, com respeito às Figuras 14 e 15. A identidade pode, por exemplo, ser baseada em uma comprovação do conteúdo inteiro do invólucro seguro do enclave de cofre de chave, em uma comprovação de apenas um identificador singular atribuído pelo autor/criador do enclave de cofre
Petição 870190062354, de 04/07/2019, pág. 101/140
90/100 de chave, ou em uma comprovação de uma combinação de uma porção do conteúdo do invólucro e um identificador singular.
[00201] Algumas operações do enclave de cofre de chave também podem requerer a garantia da identidade do cliente do cofre. Por exemplo, os dados de descriptografia ou a divulgação de uma chave (tal como com os elementos primitivos de Decrypt ou GetKey) podem requerer tal garantia. Nestas situações, se um cliente do cofre também for um enclave, a caixa opcional 2208 inclui um processo de atestação para verificar, pelo enclave de cofre de chave, a identidade do cliente do cofre. O processo de atestação da caixa 2208 pode incluir a recepção, no enclave de cofre de chave, de um relatório de atestação ou citação do cliente do cofre.
[00202] Na caixa opcional 2210, um canal de comunicações seguro pode ser estabelecido entre o cofre de chave e o enclave de cofre de chave. Uma comunicação segura pode ser requerida para passar segredos entre o cliente do cofre e o enclave de cofre de chave, tais como as chaves ou os dados a serem criptografados. O processo de atestação da caixa 2004 ou 2008 pode gerar as chaves que podem ser usadas para a criação de um canal de comunicação seguro entre o cliente do cofre e o enclave de cofre de chave, por exemplo, tal como mostrado nas Figuras 5 e 6. Alternativamente, qualquer chave pública conhecida do destino de uma mensagem pode ser usada para enviar uma mensagem com segurança.
[00203] Na caixa 2212, uma operação chave, tal como um dos elementos primitivos de cofre de chave descritos acima, pode ser executada dentro do enclave de cofre de chave. Durante esta operação, os dados de chave podem ser armazenados somente no espaço de endereço do invólucro seguro do enclave de cofre de chave. Os elementos primitivos exemplificadores incluem DeriveKey, Decrypt, Sign, e outros ainda.
Petição 870190062354, de 04/07/2019, pág. 102/140
91/100 [00204] O processo 2200 presume que um enclave de cofre de chave já conhece a chave. Deve ser observado que para algumas operações de enclave de cofre de chave ou elementos primitivos, tais como StoreKey ou GenerateKey, a ordem das operações pode ser diferente do que é ilustrado no processo 2200. Por exemplo, para GenerateKey, a operação de geração de chave (tal como na caixa 2212) irá ocorrer antes da operação de armazenamento seguro da caixa 2202. Tal ordem de operação é ilustrada na Figura 23, caixas 2302 a 2308.
[00205] A Figura 23 é um fluxograma exemplificador para a criação e o uso de um enclave de cofre de chave com uma chave trancada no cofre. Nas caixas 2302 a 2308 do processo 2300, uma nova chave é derivada dentro do enclave de cofre de chave. Nas caixas 2310 a 2316, a chave recentemente derivada é usada para executar uma operação de descriptografia. Este é um uso exemplificador da chave trancada no cofre, com o que todas as operações chaves são executadas com o enclave de cofre de chave e a chave nunca é fornecida a um cliente do cofre. Além disso, a nova chave neste exemplo nunca pode existir fora do enclave de cofre de chave, uma vez que foi criada (derivada) dentro do próprio enclave de cofre de chave, e nunca fornecida ao enclave de cofre de chave de um cliente do cofre ou em qualquer outra parte. Para algumas modalidades e políticas de uso de chave, uma chave trancada no cofre pode ser efêmera, uma vez que nunca sai do invólucro seguro do enclave de cofre de chave, mesmo até depois da travação da chave ao enclave de cofre de chave. Tal chave efêmera, tal como pode ocorrer com uma chave derivada usada para assegurar temporariamente um canal de comunicações, pode deixar de existir em qualquer lugar quando o invólucro do enclave de cofre de chave é destruído ou terminado. Embora o processo da Figura 23 ilustre como uma chave trancada no cofre pode ser usada, o processo da Figura 23 também pode ser usado com uma chave que não é trancada
Petição 870190062354, de 04/07/2019, pág. 103/140
92/100 no cofre, por exemplo, se a política de uso da chave permitir que a chave retorne ao cliente que solicitou a sua criação.
[00206] Na caixa 2302, o próprio enclave de cofre de chave se atesta ao cliente do cofre. Isto pode ser requerido pelo cliente porque o cliente irá fornecer um segredo a ser criptografado na caixa 2312. Na caixa 2304, o enclave de cofre de chave pode receber, por exemplo, do cliente do cofre, uma indicação de uma política de uso de chave. A indicação pode, por exemplo, ser uma estrutura de dados que especifica a política, ou pode ser um identificador a ser usado com um registro das políticas de uso de chave. A própria política de uso de chave pode indicar que essa chave nunca deve ser fornecida a qualquer cliente do cofre. Na caixa 2306, uma nova chave é derivada de uma chave raiz previamente conhecida, por exemplo, com o elemento primitivo de DeriveKey descrito acima. Um pedido (não ilustrado) para derivar a nova chave pode ser recebido pelo enclave de cofre de chave, por exemplo, do cliente do cofre. Na caixa 2308, a chave recentemente derivada pode ser armazenada com segurança de acordo com a política de uso de chave recebida.
[00207] O próprio cliente do cofre pode se atestar ao enclave de cofre de chave na caixa 2310. Um processo de atestação pode incluir a recepção, no enclave de cofre de chave, de um relatório de atestação ou citação do cliente do cofre. A política de uso de chave recebida pode restringir algum ou todos os usos da nova chave aos pedidos dos solicitantes que são autenticados através da atestação de software. Nas caixas 2312 a 2316, uma operação de descriptografia, tal como para o elemento primitivo de Decrypt acima, é executada ao usar a chave derivada na caixa 2306. Em outras modalidades, outras operações podem ser executadas com uma chave trancada no cofre, tal como a criptografia, a assinatura, a verificação de uma assinatura e a derivação de uma outra nova chave da chave derivada na caixa 2306
Petição 870190062354, de 04/07/2019, pág. 104/140
93/100 (que deriva uma chave de segunda geração da chave raiz). Na caixa 2312, um buffer de dados criptografados é recebido do cliente do cofre. Os dados criptografados recebidos são descriptografados com a chave derivada na caixa 1314, e os dados descriptografados resultantes (em um buffer de dados descriptografado) são enviados ao cliente do cofre através do canal de comunicações seguro na caixa 2316.
[00208] Em uma modalidade, um método de identificação de enclave é executado por um dispositivo de computação que compreende um processador e uma memória, em que o método compreende:
a recepção de um tipo de identidade e um pedido para uma operação relacionada ao enclave instanciado;
a determinação de um valor de identidade para o enclave com base no tipo da identidade e na informação derivados de uma imagem de enclave a partir da qual o enclave foi instanciado; e a execução da operação com o valor da identidade.
[00209] Em uma modalidade, o método também compreende:
a verificação da integridade do valor da identidade mediante a verificação de uma assinatura na imagem de enclave com uma chave pública relacionada a um autor da imagem de enclave.
[00210] Em uma modalidade, o valor da identidade é determinado como uma saída de uma função de comprovação, e também compreende:
a determinação, com base pelo menos em parte no tipo da identidade, de uma porção da identidade da imagem de enclave; e a computação a função de comprovação na porção de identidade.
[00211] Em uma modalidade, a imagem de enclave inclui referências a imagens de enclave dependentes adicionais, e também compreende:
Petição 870190062354, de 04/07/2019, pág. 105/140
94/100 a determinação, com base pelo menos em parte no tipo da identidade, de quais imagens de enclave dependentes adicionais são incluídas como entrada para a função de comprovação.
[00212] Em uma modalidade, a porção de identidade inclui um ou mais de: o código binário copiado em um invólucro seguro de enclave durante a instanciação do enclave instanciado, e um ou mais identificadores que não são códigos executáveis.
[00213] Em uma modalidade:
o valor da identidade é determinado como uma saída de uma função de comprovação;
o enclave foi instanciado com uma pluralidade de imagens de enclave; e o tipo de identidade indica quais imagens da pluralidade de imagens de enclave são incluídas pelo menos em parte na função de comprovação para determinar o valor da identidade.
[00214] Em uma modalidade:
a operação inclui a geração de um relatório de atestação com o valor da identidade.
[00215] Em uma modalidade:
a operação inclui a travação de dados ao enclave mediante a travação dos dados com o valor da identidade.
[00216] Em uma modalidade, a operação inclui a incrementação de um contador monotônico, em que o contador monotônico é identificado pelo valor da identidade.
[00217] Em uma modalidade, a operação inclui a execução de uma medição do tempo confiável, em que o tempo confiável é determinado com base no valor da identidade.
[00218] Em uma modalidade, um sistema compreende pelo menos um processador e uma memória que armazena instruções na mesma que, quando executadas pelo sistema, causam pelo menos:
Petição 870190062354, de 04/07/2019, pág. 106/140
95/100 a recepção de um tipo de identidade e um pedido para uma operação relacionada ao enclave instanciado;
a determinação de um valor de identidade para o enclave com base no tipo da identidade e na informação derivados de uma imagem de enclave a partir da qual o enclave foi instanciado; e a execução da operação com o valor da identidade.
[00219] Em uma modalidade, as instruções também causam pelo menos:
a verificação da integridade do valor da identidade mediante a verificação de uma assinatura na imagem de enclave com uma chave pública relacionada a um autor da imagem de enclave.
[00220] Em uma modalidade, o valor da identidade é determinado como uma saída de uma função de comprovação, e em que as instruções também causam pelo menos:
a determinação, com base pelo menos em parte no tipo da identidade, de uma porção de identidade da imagem de enclave; e a computação da função de comprovação na porção de identidade.
[00221] Em uma modalidade, a imagem de enclave inclui referências a imagens de enclave dependentes adicionais, e em que as instruções também causam pelo menos:
a determinação, com base pelo menos em parte no tipo da identidade, de quais imagens de enclave dependentes adicionais são incluídas como entrada para a função de comprovação.
[00222] Em uma modalidade, a porção de identidade inclui um ou mais de: o código binário copiado em um invólucro seguro de enclave durante a instanciação do enclave instanciado, e um ou mais identificadores que não são códigos executáveis.
[00223] Em uma modalidade, o valor da identidade é determinado como uma saída de uma função de comprovação;
Petição 870190062354, de 04/07/2019, pág. 107/140
96/100 o enclave foi instanciado com uma pluralidade de imagens de enclave; e o tipo da identidade indica quais imagens da pluralidade de imagens de enclave são incluídas pelo menos em parte na função de comprovação para determinar o valor da identidade.
[00224] Em uma modalidade, a operação inclui a geração de um relatório de atestação com o valor da identidade.
[00225] Em uma modalidade, a operação inclui a travação de dados ao enclave mediante a travação dos dados com o valor da identidade.
[00226] Em uma modalidade, a operação inclui a incrementação de um contador monotônico, em que o contador monotônico é identificado pelo valor da identidade.
[00227] Em uma modalidade, a operação inclui a execução de uma medição do tempo confiável, em que o tempo confiável é determinado com base no valor da identidade.
[00228] Em uma modalidade, um método de identificação de enclave compreende:
a recepção de um tipo de identidade e um pedido para uma operação relacionada ao enclave instanciado;
a determinação de um valor da identidade para o enclave com base no tipo da identidade e nos dados armazenados em um invólucro de enclave; e a execução da operação com o valor da identidade.
[00229] O método de identificação de enclave de acordo com a reivindicação 21, no qual:
os dados armazenados no invólucro de enclave incluem uma pluralidade de valores da identidade, e o valor da identidade é determinado mediante uma seleção entre a pluralidade de valores da identidade com base no tipo da identidade.
Petição 870190062354, de 04/07/2019, pág. 108/140
97/100 [00230] Cada um dos processos, dos métodos e dos algoritmos descritos nas seções precedentes pode ser incorporado, e automatizado integral ou parcialmente, por módulos do código executados por um ou mais computadores ou processadores do computador. Os módulos de código podem ser armazenados em qualquer tipo de dispositivo de armazenamento não transitório que pode ser lido por computador ou dispositivo de armazenamento do computador, tais como discos rígidos, memória de estado sólido, disco óptico e/ou outros ainda. Os processos e os algoritmos podem ser implementados parcial ou completamente em circuitos específicos de aplicativos. Os resultados dos processos e das etapas divulgados do processo podem ser armazenados, de modo persistente ou de outra maneira, em qualquer tipo de armazenamento de computador não transitório tal como o armazenamento volátil ou não volátil. Os vários elementos e processos descritos acima podem ser usados independentemente uns dos outros, ou podem ser combinados de várias maneiras. Todas as combinações e subcombinações possíveis devem se enquadrar dentro do âmbito desta descrição. Além disso, determinados métodos ou blocos de processo podem ser omitidos em algumas implementações. Os métodos e os processos descritos no presente documento também não são limitados a nenhuma sequência particular, e os blocos ou os estados que estão relacionados aos mesmos podem ser executados em outras sequências que são apropriadas. Por exemplo, os blocos ou os estados descritos podem ser executados em uma ordem que não aquela divulgada especificamente, ou múltiplos blocos ou estados podem ser combinados em um único bloco ou estado. Os blocos ou os estados exemplificadores podem ser executados em série, em paralelo ou de alguma outra maneira. Os blocos ou os estados podem ser adicionados a ou removidos das modalidades exemplificadoras divulgadas. Os sistemas e os componentes exemplificadores descritos no presente documento
Petição 870190062354, de 04/07/2019, pág. 109/140
98/100 podem ser configurados de maneira distinta do que foi descrito. Por exemplo, os elementos podem ser adicionados a, removidos de ou rearranjados em comparação às modalidades exemplificadoras divulgadas.
[00231] Também deve ser apreciado que vários itens são ilustrados como sendo armazenados na memória ou no meio de armazenamento enquanto são usados, e que esses itens ou porções dos mesmos podem ser transferidos entre a memória e outros dispositivos de armazenamento para finalidades de gerenciamento da memória e integridade dos dados. Alternativamente, em outras modalidades alguns ou todos os módulos e/ou sistemas de software podem ser executados na memória em um outro dispositivo e se comunicar com os sistemas de computação ilustrados através de uma comunicação entre computadores. Além disso, em algumas modalidades, alguns ou todos os sistemas e/ou os módulos podem ser implementados ou providos de outras maneiras, tal como pelo menos parcialmente em firmware e/ou hardware, incluindo, mas sem ficar a eles limitados, um ou mais circuitos integrados específicos de aplicativos (ASICs), circuitos integrados padrão, controladores (por exemplo, mediante a execução de instruções apropriadas, e incluindo microcontroladores e/ou controladores embutidos), disposições de portas programáveis no campo (FPGAs), dispositivos lógicos programáveis complexos (CPLDs), etc. Alguns ou todos os módulos, sistemas e estruturas de dados também ser armazenados (por exemplo, como instruções de software ou dados estruturados) em um meio que pode ser lidos por computador, tal como um disco rígido, uma memória, uma rede ou em um artigo de mídia portátil a ser lido por um drive apropriado ou através de uma conexão apropriada. Para finalidades deste relatório descritivo e das reivindicações, a expressão meio de armazenamento que pode ser lido por computador e as variações do mesmo, não inclui ondas, sinais e/ou outros
Petição 870190062354, de 04/07/2019, pág. 110/140
99/100 meios de comunicação transitórios e/ou intangíveis. Os sistemas, os módulos e as estruturas de dados também podem ser transmitidos como sinais de dados gerados (por exemplo, como parte de uma onda portadora ou outro sinal propagado analógico ou digital) em uma variedade de meios de transmissão que podem ser lidos por computador, incluindo meios baseados em comunicação sem fio e com fio, e podem assumir uma variedade de formas (por exemplo, como parte de um sinal analógico simples ou multiplexado, ou como múltiplos pacotes ou quadros digitais distintos). Tais produtos de programa de computador também podem assumir outras formas em outras modalidades. Por conseguinte, a presente invenção pode ser praticada com outras configurações de sistema computadorizado.
[00232] A linguagem condicional usada no presente documento, tal como, entre outros, pode, podería, podia, pôde, por exemplo, e outros ainda, a menos que esteja indicado especificamente de alguma outra maneira, ou compreendido de alguma outra maneira dentro do contexto tal como usado, geralmente se presta a indicar que determinadas modalidades incluem, ao passo que outras modalidades não incluem, determinados características, elementos e/ou etapas. Desse modo, tal linguagem condicional não se presta geralmente a implicar que as características, os elementos e/ou as etapas são de qualquer maneira requeridos para uma ou mais modalidades ou que uma ou mais modalidades incluem necessariamente a lógica para decidir, com ou sem a entrada ou alerta do autor, se essas características, elementos e/ou etapas estão incluídos ou devem ser executados em qualquer modalidade particular. Os termos que compreende, que inclui, que tem e outros ainda são sinônimos e são usados de maneira inclusiva, em uma forma de sentido aberto, e não excluem elementos, características, atos, operações adicionais, e assim por diante. Além disso, o termo ou é usado em seu sentido inclusivo (e não em seu sentido
Petição 870190062354, de 04/07/2019, pág. 111/140
100/100 exclusivo) de modo que, quando usado, por exemplo, para conectar uma lista de elementos, o termo ou significa um, alguns ou todos os elementos na lista.
[00233] Embora determinadas modalidades exemplificadoras tenham sido descritas, essas modalidades foram apresentadas apenas a título de exemplo e não se prestam a limitar o âmbito das invenções divulgadas no presente documento. Desse modo, nada na descrição acima pretende implicar que qualquer peculiaridade, característica, etapa, módulo ou bloco particular é necessário ou indispensável. Certamente, os novos métodos e sistemas descritos no presente documento podem ser incorporados em uma variedade de outras formas; além disso, várias omissões, substituições e mudanças na forma dos métodos e dos sistemas descritos no presente documento podem ser feitas sem desviar do caráter das invenções divulgadas no presente documento. As reivindicações anexas e seus equivalentes se prestam a cobrir tais formas ou modificações tal como deve ser enquadrado dentro do âmbito e caráter de certas das invenções divulgadas no presente documento.

Claims (15)

  1. REIVINDICAÇÕES
    1. Método de identificação de enclave executado por um dispositivo de computação que compreende um processador e uma memória, caracterizado pelo fato de que o método compreende:
    a recepção de um tipo de identidade e um pedido para uma operação relacionada a um enclave instanciado;
    a determinação de um valor da identidade para o enclave com base no tipo de identidade e na informação derivada de uma imagem de enclave a partir da qual o enclave foi instanciado; e a execução da operação com o valor da identidade.
  2. 2. Método de acordo com a reivindicação 1, caracterizado pelo fato de que compreende ainda:
    a verificação da integridade do valor da identidade mediante a verificação de uma assinatura na imagem de enclave com uma chave pública relacionada a um autor da imagem de enclave.
  3. 3. Método de acordo com a reivindicação 1, caracterizado pelo fato de que o valor da identidade é determinado como uma saída de uma função de comprovação (função hash), e compreende ainda:
    a determinação, com base pelo menos em parte no tipo da identidade, de uma porção de identidade da imagem de enclave; e a computação da função de comprovação na porção de identidade.
  4. 4. Método de acordo com a reivindicação 3, caracterizado pelo fato de que a imagem de enclave inclui referências às imagens de enclave dependentes adicionais, e compreende ainda:
    a determinação, com base pelo menos em parte no tipo da identidade, de quais imagens de enclave dependentes adicionais são incluídas como uma entrada para a função de comprovação.
  5. 5. Método de acordo com a reivindicação 3, caracterizado pelo fato de que a porção de identidade inclui um ou mais de: código
    Petição 870190062354, de 04/07/2019, pág. 113/140
    2/4 binário copiado em um invólucro seguro de enclave durante a instanciação do enclave instanciado, e um ou mais identificadores que não podem ser executáveis com código.
  6. 6. Método de acordo com a reivindicação 1, caracterizado pelo fato de que:
    o valor da identidade é determinado como uma saída de uma função de comprovação;
    o enclave foi instanciado com uma pluralidade de imagens de enclave; e o tipo da identidade indica quais imagens da pluralidade de imagens de enclave são incluídas pelo menos em parte na função de comprovação para determinar o valor da identidade.
  7. 7. Método de acordo com a reivindicação 1, caracterizado pelo fato de que:
    a operação inclui a geração de um relatório de atestação com o valor da identidade.
  8. 8. Método de acordo com a reivindicação 1, caracterizado pelo fato de que:
    a operação inclui a travação dos dados ao enclave mediante a travação dos dados com o valor da identidade.
  9. 9. Método de acordo com a reivindicação 1, caracterizado pelo fato de que:
    a operação inclui a incrementação de um contador monotônico, em que o contador monotônico é identificado pelo valor da identidade.
  10. 10. Método de acordo com a reivindicação 1, caracterizado pelo fato de que:
    a operação inclui a execução de uma medição do tempo confiável, em que o tempo confiável é determinado com base no valor da identidade.
    Petição 870190062354, de 04/07/2019, pág. 114/140
    3/4
  11. 11. Sistema, caracterizado pelo fato de que compreende pelo menos um processador e uma memória que armazena instruções na mesma que, quando executadas pelo sistema, causa pelo menos:
    a recepção de um tipo de identidade e um pedido para uma operação relacionada ao enclave instanciado;
    a determinação de um valor da identidade para o enclave com base no tipo de identidade e na informação derivada de uma imagem de enclave a partir da qual o enclave foi instanciado; e a execução da operação com o valor da identidade.
  12. 12. Sistema de acordo com a reivindicação 11, caracterizado pelo fato de que as instruções também causam pelo menos:
    a verificação da integridade do valor da identidade mediante a verificação de uma assinatura na imagem de enclave com uma chave pública relacionada a um autor da imagem de enclave.
  13. 13. Sistema de acordo com a reivindicação 11, caracterizado pelo fato de que o valor da identidade é determinado como uma saída de uma função de comprovação, e em que as instruções também causam pelo menos:
    a determinação, com base pelo menos em parte no tipo da identidade, de uma porção de identidade da imagem de enclave; e a computação da função de comprovação na porção de identidade.
  14. 14. Sistema de acordo com a reivindicação 13, caracterizado pelo fato de que a imagem de enclave inclui referências a imagens de enclave dependentes adicionais, e em que as instruções também causam pelo menos:
    a determinação, com base pelo menos em parte no tipo da identidade, de quais imagens de enclave dependentes adicionais são incluídas como entrada para a função de comprovação.
    Petição 870190062354, de 04/07/2019, pág. 115/140
    4/4
  15. 15. Dispositivo de computação, caracterizado pelo fato de que é configurado para:
    receber um tipo de identidade e um pedido para uma operação relacionada ao enclave instanciado;
    a determinação de um valor de identidade para o enclave com base no tipo e nos dados da identidade armazenados em um invólucro de enclave; e executar a operação com o valor da identidade.
BR112019013874A 2017-01-24 2017-12-20 identidade de enclave abstrata BR112019013874A2 (pt)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US15/414,355 US11443033B2 (en) 2017-01-24 2017-01-24 Abstract enclave identity
PCT/US2017/067451 WO2018140160A1 (en) 2017-01-24 2017-12-20 Abstract enclave identity

Publications (1)

Publication Number Publication Date
BR112019013874A2 true BR112019013874A2 (pt) 2020-04-14

Family

ID=60991584

Family Applications (1)

Application Number Title Priority Date Filing Date
BR112019013874A BR112019013874A2 (pt) 2017-01-24 2017-12-20 identidade de enclave abstrata

Country Status (19)

Country Link
US (1) US11443033B2 (pt)
EP (2) EP3574432B1 (pt)
JP (1) JP7059291B2 (pt)
KR (1) KR102466793B1 (pt)
CN (1) CN110226167B (pt)
AU (1) AU2017395731C1 (pt)
BR (1) BR112019013874A2 (pt)
CA (1) CA3046497C (pt)
CL (1) CL2019002005A1 (pt)
CO (1) CO2019007651A2 (pt)
IL (1) IL267935B (pt)
MX (1) MX2019008752A (pt)
MY (1) MY202373A (pt)
NZ (1) NZ754509A (pt)
PH (1) PH12019550121A1 (pt)
RU (1) RU2762141C2 (pt)
SG (1) SG11201905463TA (pt)
WO (1) WO2018140160A1 (pt)
ZA (1) ZA201903706B (pt)

Families Citing this family (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB2560716B (en) 2017-03-20 2022-05-25 Blueskytec Ltd Electronic anti-tamper device
US10819696B2 (en) * 2017-07-13 2020-10-27 Microsoft Technology Licensing, Llc Key attestation statement generation providing device anonymity
US11544372B2 (en) * 2018-04-11 2023-01-03 Google Llc Mutually distrusting enclaves
US11693952B2 (en) * 2018-10-31 2023-07-04 Vmware, Inc. System and method for providing secure execution environments using virtualization technology
US10757572B2 (en) * 2018-11-01 2020-08-25 Qualcomm Incorporated Identity based signature in system information protection
US11741196B2 (en) 2018-11-15 2023-08-29 The Research Foundation For The State University Of New York Detecting and preventing exploits of software vulnerability using instruction tags
EP3683712B1 (en) * 2019-01-16 2021-10-20 Siemens Aktiengesellschaft Protecting integrity of log data
US11256785B2 (en) * 2019-07-09 2022-02-22 Microsoft Technologly Licensing, LLC Using secure memory enclaves from the context of process containers
US11573828B2 (en) * 2019-09-16 2023-02-07 Nec Corporation Efficient and scalable enclave protection for machine learning programs
US11019033B1 (en) 2019-12-27 2021-05-25 EMC IP Holding Company LLC Trust domain secure enclaves in cloud infrastructure
CN113569245A (zh) * 2020-04-28 2021-10-29 阿里巴巴集团控股有限公司 处理装置、嵌入式系统、片上系统以及安全控制方法
US11310059B2 (en) 2020-06-02 2022-04-19 Microsoft Technology Licensing, Llc Ephemeral cryptography keys for authenticating computing services
EP4226573A1 (en) 2020-10-05 2023-08-16 Redcom Laboratories, Inc. Zkmfa: zero-knowledge based multi-factor authentication system
CN114422215B (zh) * 2021-12-31 2024-06-25 国网安徽省电力有限公司合肥供电公司 一种基于区块链的跨平台和可信能源数据共享系统及方法

Family Cites Families (25)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8171057B2 (en) * 2008-10-23 2012-05-01 Microsoft Corporation Modeling party identities in computer storage systems
US8352741B2 (en) * 2009-06-11 2013-01-08 Microsoft Corporation Discovery of secure network enclaves
US9742560B2 (en) * 2009-06-11 2017-08-22 Microsoft Technology Licensing, Llc Key management in secure network enclaves
US8782434B1 (en) 2010-07-15 2014-07-15 The Research Foundation For The State University Of New York System and method for validating program execution at run-time
US8972746B2 (en) * 2010-12-17 2015-03-03 Intel Corporation Technique for supporting multiple secure enclaves
US8832452B2 (en) 2010-12-22 2014-09-09 Intel Corporation System and method for implementing a trusted dynamic launch and trusted platform module (TPM) using secure enclaves
US8789138B2 (en) 2010-12-27 2014-07-22 Microsoft Corporation Application execution in a restricted application execution environment
EP2482220A1 (en) 2011-01-27 2012-08-01 SafeNet, Inc. Multi-enclave token
US9838370B2 (en) * 2012-09-07 2017-12-05 Oracle International Corporation Business attribute driven sizing algorithms
US9208354B2 (en) * 2013-03-12 2015-12-08 Intel Corporation Techniques for securing use of one-time passwords
WO2014196966A1 (en) 2013-06-04 2014-12-11 Intel Corporation Technologies for hardening the security of digital information on client platforms
WO2015060858A1 (en) 2013-10-24 2015-04-30 Intel Corporation Methods and apparatus for protecting software from unauthorized copying
WO2015094261A1 (en) 2013-12-19 2015-06-25 Intel Corporation Policy-based trusted inspection of rights managed content
US9448950B2 (en) 2013-12-24 2016-09-20 Intel Corporation Using authenticated manifests to enable external certification of multi-processor platforms
US9355262B2 (en) 2013-12-27 2016-05-31 Intel Corporation Modifying memory permissions in a secure processing environment
US9436455B2 (en) * 2014-01-06 2016-09-06 Apple Inc. Logging operating system updates of a secure element of an electronic device
JP2016086226A (ja) 2014-10-23 2016-05-19 インテリジェントウィルパワー株式会社 真正性証明システム
US9904805B2 (en) * 2015-09-23 2018-02-27 Intel Corporation Cryptographic cache lines for a trusted execution environment
US10261782B2 (en) * 2015-12-18 2019-04-16 Amazon Technologies, Inc. Software container registry service
US10354095B2 (en) * 2016-03-31 2019-07-16 Intel Corporation Methods and apparatus to initialize enclaves on target processors
US10708067B2 (en) * 2016-06-18 2020-07-07 Intel Corporation Platform attestation and registration for servers
US10338957B2 (en) * 2016-12-27 2019-07-02 Intel Corporation Provisioning keys for virtual machine secure enclaves
US10372945B2 (en) 2017-01-24 2019-08-06 Microsoft Technology Licensing, Llc Cross-platform enclave identity
US10530777B2 (en) 2017-01-24 2020-01-07 Microsoft Technology Licensing, Llc Data unsealing with a sealing enclave
US10931652B2 (en) 2017-01-24 2021-02-23 Microsoft Technology Licensing, Llc Data sealing with a sealing enclave

Also Published As

Publication number Publication date
PH12019550121A1 (en) 2020-02-10
CA3046497A1 (en) 2018-08-02
KR20190108572A (ko) 2019-09-24
JP7059291B2 (ja) 2022-04-25
MY202373A (en) 2024-04-24
EP3574432A1 (en) 2019-12-04
KR102466793B1 (ko) 2022-11-11
AU2017395731C1 (en) 2022-07-28
CL2019002005A1 (es) 2019-12-13
IL267935B (en) 2022-03-01
RU2019126638A (ru) 2021-02-26
US11443033B2 (en) 2022-09-13
RU2019126638A3 (pt) 2021-05-14
US20180211035A1 (en) 2018-07-26
JP2020505701A (ja) 2020-02-20
AU2017395731B2 (en) 2022-01-20
EP3798887B1 (en) 2022-07-13
IL267935A (en) 2019-09-26
CO2019007651A2 (es) 2019-07-31
MX2019008752A (es) 2019-09-13
CA3046497C (en) 2024-05-28
EP3798887A1 (en) 2021-03-31
NZ754509A (en) 2023-07-28
CN110226167A (zh) 2019-09-10
ZA201903706B (en) 2020-10-28
AU2017395731A1 (en) 2019-07-04
WO2018140160A1 (en) 2018-08-02
SG11201905463TA (en) 2019-08-27
EP3574432B1 (en) 2021-01-20
RU2762141C2 (ru) 2021-12-16
CN110226167B (zh) 2023-08-04

Similar Documents

Publication Publication Date Title
CA3048892C (en) Data unsealing with a sealing enclave
US10911451B2 (en) Cross-platform enclave data sealing
CA3048407C (en) Data sealing with a sealing enclave
CA3046517C (en) Cross-platform enclave identity
US11438155B2 (en) Key vault enclave
CA3046497C (en) Abstract enclave identity
US10867029B2 (en) Enclave client abstraction model
US10877785B2 (en) Enclave abstraction model
US11036875B2 (en) Dependent enclave binaries
EP3574433B1 (en) Nested enclave identity

Legal Events

Date Code Title Description
B350 Update of information on the portal [chapter 15.35 patent gazette]
B06W Patent application suspended after preliminary examination (for patents with searches from other patent authorities) chapter 6.23 patent gazette]