BR112021000563A2 - Segundo dispositivo criptográfico, primeiro dispositivo criptográfico, método criptográfico para compartilhar uma palavra de código e mídia legível por computador - Google Patents

Segundo dispositivo criptográfico, primeiro dispositivo criptográfico, método criptográfico para compartilhar uma palavra de código e mídia legível por computador Download PDF

Info

Publication number
BR112021000563A2
BR112021000563A2 BR112021000563-3A BR112021000563A BR112021000563A2 BR 112021000563 A2 BR112021000563 A2 BR 112021000563A2 BR 112021000563 A BR112021000563 A BR 112021000563A BR 112021000563 A2 BR112021000563 A2 BR 112021000563A2
Authority
BR
Brazil
Prior art keywords
key
bits
data
public key
cryptographic
Prior art date
Application number
BR112021000563-3A
Other languages
English (en)
Inventor
Oscar Garcia Morchon
Sauvik BHATTACHARYA
Ludovicus Marinus Gerardus Maria Tolhuizen
Original Assignee
Koninklijke Philips N.V.
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
Priority claimed from EP18187763.0A external-priority patent/EP3609117A1/en
Application filed by Koninklijke Philips N.V. filed Critical Koninklijke Philips N.V.
Publication of BR112021000563A2 publication Critical patent/BR112021000563A2/pt

Links

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/30Public key, i.e. encryption algorithm being computationally infeasible to invert or user's encryption keys not requiring secrecy
    • H04L9/3093Public key, i.e. encryption algorithm being computationally infeasible to invert or user's encryption keys not requiring secrecy involving Lattices or polynomial equations, e.g. NTRU scheme
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/08Key distribution or management, e.g. generation, sharing or updating, of cryptographic keys or passwords
    • H04L9/0816Key establishment, i.e. cryptographic processes or cryptographic protocols whereby a shared secret becomes available to two or more parties, for subsequent use
    • H04L9/0838Key agreement, i.e. key establishment technique in which a shared key is derived by parties as a function of information contributed by, or associated with, each of these
    • H04L9/0841Key agreement, i.e. key establishment technique in which a shared key is derived by parties as a function of information contributed by, or associated with, each of these involving Diffie-Hellman or related key agreement protocols
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L2209/00Additional information or applications relating to cryptographic mechanisms or cryptographic arrangements for secret or secure communication H04L9/00
    • H04L2209/34Encoding or coding, e.g. Huffman coding or error correction

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Mathematical Optimization (AREA)
  • Algebra (AREA)
  • General Physics & Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Physics & Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Pure & Applied Mathematics (AREA)
  • Computing Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Detection And Prevention Of Errors In Transmission (AREA)
  • Mobile Radio Communication Systems (AREA)
  • Financial Or Insurance-Related Operations Such As Payment And Settlement (AREA)
  • Storage Device Security (AREA)

Abstract

Algumas modalidades se referem a um dispositivo criptográfico (20). Uma função de bits confiáveis pode ser aplicada a uma chave compartilhada bruta (k*) para obter índices confiáveis, indicando coeficientes de uma chave compartilhada bruta e bits confiáveis derivados dos coeficientes indicados. Os dados de reconciliação (h) podem ser gerados para os coeficientes indicados da chave compartilhada bruta. Uma palavra de código pode ser encapsulada com o uso dos bits confiáveis mediante a aplicação de uma função de encapsulamento, obtendo dados encapsulados (c) que podem ser transferidos.

Description

SEGUNDO DISPOSITIVO CRIPTOGRÁFICO, PRIMEIRO DISPOSITIVO CRIPTOGRÁFICO, MÉTODO CRIPTOGRÁFICO PARA COMPARTILHAR UMA PALAVRA DE CÓDIGO E MÍDIA LEGÍVEL POR
COMPUTADOR Campo da invenção
[001] A invenção se refere a um dispositivo criptográfico, a um método criptográfico e a uma mídia legível por computador.
[002] Antecedentes da invenção
[003] Na criptografia, um protocolo de concordância de chaves é um protocolo segundo o qual duas ou mais partes, que ainda não compartilham uma chave comum, podem estar em acordo a respeito dessa chave. De preferência, ambas as partes podem influenciar o resultado, de modo que nenhuma das partes possa forçar a escolha da chave. Um invasor que espiona toda a comunicação entre as duas partes não precisa ter nenhum conhecimento sobre a chave. Contudo, embora o invasor que observa a mesma comunicação saiba pouco ou nada sobre ela, as próprias partes podem derivar uma chave compartilhada.
[004] Protocolos de concordância de chaves são úteis, por exemplo, para proteger a comunicação, por exemplo para criptografar e/ou autenticar mensagens entre as partes.
[005] Protocolos de concordância de chaves práticos foram introduzidos em 1976, quando Whitfield Diffie e Martin Hellman introduziram a noção de criptografia de chave pública. Eles propuseram um sistema para o acordo de chaves entre duas partes, que usa a aparente dificuldade de logaritmos computacionais em um campo finito GF(q) com q elementos. Com o uso desse sistema, os dois usuários podem concordar a respeito de uma chave simétrica. A chave simétrica pode, então, ser usada,
por exemplo, para comunicação criptografada entre as duas partes.
[006] Métodos de acordo de chaves atuais aplicáveis quando as partes não têm ainda um segredo compartilhado, como o método de acordo de chaves Diffie- Hellman, exigem operações matemáticas intensas em recursos. Por exemplo, o Diffie-Hellman exige que uma pessoa execute operações de exponenciação em relação a um campo finito. Tanto o expoente como o tamanho de campo podem ser grandes. Isso torna os protocolos de concordância de chaves menos adequados para dispositivos com recursos insuficientes. Por outro lado, os protocolos de concordância de chaves poderiam ser muito úteis em dispositivos com recursos limitados. Por exemplo, em áreas de aplicação como a internet das coisas, redes sem fio para fins específicos, e similares, o acordo de chaves poderia ser usado para proteger enlaces entre dispositivos. Outro exemplo é a comunicação entre um leitor e uma etiqueta (tag) eletrônica, por exemplo, um leitor de cartão e um cartão inteligente, ou um leitor de etiqueta e etiqueta, por exemplo, uma etiqueta RFID ou uma etiqueta NFC. Seria vantajoso ter um protocolo de concordância de chaves que coloque uma carga menor sobre pelo menos uma das duas partes, por exemplo a etiqueta eletrônica.
[007] A fim de facilitar a comunicação segura entre as partes, protocolos de concordância de chaves são, às vezes, ainda subdivididos em esquemas de troca de chaves criptográficas (KEX) e encapsulamento de chave criptográfica (KEM). Os esquemas de encapsulamento de chave criptográfica (KEM) usam criptografia assimétrica para estabelecer um segredo compartilhado entre duas partes, com o uso de um valor publicamente conhecido (por exemplo, chave pública) e de propriedade secreta (por exemplo, chave secreta) para cada parte.
[008] Os esquemas KEX envolvem a troca de chaves públicas por cada uma das partes, que são, então, usadas independentemente pela outra parte juntamente com sua própria chave secreta para calcular o segredo comum compartilhado. Um exemplo bem conhecido de um esquema KEX é a troca de chaves de Diffie-Hellman, mencionado acima, cuja segurança é baseada em resolver o problema de logaritmo discreto. Um recurso interessante de alguns esquemas KEX é que o real segredo final compartilhado nunca é trocado entre as partes, nem mesmo na forma criptografada, mas é calculado independentemente pelas duas partes em cada extremidade. Isso resulta em um recurso desejável conhecido como sigilo futuro, que garante que até mesmo o comprometimento da chave secreta de uma das partes de longo prazo por um invasor no futuro não comprometa o sigilo de mensagens criptografadas trocadas no passado.
[009] Esquemas KEM estabelecem um segredo compartilhado entre duas entidades ou partes com o uso de criptografia assimétrica por uma das partes, geralmente, o iniciador da comunicação, para criptografar (usando a chave pública da outra parte) e transmitir um segredo compartilhado para a outra parte, conhecida como o respondente, que pode, então, descriptografá-lo (usando sua chave secreta) e, então, usá-lo para comunicação segura com a parte iniciadora. Os esquemas KEM não podem obter um sigilo direto, uma vez que qualquer invasor que comprometa a chave secreta de uma das partes para uma sessão anterior e que tenha registrado todas as mensagens trocadas entre as partes nessa sessão pode recuperar o segredo compartilhado para aquela sessão específica.
[0010] Devido às crescentes necessidades de segurança na Internet das coisas, os esquemas de troca de chaves também precisam obter alta eficiência (por exemplo quantidade mínima de comunicação ou requisitos de largura de banda) enquanto também permanecem seguros contra adversários clássicos, bem como com capacidade quântica.
[0011] É feita referência a: RLWE (Aprendizado de anel com erros ou Ring Learning With Errors, em inglês): “On Ideal Lattices and Learning with Errors Over Rings”, de Vadim Lyubashevsky, Chris Peikert e Oded Regev, RLWR (Aprendizado de anel com arredondamento ou Ring Learning With Rounding, em inglês): “Pseudorandom Functions and Lattices”, de Abhishek Banerjee, Chris Peikert e Alon Rosen, LWE (Aprender com erros ou Learning With Errors, em inglês): “On Lattices, Learning with Errors, Random Linear Codes, and Cryptography”, de Oded Regev. LWR (Aprender com arredondamento ou Learning With Rounding, em inglês): “Pseudorandom Functions and Lattices”, de Abhishek Banerjee, Chris Peikert e Alon Rosen, Hila5: “HILA5: On Reliability, Reconciliation, and Error Correction for Ring-LWE Encryption”, de Markku-Juhani O. Saarinen Round2: “Round2: KEM and PKE based on GLWR”, de Hayo Baan, Sauvik Bhattacharya, Oscar Garcia-Morchon, Ronald Rietman, Ludo Tolhuizen, Jose-Luis Torre-Arce e Zhenfei Zhang Sumário da invenção
[0012] Seria vantajoso ter dispositivos criptográficos aprimorados que tratem desses e outros problemas. Um primeiro e um segundo dispositivos criptográficos são apresentados conforme definidos nas reivindicações.
[0013] Curiosamente, o encapsulamento se aplica tanto a bits de dados quanto a bits de paridade, não apenas a bits de paridade. Além disso, o encapsulamento é aplicado a uma palavra de código, que pode ser dados parcialmente gerados, por exemplo uma mensagem, uma chave e/ou uma pré-chave. O encapsulamento não é aplicado a dados que são derivados das chaves privadas, ou até mesmo das chaves públicas. Isso aprimora a resiliência contra ataques ativos. Note que a palavra de código é independente das chaves privadas, e até mesmo das chaves públicas.
[0014] Em uma modalidade, uma chave compartilhada é derivada de pelo menos uma parte dos dados da palavra de código. Note que em uma modalidade, nenhum dos bits confiáveis é usado para se derivar de uma chave, mas, ao invés disso, eles são usados para encapsulamento, podem ser ignorados ou são utilizadas para outros fins, por exemplo derivar uma forma de chave não relacionada.
[0015] Em uma modalidade, o primeiro e o segundo dispositivos criptográficos são configurados para um protocolo de concordância de chaves. Por exemplo, uma chave criptográfica compartilhada pode ser derivada pelo menos dos dados codificados na palavra de código. Neste caso, a primeira chave privada pode ser efemeramente gerada para gerar a chave compartilhada. A segunda chave privada pode ser efemeramente gerada também.
[0016] Em uma modalidade, o primeiro e o segundo dispositivos criptográficos são configurados para uma criptografia de chave pública. Por exemplo, uma mensagem pode ser codificada na palavra de código. A mensagem pode ser obtida pelo primeiro dispositivo criptográfico. Por exemplo, a mensagem pode ser criptografada com uma chave simétrica compartilhada derivada pelo menos dos dados codificados na palavra de código. A mensagem criptografada pode ser enviada com a segunda chave pública do segundo dispositivo para o primeiro dispositivo. Múltiplos segundos dispositivos criptográficos podem usar as mesmas informações públicas, por exemplo a primeira chave pública, para criptografar mensagens para o primeiro dispositivo criptográfico.
[0017] Curiosamente, as três fontes de informações podem ser usadas para reduzir a probabilidade de falha quando trocar a palavra de código, e uma chave aleatoriamente gerada a partir dela. Além disso, em virtude de a palavra de código poder ser aleatoriamente gerada, a segurança ativa é obtida. Essas fontes incluem o uso de bits confiáveis, dos dados de reconciliação extraídos para coeficientes de uma chave bruta e de informações de redundância de correção de erro que fazem parte da palavra de código, por exemplo bits de paridade.
[0018] Por exemplo, em uma modalidade, o primeiro e o segundo dispositivo criptográfico podem estar em acordo a respeito de uma chave bruta, por exemplo uma chave polinomial k* com n coeficientes em Z_q. Por exemplo, n pode ser o tamanho do anel polinomial. Por exemplo, um coeficiente em uma chave bruta pode ser mapeado para parte de uma chave final, ou uma pré-chave, por exemplo para um ou mais bits. Por exemplo, metade dos valores em Z_q pode ser mapeada para 0 e metade deles para
1. A seleção de bits confiáveis pode ser feita selecionando- se, por exemplo, algum número, por exemplo mu, de coeficientes que estejam mais distantes do limite de decodificação de modo que a probabilidade de cometer um erro seja menor.
[0019] Dados de reconciliação de chave podem ser informações que são extraídas pelo segundo dispositivo criptográfico, por exemplo para os coeficientes confiáveis escolhidos, por exemplo os coeficientes de mu escolhidos, da chave bruta, por exemplo a chave polinomial. As informações de reconciliação ajudam o primeiro dispositivo criptográfico a chegar à mesma decisão, se um coeficiente específico da chave bruta é mapeado para qual parte da palavra de código. Não que isso só precise ser feito para os coeficientes confiáveis selecionados, o que significa que é necessário menos trabalho.
[0020] Informações de correção de erro podem ser bits de paridade. Bits de paridade podem ser extraídos da chave binária aleatoriamente gerada K, mensagem m ou pré- chave para que as informações que o segundo dispositivo encapsula tenham alguma redundância. Desta forma, mesmo se os erros forem cometidos antes, o primeiro dispositivo pode corrigi-los. Então, se você quiser transmitir uma chave K que tenha kappa bits de comprimento e houver bits de paridade (mu – kappa), esses bits de paridade ajudam o primeiro dispositivo a garantir que os kappa bits da chave K estejam corretos.
[0021] O primeiro e o segundo dispositivos criptográficos podem ser dispositivos eletrônicos. Por exemplo, eles podem ser um computador. Eles podem ser dispositivos eletrônicos móveis, por exemplo um telefone móvel, um cartão inteligente. O primeiro e o segundo dispositivos criptográficos pode ser eletrônicos de consumo, por exemplo um decodificador do tipo set-top box, um televisor.
[0022] Dispositivos e métodos de acordo com uma modalidade podem ser empregados em uma ampla gama de aplicações práticas. Tais aplicações práticas incluem diversos protocolos criptográficos. Essas aplicações práticas incluem aplicativos de mensagens, redes de sensor, comunicação de dados, aplicações financeiras, etc.
[0023] Uma modalidade do método pode ser implementada em um computador como um método implementado por computador, ou em um hardware dedicado, ou em uma combinação de ambos. O código executável para uma modalidade do método pode ser armazenado em um produto de programa de computador. Exemplos de produtos de programa de computador incluem dispositivos de memória, dispositivos de armazenamento óptico, circuitos integrados, servidores, softwares online etc. De preferência, o produto de programa de computador compreende código de programa não transitório armazenado em uma mídia legível por computador para executar uma modalidade do método, quando o dito produto de programa for executado em um computador.
[0024] Em uma modalidade, o programa de computador compreende código de programa de computador adaptado para executar todas ou uma parte das etapas de uma modalidade do método, quando o programa de computador for executado em um computador. De preferência, o programa de computador é incorporado em uma mídia legível por computador.
[0025] Um outro aspecto da invenção apresenta um método para produção do programa de computador disponível para transferência via download. Este aspecto é usado quando o programa de computador é transferido via upload para, por exemplo, a App Store da Apple, a Play Store da Google ou a Windows Store da Microsoft, e quando o programa de computador está disponível para download a partir de tal loja. Breve descrição dos desenhos
[0026] Detalhes adicionais, aspectos e modalidades da invenção serão descritos, apenas a título de exemplo, com referência aos desenhos. Os elementos nas figuras são ilustrados por uma questão de simplicidade e clareza, e não estão necessariamente em escala. Nas figuras, os elementos que correspondem a elementos já descritos podem ter as mesmas referências numéricas. Nos desenhos, a Figura 1 mostra esquematicamente um exemplo de um protocolo de KEX, a Figura 2 mostra esquematicamente um exemplo de um protocolo de KEM, a Figura 3 mostra esquematicamente um exemplo de um protocolo de KEM, a Figura 4 mostra esquematicamente um exemplo de um protocolo de KEM, a Figura 5a mostra esquematicamente um exemplo de uma modalidade de um protocolo de criptografia de chave pública (PKE - public key encryption), a Figura 5b mostra esquematicamente um exemplo de uma modalidade de um protocolo de KEM, a Figura 6 mostra esquematicamente como as modalidades podem ser baseadas na outra, a Figura 7a mostra esquematicamente um exemplo de uma modalidade de um dispositivo de primeira parte 100,
a Figura 7b mostra esquematicamente um exemplo de uma modalidade de um dispositivo de segunda parte 200, a Figura 7c mostra esquematicamente um exemplo de uma modalidade de um sistema criptográfico 101, a Figura 8a mostra esquematicamente uma mídia legível por computador que tem uma parte gravável que compreende um programa de computador de acordo com uma modalidade, a Figura 8b mostra esquematicamente uma representação de um sistema processador de acordo com uma modalidade, a Figura 9 mostra esquematicamente um exemplo de uma geração secreta de acordo com uma modalidade, a Figura 10 mostra esquematicamente um exemplo de um sistema criptográfico de acordo com uma modalidade, a Figura 11a mostra esquematicamente um exemplo de um método criptográfico de acordo com uma modalidade, a Figura 11b mostra esquematicamente um exemplo de um método criptográfico de acordo com uma modalidade, anexo A, que faz parte desta descrição, fornece descrições matemáticas esquemáticas de exemplos de modalidades.
[0027] Lista de números de referência: 10 uma primeira parte 20 uma segunda parte 100 um dispositivo de primeira parte 130 uma interface de comunicação 191 uma rede de computadores 192 uma interface de armazenamento 194 um processador 196 uma memória 200 um dispositivo de segunda parte 230 uma interface de comunicação
292 uma interface de armazenamento 294 um processador 296 uma memória 300 um primeiro dispositivo criptográfico 301 um sistema criptográfico 302 um depósito de chave pública 305 uma interface de comunicação 315 um gerador de chave pública/privada 320 um corretor de erros 325 uma unidade de Diffie-Hellman 335 uma unidade de reconciliação 340 uma unidade de desencapsulamento 350 um segundo dispositivo criptográfico 355 uma interface de comunicação 360 um meio de obtenção de chave pública 365 um gerador de chave pública/privada 370 um gerador de palavra de código 375 uma unidade de Diffie-Hellman 380 um gerador de bits confiáveis 385 um gerador de dados de reconciliação 390 um encapsulador 1000 mídia legível por computador 1010 uma parte gravável 1020 um programa de computador 1110 um circuito integrado (ou circuitos integrados) 1120 uma unidade de processamento 1122 uma memória 1124 um circuito integrado dedicado 1126 um elemento de comunicação 1130 uma interconexão
1140 um sistema processador Descrição detalhada das modalidades
[0028] Embora a invenção seja suscetível de realização de várias formas diferentes, são mostradas nos desenhos, e serão aqui descritas em detalhe, uma ou mais modalidades específicas, com o entendimento de que a presente revelação deve ser considerada como exemplificadora dos princípios da invenção e não se destinam a limitar a invenção às modalidades específicas ilustradas e descritas.
[0029] Na descrição a seguir, para melhor entendimento, os elementos das modalidades são descritos em funcionamento. Entretanto, ficará evidente que os respectivos elementos são dispostos de modo a executar as funções sendo descritas, conforme executadas pelos mesmos.
[0030] Adicionalmente, a invenção não se limita às modalidades, e a invenção se encontra em todo e qualquer recurso inovador ou em toda e qualquer combinação de recursos descritos acima ou mencionados em reivindicações dependentes mutuamente diferentes.
[0031] Apresenta-se um protocolo de KEM que usa uma chave de KEX k para encapsular uma chave K aleatória determinada pela segunda parte bem como parity_bits em K. Modalidades usam uma KEX para encapsulamento, e uma função de bits confiáveis para reduzir a probabilidade de falha. Como usa uma chave KEX para encapsulamento, os dados auxiliares podem ser trocados pois precisam de requisitos de largura de banda baixa e reduz a probabilidade de falha. Como ela encapsula, segurança ativa pode ser obtida. Como ela encapsula bits de paridade também, então novamente pode ser obtida probabilidade de falha melhor. Em modalidades abaixo, será feita referência à função safe_bits, mas isso pode ser qualquer função de bits confiáveis.
[0032] Um problema de muitos protocolos de troca de chaves resistentes a quantum é que eles têm alguma probabilidade de falha. Por exemplo, uma primeira parte e uma segunda parte, inicialmente, estão em acordo a respeito de uma chave bruta ruidosa, que é então reconciliada, por exemplo, através de dados de reconciliação. Uma função de bits confiáveis possibilita que a segunda parte, por exemplo a parte que primeiro deriva a chave bruta, identifique quais bits na chave bruta têm mais probabilidade de serem derivados da mesma forma pela primeira parte, e quais bits na chave bruta têm menos probabilidade de serem os mesmos.
[0033] Uma implementação simples de uma função de bits confiáveis define dois ou mais pontos centrais para os coeficientes que são amostrados para obter bits de chave. Os coeficientes que estão muito longe dos pontos centrais, por exemplo de acordo com um limite, podem ser descartados, enquanto o restante pode ser amostrado para um valor associado ao ponto central. Por exemplo, o número de pontos centrais pode ser uma potência de 2. Por exemplo, os coeficientes podem ser coeficientes polinomiais, ou elementos de matriz, possivelmente ao longo de uma variedade de diferentes anéis e similares.
[0034] A amostragem de bits confiáveis usa o pressuposto de que nem todos os bits dados por uma dimensão de anel são necessários para as chaves. Tipicamente, a dimensão dos polinômios/das matrizes subjacentes y é muito maior que o comprimento de chave necessário. Por exemplo, a segunda parte pode selecionar m índices em y que têm mais probabilidade de estar em acordo. Estes coeficientes seguros podem ser aqueles que estão mais próximos aos pontos centrais das faixas de coeficientes que são mapeadas para um bit zero ou até um bit um (1); k = 0 e k = 1. Por exemplo, em um módulo de anel q, um coeficiente d pode ser mapeado para 0 se d estiver na faixa, 𝑞 𝑞 [⌊4⌋ − 𝑏, ⌈4⌉ + 𝑏] e para 1 se d estiver na faixa d estiver na faixa 3𝑞 3𝑞 [⌊ 4 ⌋ − 𝑏, ⌈ 4 ⌉ + 𝑏], ou vice-versa. Se d não estiver em nenhuma das faixas, ele não é um bit confiável. O valor b determina, em parte, a confiabilidade dos bits. Por exemplo, neste caso, ele 𝑞 pode ser escolhido como ; valores menores para b fornecem mais 8 confiabilidade, mas menos bits de chave. Neste caso, os pontos 𝑞 3𝑞 centrais podem ser e , ou um arredondamento dos mesmos. 4 4
[0035] A segunda parte, que aplica o procedimento acima, obtém índices de bits confiáveis e bits de chave que correspondem a eles. Os índices confiáveis podem ser comunicados à primeira parte, os bits de chave confiáveis não são. A primeira parte pode obter bits de chave a partir do bit nos índices indicados pela segunda parte. Como esses bits são mais confiáveis, a taxa de erro será mais baixa.
[0036] Implementações adicionais de funções de um bit confiável podem ser encontradas no artigo Hila 5, incluído na presente invenção a título de referência. Por exemplo, os algoritmos na seção 3 podem ser aplicados. Os inventores descobriram que funções de bits confiáveis podem ser aplicadas em uma variedade de situações, por exemplo com diferentes anéis subjacentes ou objetos, por exemplo polinômios ou matrizes.
[0037] Há diversos mecanismos de encapsulamento de chave e de troca de chaves diferentes, que são ilustrados com referência às figuras.
[0038] A Figura 1 mostra esquematicamente um exemplo de um protocolo de KEX, Um exemplo deste protocolo é spKEX ou Frodo.
[0039] A Figura 2 mostra esquematicamente um exemplo de um protocolo de KEM. Um exemplo deste protocolo é a versão CPA-PKE (criptografia de chave pública para ataque de texto claro escolhido, ou Chosen-Plaintext Attack-Public-Key Encryption) de Round2 ou NewHope Simple.
[0040] A Figura 3 mostra esquematicamente um exemplo de um protocolo de KEM com correção de erros.
[0041] A Figura 4 mostra esquematicamente um exemplo de uma KEX que usa a chave de KEX para encapsulamento de chave e incorpora correção de erro. Um exemplo deste protocolo é HILA5.
[0042] A notação nas figuras é a seguinte: ● a representa um segredo-mestre, por exemplo um polinômio em um dado anel (por exemplo, como em RLWE ou RLWR) ou uma matriz com elementos nos números inteiros (por exemplo, como em LWE ou LWR). ● r e s representam os segredos da primeira parte e da segunda parte. ● b e u representam as parcelas de chave “pública” da primeira parte e da segunda parte ilustrados como o produto de a*r ou a*s. Esta representação de operação significa na verdade a função unidirecional do problema subjacente. A operação (*) inicial deriva um novo objeto matemático a partir de dois objetos subjacentes, enquanto que introduz algum ruído. Por exemplo, a operação inicial pode ser de multiplicação de matriz ou polinômio; por exemplo, o ruído pode ser explicitamente introduzido pela adição de elementos de ruído,
ou implicitamente, por exemplo, pelo arredondamento. Exemplos de operações iniciais podem ser encontrados em que pode ser (R)LWE ou (R)LWR ou uma versão de módulo deles. Por exemplo, a*r pode significar Round ((A*r (mod q)), p, q), por exemplo, como em LWR. Isto significa que o produto de r é um vetor de comprimento n vezes um módulo q de A de matriz quadrada nxn. Então, o resultado é arredondado com números inteiros p e q onde p<q mediante a realização de p/q (A*r (mod q). ● c representa o texto cifrado ● h representa os dados auxiliares que incluem bits de reconciliação ● parity_bits se refere às informações utilizadas para a correção de erro ● get_reconciliation(k) é uma função que retorna os bits de reconciliação para fora da raw_key k. ● reconciliate(k,h) é uma função que reconcilia raw_key k dados os bits de reconciliação h. ● encapsulate(m,k) significa que a mensagem m é encapsulada com k. Por exemplo, se k vive em Z_q, então m pode ser representada em Z_q também. Se k vive em Z_2, então isso é equivalente a uma XOR (ou exclusivo, eXclusive OR, em inglês). O encapsulamento pode então ser feito – no âmbito do componente – como: c = k + m*(q/2) (mod q).
[0043] Por exemplo, uma função de encapsulamento pode mascarar uma mensagem m usando uma chave k de modo que um erro em k tenha um efeito limitado em m, por exemplo um efeito linear. ● decapsulate(c,k) significa que o texto cifrado c é desencapsulado de k retornando uma série de bits.
● obtain_parity_bits(k) significa que alguns bits de paridade de k são obtidos. Por exemplo, os bits de paridade podem ser gerados de acordo com um código de correção de erro. ● error_correct(k, parity_bits) significa que os parity_bits são usados para corrigir potenciais erros em k ou em parity_bits obtendo uma versão de k que tenha mais probabilidade de ser isenta de erro ● safe_bits() retorna dois valores: (i) os valores confiáveis reais e (ii) as posições dos bits de chave que podem levar a probabilidade de falha mais baixa, visto que os valores obtidos estão mais afastados dos limites de quantificação. Os valores reais retornados por Safe_bits() são posteriormente usados, por exemplo, para encapsulamento. As posições são trocadas para a outra parte para que ela saiba quais posições são necessárias.
[0044] A KEX na Figura 1 possibilita que a primeira parte e a segunda parte estejam em acordo a respeito de uma chave. Essa chave tem probabilidade de falha baixa, visto que a primeira parte e a segunda parte trocam alguns reconciliation_bits. Um problema de uma KEX (Figura 1) é que ela possibilita apenas uma única etapa de redução de erro, a saber, o uso de reconciliação de chave. Um outro problema na KEX é que as chaves são determinadas apenas por r e s. Como resultado, a KEX não consegue obter segurança ativa para mensagens a serem protegidas.
[0045] A KEM na Figura 2 possibilita que a segunda parte encapsule uma chave aleatória da sua escolha dada a chave pública b da primeira parte. Isso possibilita a obtenção de segurança ativa. Um problema de uma KEM (Figura 2) é que ela tem apenas uma única etapa para reduzir erros, geralmente variando a razão de compressão no texto cifrado c. É desejável comprimir de tal maneira que os requisitos de largura de banda sejam mais baixos, por exemplo, se os elementos a serem encapsulados estiverem em Z_q, então, os elementos podem ser movidos para Z_t (onde t>q). Entretanto, se t for muito pequeno, então a probabilidade de falha aumenta.
[0046] A KEM na Figura 3 possibilita que a segunda parte inclua parity_bits na chave que ela quer encapsular. Assim, a primeira parte pode corrigir erros que possam ocorrer. Isso reduz a probabilidade de falha. A diferença de uma KEM com correção de erro (Figura 3) é que, em comparação com uma KEX, as chaves encapsuladas estão em Z_q ou Z_t para que a KEM esteja efetivamente encapsulando a chave real determinada pela segunda parte. Entretanto, isso também significa que uma KEM sempre terá mais sobrecarga (overhead) do que uma KEX.
[0047] O protocolo na Figura 4 é uma KEX que usa a chave de KEX juntamente com a correção de erro. Uma boa propriedade desta construção é que ela possibilita a adição de um código de correção de erro que, como no protocolo na Figura 3, reduz a probabilidade de falha. Como é uma KEX, ela pode usar também a função safe_bits() que retorna os bits da chave compartilhada k* que leva a uma probabilidade de falha baixa. Um problema do protocolo na Figura 4 é que ela não possibilita segurança ativa. A razão é que a chave retornada é determinada apenas por r e s.
[0048] A Figura 4 mostra esquematicamente um exemplo de uma modalidade de um protocolo de KEM, sendo que a função de encapsular pode ser, por exemplo, c = encapsulate () = (k1 | parity_bits(k1)) XOR (k2). Um exemplo de parâmetros para uso no protocolo da Figura 4, usando a função de encapsulamento acima: - k1 tem kappa bits de comprimento, por exemplo 256 bits - Os bits de paridade têm, por exemplo 121 bits - k2 tem mu bits de comprimento, por exemplo 121 - C tem parity_bits bits de comprimento, por exemplo 121 - H tem (kappa+parity_bits)b_h bits de comprimento, por exemplo 256 + 121
[0049] A Figura 5a mostra esquematicamente um exemplo de uma modalidade de um protocolo de PKE. O protocolo de PKE da Figura 5 usa reconciliação de chave, correção de erro e safe_bits.
[0050] A Figura 5a se refere a algoritmos no Anexo A para exemplos específicos de modalidades. Note, entretanto, que os algoritmos 1, 2 e 3 descrevem uma modalidade específica, que pode ser implementada em parte, por exemplo, com o uso de primitivos semelhantes àqueles em RLWR. Entretanto, o protocolo ilustrado na Figura 5a é mais genérico visto que as operações a*s, a*r, b*s, u*r representam muitos problemas criptográficos subjacentes diferentes como LWR, MLWR, RLWR, LWE, MLWE ou RLWE.
[0051] A função de encapsular pode ser, por exemplo, c = encapsulate () = (K | parity_bits(K)) XOR (k*). Com esta escolha, poderão ser usados os seguintes parâmetros exemplificadores: - K tem kappa bits de comprimento, por exemplo 256 bits - Os bits de paridade têm, por exemplo, 121 bits
- K* tem mu=kappa+parity_bits bits de comprimento, por exemplo 256+121 - c tem mu bits de comprimento, por exemplo 256 + 121 - H tem (kappa+parity_bits)b_h bits de comprimento, por exemplo 256 + 121 - Safe_bits: n bits
[0052] No protocolo de criptografia de chave pública da Figura 5a, a primeira parte 10 pode gerar um objeto aleatório a e r, por exemplo um polinômio ou uma matriz. A chave pública correspondente compreende seu produto estrela b. O objeto a pode ser compartilhado entre as partes por outros meios, mas, em uma modalidade, tanto a como b são parte da chave pública. Para criptografar uma mensagem m para a chave pública, a segunda parte 20 pode gerar uma chave privada efêmera s e determinar a partir daí a chave pública correspondente que compreende u. Em uma PKE, a primeira parte 10 pode reutilizar sua chave pública, por exemplo a e b. Muitas partes 20 podem os mesmos a e b para criptografar mensagens para a primeira parte
10. Note que a transferência de um objeto compartilhado a pode ser feita mediante a transferência de uma semente a partir da qual a pode ser gerado, por exemplo, pseudoaleatoriamente.
[0053] Para usar um protocolo similar como uma KEM, as chaves públicas podem ser geradas aleatoriamente em ambos os lados. Tal protocolo é ilustrado na Figura 5b.
[0054] Apresenta-se um protocolo de KEM que usa uma chave de KEX k para encapsular uma chave K aleatória determinada pela segunda parte bem como parity_bits em K. Como a chave usada para encapsulamento é proveniente de uma KEX, safe_bits() podem ser aplicados para reduzir a probabilidade de falha. Como esta chave usada para encapsulamento vem de uma KEX, os dados auxiliares podem ser trocados pois precisam de requisitos de largura de banda baixa e reduz a probabilidade de falha. Como o protocolo geral encapsula, segurança ativa pode ser obtida. Como ela encapsula bits de paridade também, pode ser obtida probabilidade de falha melhor.
[0055] Este esquema tem as seguintes propriedades: - Como nos protocolos da Figura 1 ou da Figura 4, é uma KEX, para que uma grande sobrecarga do encapsulamento de uma chave em Z_t não seja necessária. - Como nos protocolos da Figura 1 ou da Figura 4, é uma KEX, para que conciliation_bits sejam anexados para executar a reconciliação de chave e reduzir a probabilidade de falha. - Como nos protocolos da Figura 3 ou da Figura 4, ela possibilita a incorporação de parity_bits para que a probabilidade de falha seja adicionalmente reduzida. - O encapsulamento é em Z_2 para que a sobrecarga por encapsulamento seja minimizada.
[0056] Por exemplo, as seguintes vantagens são obtidas em comparação com: - O protocolo na Figura 1 é que o novo protocolo possibilita segurança ativa e incorpora correção de erro para reduzir probabilidade de falha/necessidades de largura de banda. - O protocolo na Figura 2 é que o novo protocolo possibilita a seleção de safe_bits e error_correction - O protocolo na Figura 3 é que o novo protocolo possibilita a seleção de safe_bits
- O protocolo na Figura 4 é que o novo protocolo possibilita segurança ativa.
[0057] Os inventores descobriram que esta abordagem é mais eficiente do que o protocolo na Figura 3.
[0058] O protocolo da Figura 5a pode ser aplicado a mensagens m, mas também a uma chave K. Por exemplo, a chave pode ser gerada na segunda parte. Um exemplo de tal aplicação é mostrado na Figura 5b. Uma modalidade, por exemplo como na Figura 5b abaixo, pode compreender as seguintes partes: - 1: a primeira parte obtém a chave secreta r, o parâmetro público a e sua parcela de chave pública b. - 2: a primeira parte envia a e b. A primeira parte pode enviar também uma semente para obter a em vez disso. - 3: a segunda parte obtém sua chave secreta s, a segunda parte obtém aleatoriamente a chave K que a segunda parte pretende encapsular também. Então, a segunda parte obtém sua parcela de chave pública u e a chave-mestra k*. A segunda parte executa a função safe_bits em k* para obter os bits em k* que são mais adequados, em outras palavras, que levarão provavelmente a menos falhas visto que seus valores estão distantes dos limites de decisão. Em seguida, ela aplica a função get_reconciliation() para obter o material de reconciliação de chave para os safe_bits selecionados. Em seguida, a segunda parte obtém bits de paridade para a chave K gerada. Os bits de paridade são obtidos com o uso do método de correção de erro da sua escolha. Então, a segunda parte prossegue para encapsular a série de bits binária que compreende, por exemplo, que consiste, (n)a chave K e os bits de paridade com a chave K saindo de troca de chaves. Aqui, encapsulamento significa operação de XOR no âmbito de bit, visto que os elementos da chave estão em Z_2. Este é o texto cifrado c. - 4: é para enviar para a primeira parte a parcela de chave pública u, os dados auxiliares h e o texto cifrado c. A segunda parte precisa incluir também os safe_bits - 5: a primeira parte prossegue para obter K obtendo primeiramente sua chave bruta k’. Então ela reconcilia a chave, dada a chave bruta, os dados auxiliares e a localização dos safe_bits. Com estas informações, a primeira parte pode agora desencapsular e obter uma estimativa de (K|Parity_bits(K)) à qual ela aplica a função error_correct() para remover potenciais erros. A primeira parte obtém K.
[0059] Com referência à Figura 6: Nota-se que, dado este bloco de construção, é possível: - Definir uma indCPA-KEM com base no mesmo realizando a indexação (hashing) de K. Isso pode ser feito identicamente como em Round2. - Definir uma indCCA-KEM com base no mesmo aplicando-se uma transformação padrão como a transformada FO. Isto é idêntico a como feito em Round2.
[0060] A Figura 9 mostra esquematicamente um exemplo de uma geração secreta de acordo com uma modalidade.
[0061] Em alguns protocolos, é vantajoso quando os segredos, por exemplo uma ou ambas das chaves privadas são ternárias, visto que, assim, cálculos podem ser realizados mais rapidamente com apenas simples adições e subtrações como no caso de Round2. Por exemplo, os coeficientes de uma chave privada podem ser restringidos a serem -1, 0 ou 1.
[0062] Por outro lado, às vezes é vantajoso o uso de segredos que têm componentes ligeiramente maiores (não apenas -1 e 1) uma vez que nos possibilita lidar melhor com o ataque híbrido, o motivo sendo que a entropia geral é mais alta. Em uma modalidade, os segredos têm uma raiz em um visto que essa propriedade pode possibilitar um estouro de ruído mais baixo.
[0063] Será descrito a seguir um sistema e métodos para gerar segredos adequados, por exemplo a primeira e/ou a segunda chave privada. O sistema é representado na Figura 9 na qual um gerador de segredos s é configurado com vários parâmetros como o comprimento n de s, a faixa dos elementos em s e a distribuição dos elementos em s. O gerador pode incluir um gerador verdadeiramente aleatório, geralmente baseado em hardware, que é usado para obter uma semente aleatória que é usada para gerar uma sequência pseudoaleatória. Em vez de um gerador de números verdadeiramente aleatórios, um número pseudoaleatório pode ser usado.
[0064] Dados os parâmetros de entrada, o gerador obtém um conjunto P contendo os elementos de entrada que irão compreender s. Dada a sequência pseudoaleatória, o gerador obtém um outro conjunto R contendo os elementos em s que serão combinados com elementos em P.
[0065] O segredo obtido s pode ser armazenado na memória. O gerador pode ser executado na CPU de um computador. Método determinístico
[0066] O gerador pode ser configurado, por exemplo, por um usuário, com pesos {𝑤0 , 𝑤1 , … , 𝑤𝑘 } tal que 𝑤0 + 2 ∗ 𝑤1 + … + 2 ∗ 𝑤𝑘 = 1. Por exemplo, um usuário pode configurá-lo com valor n que determina o comprimento de s.
[0067] O segredo s com n componentes terá ℎ𝑖 valores +𝑖 e ℎ𝑖 valores –𝑖 onde ℎ𝑖 = 𝑓𝑙𝑜𝑜𝑟(𝑤𝑖 ∗ 𝑛) para 𝑖 = {−𝑘, … , −1, 1, … , 𝑘}.
[0068] O número de entradas diferentes de zero em s é chamado de H e é definido como 𝐻 = 2 ∗ ℎ𝑘 + … + 2 ∗ ℎ1 .
[0069] A sequência de elementos de diferentes de zero é chamada de P e compreende valores {−𝑘, … , −1, 1, … , 𝑘}.
[0070] Além disso, s terá ℎ0 valores 0, onde ℎ0 = 𝑛 – 𝐻.
[0071] Note que, em vez de 𝑓𝑙𝑜𝑜𝑟(), é possível usar 𝑐𝑒𝑖𝑙() em cujo caso 𝑤0 é, de preferência, grande o suficiente para que 𝐻 < 𝑛.
[0072] O gerador inicializa o vetor s de dimensão n a zero.
[0073] Dados os valores {ℎ0 , ℎ1 , … , ℎ𝑘 }, o gerador gera aleatoriamente uma sequência R com exatamente H números inteiros distintos entre 0 e 𝑛 − 1. O gerador atribui então os valores em P a s de acordo com os valores em R: valor – 𝑘 em 𝑃 às posições de vetor em s indexadas pelos primeiros ℎ𝑘 valores em R, valor – (𝑘 − 1) em 𝑃 é atribuído às posições de vetor em s indexadas pelos ℎ𝑘−1 valores seguintes em R, … valor – 1 em 𝑃 é atribuído às posições de vetor em s indexadas pelos ℎ1 valores seguintes em R, valor 1 em 𝑃 é atribuído às posições de vetor em s indexadas pelos ℎ1 valores seguintes em R,
valor 2 em 𝑃 é atribuído às posições de vetor em s indexadas pelos ℎ2 valores seguintes em R, … e assim por diante até os últimos ℎ𝑘 valores em R serem usados como índice em s e serem atribuídos valor k em P. Método probabilístico
[0074] O gerador pode ser configurado com pesos {𝑤0 , 𝑤1 } de modo que 𝑤0 + 2 ∗ 𝑤1 = 1. Essa distribuição pode ser generalizada a um número mais alto de pesos, como na seção anterior.
[0075] Dado um segredo de comprimento n, o gerador calcula primeiramente ℎ_1 = ⌊(𝑤_𝑖 ∗ 𝑛⌋ e determina uma sequência P com ℎ1 valores “+1” e ℎ1 valores “ − 1”. Os valores +/− 1 podem ser generalizados também para outros valores, por exemplo +/− 𝑘 com k, um número inteiro positivo.
[0076] O gerador inicializa o vetor s de dimensão n a zero.
[0077] Dados P, o gerador gera aleatoriamente um conjunto R com 2 ∗ ℎ1 valores aleatórios entre 0 e 𝑛 − 1. O gerador então toma sequencialmente o elemento i em R e o elemento j em P e atribui 𝑠[𝑖] = 𝑠[𝑖] + 𝑗.
[0078] O vetor s é atualizado de acordo com o seguinte pseudocódigo. Tabela 1 - Pseudocódigo para o segundo método seed = obtain_true_random_seed() R = generate_2_h1_pseudo_random_values(seed); s = 0; // primeira parte no conjunto P Para i = 0 a h1-1 {s[R[i]] = s[R[i]] + 1;
} // segunda parte no conjunto P Para i = 0 a h1-1 { s[R[i+h1]] = s[R[i+h1]] - 1;} Método determinístico levando a uma distribuição binomial Nesta terceira modalidade:
[0079] Calcular 𝑘/2 vetores 𝑣0 , … , 𝑣𝑘−1 cada 2 comprimento n com coeficientes em {0,1}, cada vetor com exatamente 𝑝 ∗ 𝑛 = 𝑤1 elementos diferentes de zero, onde p é a probabilidade de um coeficiente ser 1. Para isso, um pode selecionar aleatoriamente 𝑤1 valores distintos em [0,n-1] que será atribuído o valor 1.
[0080] Calcular k/2 vetores de comprimento n 𝑣𝑘/2 , . . . , 𝑣𝑘−1 com coeficientes em {0,1}, cada vetor com exatamente 𝑝 ∗ 𝑛 = 𝑤1 elementos diferentes de zero, onde p é a probabilidade de um coeficiente ser 1. Para isso, um pode selecionar aleatoriamente 𝑤1 valores distintos em [0,n-1] que será atribuído o valor 1.
[0081] Calcular o vetor de segredo s, com n coeficientes, onde o 𝑖é𝑠𝑖𝑚𝑜 coeficiente é calculado como: 𝑠[𝑖] = 𝑣0 [𝑖] − 𝑣𝑘 [𝑖] + 2 𝑣1 [𝑖] − 𝑣𝑘 [𝑖] + +1 2 … 𝑣𝑘 [𝑖] − 𝑣𝑘−1 [𝑖] −1 2
[0082] Isso segue uma distribuição que é binomial e centrada em torno de 0. É binomial visto que os coeficientes de 𝑣𝑙[𝑖] com 𝑙 = 0, … , 𝑘 − 1 têm uma probabilidade p de ser 1. Nesta modalidade, os valores 1 em vetores 𝑣𝑙 correspondem ao conjunto P e os valores entre 0 e 𝑛 − 1 que são atribuídos valor 1 correspondem ao conjunto R. O segredo resultante tem um zero em um, visto que o número de 1s em cada vetor 𝒗𝒍 é idêntico e são adicionados 𝑘/2 vetores e são subtraídos 𝑘/2 vetores.
[0083] Note que no método probabilístico (c), os números inteiros em R não precisam ser distintos para que seja mais fácil gerá-los. Note também que os elementos em R não precisam ser calculados previamente, mas eles podem ser calculados dinamicamente. Se os números inteiros em 𝑅 são distintos, os métodos determinísticos e probabilísticos produzem o mesmo segredo s. Note também que a definição de uma sequência de valores em P (os valores que são alocados para o segredo) não precisa ser explicitamente feita, mas ela pode ser mantida implícita no código conforme é ilustrado na Tabela 1.
[0084] Em modalidades, as duas partes geram duas chaves brutas, por exemplo polinômios ou matrizes que são aproximadamente, mas não exatamente, iguais. Para chegar ao acordo exato, alguns dados de reconciliação são enviados. Um esquema para fazer isso é explicado em um pedido de patente do mesmo requerente, com o título “REACHING AGREEMENT ON A SECRET VALUE”, depositado no EPO (“EPO” - European Patent Office) em 4 de novembro de 2016, com o número de pedido 16197277.3; por exemplo, o método nas páginas 7 a 10 pode ser usado para reconciliação em modalidades. Variantes reveladas em outro lugar no pedido de patente citado também podem ser adotadas.
[0085] Neste pedido, será usada a seguinte notação para as seguintes três funções:
1. Função de arredondamento ⌊. ⌉𝑩,𝒃𝒉 : Para 𝑞, 𝑏ℎ , 𝐵 ∈ 𝑍, 𝑏ℎ ≥ 1, 𝐵 < 𝑙𝑜𝑔2 𝑞 − 𝑏ℎ , considerando-se 𝐵̅ = 𝑙𝑜𝑔2 𝑞 − 𝐵. Então, ⌊. ⌉𝐵,𝑏ℎ : 𝑣 → ⌊2−𝐵̅ . 𝑣⌉ (𝑚𝑜𝑑 2𝐵 )
[0086] Intuitivamente, ⌊𝑣⌉𝐵,𝑏ℎ extrai os bits mais significantes B de {𝑣 + 2𝑙𝑜𝑔 𝑞−(𝐵+𝑏ℎ ) }, onde o segundo componente é um fator de arredondamento para assegurar erros de arredondamento imparciais. B indica o número de bits que são extraídos de um símbolo v e 𝑏ℎ indica o número de bits de dados auxiliares. Em uma modalidade, q pode ser uma potência de 2.
2. Função de arredondamento cruzado ⟨. ⟩𝑩,𝒃𝒉 : Para 𝑞, 𝑏ℎ , 𝐵 ∈ 𝑍, 𝑏ℎ > 1, 𝐵 < 𝑙𝑜𝑔2 𝑞 − 𝑏ℎ , considerando-se 𝐵̅ = 𝑙𝑜𝑔2 𝑞 − 𝐵. Então, ⟨. ⟩𝐵,𝑏ℎ : 𝑣 → ⌊2−𝐵̅+𝑏ℎ . 𝑣⌉ (𝑚𝑜𝑑 2𝑏ℎ )
[0087] Intuitivamente, ⟨𝑣⟩𝐵,𝑏ℎ extrai os 𝑏ℎ bits menos significativos dos (𝐵 + 𝑏ℎ ) bits mais significativos de v.
3. Função de reconciliação 𝒓𝒆𝒄(𝒘, 𝒃): Para 𝑞, 𝑏ℎ , 𝐵 ∈ 𝑍, 𝑏ℎ ≥ 1, 𝐵 < 𝑙𝑜𝑔2 𝑞 − 𝑏ℎ , 𝑤 ∈ 𝑍𝑞 , 𝑏 ∈ [0,2𝑏ℎ ), 𝑟𝑒𝑐(𝑤, 𝑏) = ⌊𝑣⌉𝐵,𝑏ℎ sendo que v é o elemento mais próximo de w de modo que ⟨𝑣⟩𝐵,𝑏ℎ = 𝑏. O elemento mais próximo de w pode ser tomado de acordo com a distância de Lee, por exemplo 𝑚𝑖𝑛(|𝑣 − 𝑤|, 𝑞 − |𝑣 − 𝑤|).
[0088] Estas três funções podem ser aplicadas no âmbito do coeficiente a polinômios ou matrizes. A função de reconciliação citada acima é usada como um exemplo na presente invenção. Conforme notado, os métodos de reconciliação no pedido citado acima também podem ser usados. A função de arredondamento cruzado pode ser aplicada para obter os dados de reconciliação e a função de arredondamento para obter os dados que são reconciliados, por exemplo os bits confiáveis. Quando os dados de reconciliação são posteriormente usados na função de reconciliação, os dados reconciliados são recuperados. Em outras palavras: 𝑟𝑒𝑐(𝑤, ⟨𝒗⟩) = ⌊𝑣⌉, pressupondo que v e w estejam dentro de uma distância limite entre si.
[0089] Em uma modalidade, a primeira e a segunda chaves públicas, a primeira e a segunda chaves privadas e a chave bruta são múltiplos polinômios sobre um campo finito ou anel, sendo uma chave pública obtida a partir de uma chave privada por uma multiplicação ruidosa com múltiplos polinômios compartilhados (a). Por exemplo, múltiplos polinômios podem ser usados em malhas de módulo em que os elementos da malha são polinômios.
[0090] A Figura 7a mostra esquematicamente um exemplo de uma modalidade de um dispositivo de primeira parte
100. A Figura 7b mostra esquematicamente um exemplo de uma modalidade de um dispositivo de segunda parte 200. A Figura 7c mostra esquematicamente um exemplo de uma modalidade de um sistema criptográfico 101 que compreende um primeiro dispositivo 100 e um segundo dispositivo 200. O primeiro dispositivo 100 e o segundo dispositivo 200 podem compreender um ou mais dentre uma interface de armazenamento 192, 292, um processador 194, 294 e uma memória 196, 296, respectivamente.
[0091] O primeiro dispositivo 100 e o segundo dispositivo 200, por exemplo, os vários dispositivos do sistema 101 podem se comunicar uns com os outros por uma rede de computadores 191. A rede de computadores pode ser uma internet, uma intranet, uma LAN, uma WLAN etc. A rede de computadores 191 pode ser a Internet. A rede de computadores pode ser total ou parcialmente com fio e/ou total ou parcialmente sem fio. Por exemplo, a rede de computadores pode compreender conexões Ethernet. Por exemplo, a rede de computadores pode compreender conexões sem fio, como Wi-Fi, ZigBee e similares. Os dispositivos compreendem uma interface de conexão que está disposta para se comunicar com outros dispositivos do sistema 101 conforme necessário. Por exemplo, a interface de ligação pode compreender um conector, por exemplo um conector com fio, por exemplo um conector Ethernet ou um conector sem fio, por exemplo uma antena, por exemplo uma antena Wi-Fi, 4G ou 5G. Por exemplo, o primeiro dispositivo 100 e o segundo dispositivo 200 podem compreender uma interface de comunicação 130, 230, respectivamente. A rede de computador 191 pode compreender elementos adicionais, por exemplo um roteador, um hub, etc.
[0092] A execução do primeiro dispositivo 100 e do segundo dispositivo 200 pode ser implementada em um processador, por exemplo um circuito processador, cujos exemplos são mostrados aqui. O primeiro dispositivo 100, em particular o processador do primeiro dispositivo 100, pode implementar as funções da primeira parte 10. O segundo dispositivo 200, em particular o processador do segundo dispositivo 200, pode implementar as funções da segunda parte
20. Por exemplo, estas funções podem ser total ou parcialmente implementadas em instruções de computador que são armazenadas no dispositivo 100, ou no 200, por exemplo em uma memória eletrônica do dispositivo, e são executáveis por um microprocessador do dispositivo. Em modalidades híbridas, unidades funcionais são implementadas parcialmente em hardwares, por exemplo, como coprocessadores, por exemplo,
coprocessadores de criptografia, e parcialmente em softwares armazenados e executados no dispositivo 100, ou no 200.
[0093] Os dispositivos 100 e 200 podem compreender uma interface de armazenamento para armazenar e/ou recuperar mensagens, possivelmente mensagens criptografadas. Por exemplo, a interface de armazenamento pode ser localmente implementada, por exemplo, como uma interface para uma memória compreendida no dispositivo, por exemplo a memória 196 ou 296, respectivamente. A interface de armazenamento pode fazer interface também com armazenamento offline, por exemplo não local, por exemplo armazenamento em nuvem, por exemplo um armazenamento como uma memória ou uma unidade situada em um outro dispositivo. Se o armazenamento em nuvem for usado, os dispositivos podem compreender um armazenamento local, bem como, por exemplo, uma memória. Por exemplo, a memória pode ser usada para armazenar as instruções de programação de computador, o armazenamento temporário de arquivos e similares.
[0094] Nas várias modalidades dos dispositivos 100 e 200, a interface de comunicação pode ser selecionada dentre várias alternativas. Por exemplo, a interface pode ser uma interface de rede para uma rede local ou remota, por exemplo a Internet, uma interface de armazenamento para um armazenamento de dados internos ou externos, uma interface de aplicativo (API), etc.
[0095] Os dispositivos 100 e 200 podem ter uma interface de usuário, que pode incluir elementos bem conhecidos como um ou mais botões, um teclado, um dispositivo de exibição, uma tela sensível ao toque, etc. A interface de usuário pode ser disposta para acomodar a interação com o usuário para iniciar um protocolo de concordância de chaves, responder a um protocolo de concordância de chaves, enviar uma mensagem criptografada com uma chave pública, descriptografar uma mensagem com uma chave pública, etc.
[0096] O armazenamento pode ser implementado como uma memória eletrônica, por exemplo uma memória flash ou memória magnética, por exemplo disco rígido ou similares. O armazenamento pode compreender múltiplas memórias distintas que juntas compõem o armazenamento. O armazenamento pode ser também uma memória temporária, por exemplo uma memória RAM.
[0097] Tipicamente, os dispositivos 100 e 200 compreendem, cada um, um microprocessador que executa o software adequado armazenado nos dispositivos 100 e 200; por exemplo, esse software pode ter sido baixado e/ou armazenado em uma memória correspondente, por exemplo uma memória volátil, como RAM, ou uma memória não volátil, como Flash. Alternativamente, os dispositivos 100 e 200 podem ser total ou parcialmente implementados em lógica programável, por exemplo, como arranjo de portas programáveis em campo (FPGA - “field-programmable gate array”). Os dispositivos 100 e 200 podem ser implementados, total ou parcialmente, como um “circuito integrado para aplicação específica” (ASIC - “application-specific integrated circuit”), isto é, um circuito integrado (CI) personalizado para seu uso específico. Por exemplo, os circuitos podem ser implementados em CMOS, por exemplo, com o uso de uma linguagem de descrição de hardware como Verilog, VHDL etc.
[0098] Em uma modalidade, os dispositivos 100 e 200 podem compreender um ou mais circuitos para implementar uma ou mais ou todas as funções do respectivo dispositivo. Os circuitos podem implementar as funções correspondentes descritas no presente documento. Os circuitos podem ser um circuito processador e circuito de armazenamento, sendo que o circuito processador executa instruções representadas eletronicamente nos circuitos de armazenamento.
[0099] Um circuito processador pode ser implementado de maneira distribuída, por exemplo, como múltiplos circuitos subprocessadores. Um armazenamento pode ser distribuído em múltiplos subarmazenamentos distribuídos. Toda a memória ou parte da memória pode ser uma memória eletrônica, memória magnética, etc. Por exemplo, o armazenamento pode ter uma parte volátil e uma parte não volátil. Parte do armazenamento pode ser apenas de leitura.
[00100] Os circuitos podem também ser FPGA, ASIC ou similares.
[00101] A Figura 10 mostra esquematicamente um exemplo de um sistema criptográfico 301 de acordo com uma modalidade. O sistema 301 compreende um primeiro dispositivo criptográfico 300, um segundo dispositivo criptográfico 350 e opcionalmente um depósito de chave pública 302. Por exemplo, o primeiro dispositivo 300 e segundo dispositivo 350 em um dispositivo como o primeiro dispositivo 100 e/ou o segundo dispositivo 200.
[00102] O primeiro e o segundo dispositivos 300 e 350 são configurados para executar um protocolo criptográfico. Eles têm a capacidade de passar dados com segurança de um dispositivo para outro. Vários protocolos criptográficos podem usar essa mesma capacidade. Como exemplo, são descritos dois protocolos que usam essa capacidade.
[00103] Por exemplo, o primeiro e o segundo dispositivos podem ser configurados para um protocolo de concordância de chaves projetado, por exemplo, para gerar uma chave, tipicamente uma chave simétrica, que é compartilhada entre os dois dispositivos. A chave compartilhada pode então ser usada pelos dispositivos para comunicação protegida, por exemplo comunicação criptografada e/ou autenticada, por exemplo, com o uso da chave para criptografia de mensagens e/ou para calcular uma etiqueta de autenticação para uma mensagem. O protocolo pode ser um protocolo de criptografia de chave pública, por exemplo, projetado para possibilitar que outros dispositivos, por exemplo o segundo dispositivo 350, criptografem uma mensagem (m) de modo que um dispositivo específico, por exemplo o primeiro dispositivo 300 possa descriptografá-la. Entretanto, o conteúdo da mensagem criptografada de chave pública não pode ser obtido por outros dispositivos além do dispositivo que criptografa e descriptografa, por exemplo o segundo dispositivo 350 e o primeiro dispositivo 300. Em caso de criptografia de chave pública, a mesma chave pública do primeiro dispositivo, por exemplo a mesma primeira chave pública e mesmo objeto público, pode ser usada por múltiplos segundos dispositivos para enviar mensagens criptografadas ao primeiro dispositivo público. Mesmo que dois segundos dispositivos usem a mesma chave pública para criptografar uma mensagem, eles não podem descriptografar a comunicação do outro.
[00104] O primeiro dispositivo 300 e o segundo dispositivo 350 compreendem uma interface de comunicação 305 e 355, respectivamente. As interfaces de comunicação são configuradas para se comunicarem uma com a outra. Exemplos, de interfaces de comunicação, por exemplo sobre redes com fio ou sem fio, são descritos na presente invenção.
[00105] O primeiro dispositivo 300 compreende um gerador de chave pública/privada 315 configurado para gerar uma primeira chave privada (r) e uma primeira chave pública (b) derivada da primeira chave privada. A derivação da chave pública a partir da chave privada pode usar um objeto público (a). Por exemplo, a geração da chave pública pode envolver multiplicação com o objeto público, e/ou a introdução de algum tipo de ruído, por exemplo ao reduzir o resultado da multiplicação, adicionando um termo de ruído, etc. A chave privada e o objeto público podem ser um polinômio ou uma matriz, por exemplo, sobre um anel ou campo finito.
[00106] A primeira chave privada e pública pode ser efemeramente gerada. Por exemplo, esta última ação pode ser executada por um protocolo de concordância de chaves, especialmente se o primeiro e o segundo dispositivos usarem algum outro mecanismo de autenticação, por exemplo um mecanismo fora da banda, por exemplo autenticação baseada em certificado ou similares, para autenticar um ao outro. A primeira chave privada e pública pode ser gerada também para uso mais longo. Por exemplo, a primeira chave pública pode ser armazenada em um depósito de chave pública 302 externo. O depósito de chave pública 302 pode armazenar também o objeto público (a) ou semente para o mesmo.
[00107] A primeira chave pública é transferida do primeiro dispositivo 300 para o segundo dispositivo 350, por exemplo através das interfaces de comunicação 305 e 355. Isso pode ser feito por comunicação direta, ou indireta, por exemplo através do depósito de chave pública 302. Em conjunto com a primeira chave pública, o objeto público (a) pode ser transferido também, se necessário. Por exemplo, o objeto público pode ser transferido mediante o envio de uma semente a partir da qual o objeto público (a) pode ser gerado.
[00108] O segundo dispositivo 350 pode compreender um meio de obtenção de chave pública 360, por exemplo, configurado para recuperar a primeira chave pública do depósito de chave pública 302. Por exemplo, esse tipo de obtenção é adequado para criptografia de chave pública. Entretanto, a chave pública pode ser diretamente obtida também a partir do primeiro dispositivo, possivelmente fora do limite, por exemplo em um e-mail. A chave pública pode ser armazenada até ser necessária para uma troca de criptografia de chave pública. Entretanto, a primeira chave pública pode ser recebida também para uso imediato, por exemplo para uma operação de compartilhamento de chave, por exemplo, neste caso, a primeira chave pública e/ou o objeto público pode(m) ser efemeramente gerada(o)(s).
[00109] O segundo dispositivo 350 pode compreender um gerador de chave pública/privada 365 configurado para gerar uma segunda chave privada (s) e para gerar uma segunda chave pública (u) a partir da segunda chave privada (s). A segunda chave pública usa o mesmo objeto público que a geração da primeira chave pública. A primeira e a segunda chaves privadas são privadas para seus respectivos dispositivos. Elas podem ser compartilhadas com partes confiáveis, se necessário, por exemplo para cópia de segurança, caução de chaves, etc. As chaves públicas e o objeto público não são necessariamente secretos por segurança; não obstante, um ou mais deles pode ainda ser privado para o primeiro e o segundo dispositivo, se for desejado. Por exemplo, a primeira chave pública só pode ser compartilhada com o segundo dispositivo, e vice-versa.
[00110] O segundo dispositivo 350 compreende um gerador de palavra de código 370. O gerador de palavra de código 370 é configurado para gerar uma palavra de código de acordo com um código de correção de erro. O código de correção de erro pode ser um código linear ou um código não linear. Por exemplo, o código de correção de erro pode ser um código BCH (Bose- Chaudhuri-Hocquenghem), um código Reed-Solomon, código Hadamard e similares. Os códigos múltiplos podem ser concatenados. Códigos concatenados são códigos de correção de erro que são construídos a partir de dois ou mais códigos mais simples a fim de obter bom desempenho com complexidade razoável. Por exemplo, um código Hadamard pode ser concatenado com um código BCH.
[00111] Os dados para encapsulamento são codificados na palavra de código. Por exemplo, a palavra de código pode ser particionada em uma parte de dados, por exemplo bits de dados, e uma parte de paridade, por exemplo bits de paridade. Por exemplo, os dados para encapsulamento podem estar compreendidos nos bits de dados. Uma maneira de gerar uma palavra de código é gerar uma parte de dados e calcular bits de paridade a partir da parte de dados. Por exemplo, um vetor de dados com bits de dados pode ser multiplicado por uma matriz de paridade para obter os bits de paridade, ou mesmo toda a palavra de código. A palavra de código pode ser obtida mediante a combinação dos dados para encapsulamento com os bits de paridade. Por exemplo, a parte de dados e a parte de paridade podem ser concatenadas, embora qualquer permutação de bits de dados e bits de paridade possa ser usada para produzir uma palavra de código válida de acordo com um código de correção de erro correspondente. Por exemplo, bits de dados e bits de paridade podem ser alternados. Note que dados de reconciliação são tipicamente calculados sobre símbolos q-ary únicos, mas dados de paridade são tipicamente calculados a partir de múltiplos bits; note que q é muito maior do que 2.
[00112] A palavra de código pode ser usada de várias maneiras. Por exemplo, uma mensagem a ser liberada do segundo dispositivo 350 para o primeiro dispositivo 300 pode ser codificada na parte de dados da palavra de código como os dados a serem encapsulados. Este modo de codificação é, por exemplo, adequado para criptografia de chave pública. A criptografia de chave pública pode ser obtida também com a criptografia da mensagem (m) no segundo dispositivo 350, por exemplo por uma chave simétrica, por exemplo aleatoriamente gerada para este propósito, e codificação da chave simétrica que realiza criptografia na palavra de código. Uma etapa de derivação de chave adicional pode ser usada. Por exemplo, uma pré-chave aleatória pode ser codificada na palavra de código e a chave que realiza criptografia pode ser derivada da pré- chave. Por exemplo, a derivação pode usar uma função de derivação de chave (KDF, key derivation function), por exemplo uma função hash. Por exemplo, no último caso, a mensagem criptografada pode ser enviada a partir do segundo dispositivo para o primeiro dispositivo juntamente com os dados necessários para descriptografar os dados, por exemplo a segunda chave pública, e outros dados, conforme descrito abaixo.
[00113] Curiosamente, a palavra de código é gerada independente da primeira chave privada, primeira chave pública, segunda chave privada e segunda chave pública. Devido a isso, o protocolo tem resistência aumentada contra ataques ativos. Um invasor tem menos possibilidades de influenciar a chave compartilhada visto que ele não pode influenciar a chave através da escolha da primeira e da segunda chaves privadas.
[00114] A geração independente pode ser obtida, por exemplo no caso de uma mensagem, se a mensagem for gerada a partir de um aplicativo que é independente da criptografia de chave pública, por exemplo um aplicativo financeiro ou de comunicação, etc. A geração independente pode ser obtida, por exemplo, por geração aleatória. Por exemplo, a chave ou pré- chave na palavra de código pode ser gerada independentemente, por exemplo usando um gerador de números verdadeiramente aleatórios, ou usando um gerador pseudoaleatório que usa uma semente que é independente da primeira e da segunda chave privada, por exemplo, que é ela mesma aleatoriamente gerada, ou predeterminada ou similares. Por exemplo, a palavra de código pode ser gerada no segundo dispositivo mesmo antes de a primeira chave pública ser recebida e/ou antes de a segunda chave privada ser gerada; isso assegura também a independência.
[00115] O segundo dispositivo 350 compreende uma unidade de Diffie-Hellman 375. A unidade de Diffie-Hellman 375 é configurada para gerar uma segunda chave compartilhada bruta (k*) a partir da primeira chave pública (b) e da segunda chave privada (s). Por exemplo, a unidade de Diffie-Hellman 375 pode ser configurada para aplicar uma função de Diffie-Hellman à primeira chave pública e à segunda chave privada. Por exemplo, a função de Diffie-Hellman pode ser multiplicação ou exponenciação, dependendo do mecanismo subjacente. O segundo dispositivo 350 é configurado para transferir sua segunda chave pública para o primeiro dispositivo 300. O primeiro dispositivo 300 compreende uma unidade de Diffie-Hellman 325. A unidade de Diffie-Hellman 325 é configurada para gerar uma primeira chave compartilhada bruta (k’) a partir da segunda chave pública (u) e da primeira chave privada (r), por exemplo, aplicando a mesma função de Diffie-Hellman. Infelizmente, para alguns tipos de funções de Diffie-Hellman, pode acontecer que a primeira e a segunda chaves brutas sejam próximas uma da outra, embora não necessariamente idênticas. A probabilidade específica de isso acontecer depende da função de Diffie-Hellman subjacente. Alguma probabilidade de diferentes chaves brutas pode ser aceita na maioria dos aplicativos, entretanto, o quão alta esta probabilidade pode ser, dependerá do aplicativo. No entanto, tipicamente, uma probabilidade mais baixa será preferencial. A chave bruta pode ser do mesmo tipo matemático, por exemplo polinômio ou matriz, que as chaves privadas e públicas.
[00116] O segundo dispositivo 350 compreende um gerador de bits confiáveis 380 e um gerador de dados de reconciliação 385. O gerador de bits confiáveis 380 é configurado para aplicar uma função de bits confiáveis à segunda chave compartilhada bruta (k*) para obter índices confiáveis e bits confiáveis derivados dos coeficientes indicados. Os índices confiáveis indicam os coeficientes da chave compartilhada bruta. Por exemplo, o gerador de bits confiáveis 380 pode determinar quais coeficientes na chave bruta estão perto de uma margem de amostragem e quais não estão. Por exemplo, os coeficientes na chave bruta que estão dentro de um limite de uma margem de amostragem podem ser descartados como não confiáveis. O coeficiente confiável restante pode ser indicado pelos índices confiáveis. Os bits confiáveis podem ser obtidos por amostragem dos coeficientes confiáveis.
[00117] No caso de não restarem coeficientes suficientes, existem várias possibilidades, por exemplo encerrar o protocolo, reiniciar o protocolo com uma nova primeira e/ou segunda chave privada, e/ou um novo objeto público, derivar uma chave mais curta ou descartar menos coeficientes. Em vez de selecionar todos os coeficientes dentro de um limite, é possível selecionar também um número de coeficientes predeterminado, por exemplo mu coeficientes, e selecionar os coeficientes mais confiáveis, por exemplo os primeiros mu coeficientes mais confiáveis.
[00118] Uma maneira de implementar bits confiáveis é tomar um ou mais, por exemplo B, bits mais significativos de um coeficiente. Por exemplo, o número de bits confiáveis por coeficientes selecionados pode ser, por exemplo, 1 ou 2. Em algumas modalidades, por exemplo, quando polinômios ou matrizes grandes são usados(as), o número de coeficientes é grande, o que possibilita uma alta confiabilidade, por exemplo um valor baixo para B. Para outras modalidades, por exemplo para dispositivos de IoT (Internet das coisas, ou Internet of Things), valores maiores para B podem ser usados. Os cálculos em um anel finito podem ser feitos no anel finito do módulo de números inteiros uma potência de 2. A última escolha tem a vantagem de uma distribuição mais uniforme nos bits confiáveis.
[00119] O gerador de dados de reconciliação 385 é configurado para gerar dados de reconciliação (h) para os coeficientes indicados da chave compartilhada bruta. Os dados de reconciliação compreendem informações que possibilitam a redução das diferenças entre a primeira e a segunda chave bruta derivadas no primeiro e no segundo dispositivo. Por exemplo, a aplicação de dados de reconciliação pode fazer com que a diferença, por exemplo a distância de Lee, entre um coeficiente das chaves brutas no primeiro e no segundo dispositivo seja reduzida, aumentando assim a probabilidade de que ambos irão produzir o mesmo bit confiável. Tanto os bits de paridade na palavra de código quanto o servidor de dados de reconciliação reduzem o ruído, entretanto, os bits de paridade são calculados em relação a múltiplos bits de dados, enquanto que os dados de reconciliação são calculados em relação a coeficientes em uma chave compartilhada bruta. Os dados de reconciliação aumentam ainda mais a confiabilidade dos bits confiáveis.
[00120] Uma maneira de implementar dados de reconciliação é tomar um ou mais, por exemplo 𝑏ℎ , bits de um coeficiente que seguem os bits tomados como bits confiáveis. Por exemplo, estes podem ser os bits 𝑏ℎ que seguem os bits B em significância. Por exemplo, o número de bits de reconciliação por coeficientes selecionados pode ser, por exemplo, 1 ou 2. Um número menor de bits de reconciliação tem a vantagem de reduzir a sobrecarga de comunicação. Embora uma quantidade maior de bits de reconciliação seja possível.
[00121] O segundo dispositivo 350 pode compreender um encapsulador 390. O encapsulador 390 é configurado para encapsular a palavra de código com os bits confiáveis mediante a aplicação de uma função de encapsulamento, por exemplo, uma XOR. O encapsulamento pode ser um encapsulamento de bloco único. Em uma modalidade, a função de encapsulamento obtém segurança perfeita, no sentido de que as informações sobre a palavra de código que podem ser obtidas a partir da palavra de código encapsulada são zero sem conhecer os bits confiáveis. Por exemplo, uma função XOR pode ser usada, em uma das outras funções de encapsulamento aqui descritas.
[00122] Note que o encapsulamento se aplica a toda a palavra de código, incluindo bits de dados e bits de paridade, e não apenas a bits de paridade. Além disso, o encapsulamento é aplicado a dados gerados, por exemplo uma mensagem, uma chave, uma pré-chave, etc. não para dados derivados de uma ou mais dentre a primeira ou a segunda chaves públicas ou privadas.
[00123] O segundo dispositivo é configurado para transferir a segunda chave pública (u), os dados de reconciliação (h), os dados encapsulados (c) e os índices confiáveis para o primeiro dispositivo. A transferência pode ser em resposta à recepção da primeira chave pública, por exemplo no caso de acordo de chaves, ou não, por exemplo no caso de criptografia de chave pública.
[00124] O primeiro dispositivo 300 é configurado para receber do segundo dispositivo uma segunda chave pública (u), dados de reconciliação (h) e dados encapsulados (c) e índices confiáveis. O primeiro dispositivo 300 compreende uma unidade de reconciliação 335 configurada para aplicar os dados de reconciliação (h) em uma função de reconciliação para os coeficientes na primeira chave compartilhada bruta (k’) indicada pelos índices confiáveis (safe_bits), obtendo bits confiáveis (k). Por exemplo, um coeficiente indicado como confiável pode ser reconciliado com o uso dos bits de reconciliação e então amostrado para obter um bit confiável.
[00125] O primeiro dispositivo 300 compreende uma unidade de desencapsulamento 340 configurada para desencapsular os dados encapsulados (c) obtendo uma palavra próxima ao código com o uso dos bits confiáveis. A razão pela qual a palavra de código do segundo dispositivo pode não ser diretamente obtida é que, mesmo com bits confiáveis e reconciliação, ainda podem existir diferenças entre as chaves brutas que não estão resolvidas. O primeiro dispositivo 300 compreende um corretor de erros 320 que é configurado para aplicar uma função de correção de erro à palavra próxima ao código obtendo uma palavra de código.
[00126] Por último, a palavra de código pode ser decodificada, por exemplo, para obter a parte de dados e assim obter a mensagem (m), a chave (K) ou pré-chave. No primeiro caso, alguma ação pode ser tomada com base na mensagem, por exemplo a mensagem pode ser exibida, por exemplo, em um aplicativo de comunicador. No segundo caso, a chave pode ser usada para comunicações adicionalmente protegidas, etc. No terceiro caso, uma função de derivação de chave pode ser aplicada à pré-chave para obter uma chave compartilhada.
[00127] Abaixo, um pequeno, porém ilustrativo, exemplo é dado para confiabilidade e reconciliação. Será tomado 𝑞 = 25 = 32 e 𝐵 = 𝑏ℎ = 1. Serão escritos coeficientes como uma sequência de cinco bits, com o bit mais significativo à esquerda. Por exemplo, em uma modalidade, o segundo dispositivo pode descartar os coeficientes 00000, 00001, 01110, 01111, 10000, 10001, 11110 e 11111, uma vez que apenas uma pequena adição ou subtração a tais coeficientes fará com que eles invertam o bit mais significativo.
[00128] Os coeficientes que não seriam descartados são 00010, 00011, …, 01101 e 10010, 10011, …, 11101. Os coeficientes na primeira lista dariam um bit confiável de 0 e os coeficientes na última lista dariam um bit confiável de
1. O segundo bit dessas sequências pode ser tomado como os dados de reconciliação. Os dados de reconciliação de coeficientes selecionados são transferidos para o outro dispositivo, mas os bits confiáveis não são.
[00129] Após o primeiro dispositivo calcular sua chave bruta, ele seleciona coeficientes de acordo com os coeficientes indicados pelo primeiro dispositivo. Suponha, por exemplo, que um coeficiente na chave bruta do primeiro dispositivo seja 01101 e que os dados de reconciliação para esse coeficiente seja 0. Como o segundo bit do coeficiente no primeiro dispositivo não é 0, isso indica ao primeiro dispositivo que foi cometido um erro. O valor mais próximo ao coeficiente selecionado 01101 com um segundo bit de 0, e que não teria sido descartado, é 10010. Note que 00111 também tem um segundo bit de 0, mas é mais distante do coeficiente selecionado 01101. O primeiro dispositivo irá, dessa forma, selecionar um 1 como bit confiável para este coeficiente selecionado.
[00130] Note que se o ruído foi grande, esta correção pode estar errada; é concebível que o segundo dispositivo tivesse o coeficiente 00111. Nesse caso, um bit confiável errado é selecionado. Curiosamente, mesmo com quantidades moderadas de dados de reconciliação, estes tipos de erros são raros. Isto significa que em vez de aumentar a quantidade de dados de reconciliação, é mais eficiente confiar em códigos de correção de erro para corrigir o número restante de erros. Minimizar a distância de Lee pode ser simplesmente feito experimentando coeficientes modificados candidatos em distância de Lee crescente até que uma correspondência seja encontrada. Algoritmos mais avançados são possíveis também, por exemplo um descrito na técnica.
[00131] Existe uma interessante sinergia entre confiabilidade e reconciliação. Pode acontecer que o coeficiente modificado mais próximo com os dados de reconciliação corretos teria sido descartado pelo segundo dispositivo criptográfico. O coeficiente modificado mais próximo com os dados de reconciliação corretos e a restrição adicional de que eles não teriam sido descartados pelo segundo dispositivo criptográfico pode ter um bit confiável diferente. Levar isso em consideração aumenta ainda mais a eficácia dos bits de reconciliação. Por exemplo, continuando o exemplo acima, considere que o segundo dispositivo obtém o coeficiente 01100, com dados de reconciliação 0. O coeficiente modificado mais próximo seria 10000, mas o coeficiente mais próximo que não teria sido descartado é 00111. Consequentemente, o primeiro dispositivo recupera o bit confiável 0 ao invés de 1.
[00132] A Figura 11a mostra esquematicamente um exemplo de um método criptográfico 400 de acordo com uma modalidade. O método 400 é disposto para compartilhar uma palavra de código. O método 400 compreende - comunicar-se (410) com um primeiro dispositivo criptográfico (10), - receber (420) uma primeira chave pública (b) do primeiro dispositivo criptográfico, - gerar (430) uma segunda chave privada (s) e gerar uma segunda chave pública (u) a partir da segunda chave privada (s), - gerar (440) uma palavra de código (K||parity) de acordo com um código de correção de erro, e,
- gerar (450) uma segunda chave compartilhada bruta (k*) (450) a partir da primeira chave pública (b) e da segunda chave privada (s), - aplicar (460) uma função de bits confiáveis (shared_bits) à segunda chave compartilhada bruta (k*) obtendo índices confiáveis, indicando coeficientes da chave compartilhada bruta e bits confiáveis derivados dos coeficientes indicados, - gerar (470) dados de reconciliação (h) para os coeficientes indicados da chave compartilhada bruta, sendo que os dados de reconciliação compreendem informações que possibilitam a redução das diferenças entre a primeira e a segunda chave bruta derivadas no primeiro e no segundo dispositivo, - encapsular (480) a palavra de código com os bits confiáveis mediante a aplicação de uma função de encapsulamento, obtendo dados encapsulados (c), - transferir (490) a segunda chave pública (u), os dados de reconciliação (h), os dados encapsulados (c) e os índices confiáveis para o primeiro dispositivo.
[00133] A Figura 11b mostra esquematicamente um exemplo de um método criptográfico 500 de acordo com uma modalidade. O método 500 é disposto para compartilhar uma palavra de código, sendo que o método 500 compreende: - comunicar-se (510) com um segundo dispositivo criptográfico (20), - obter (520) uma primeira chave privada (r) e uma primeira chave pública (b) derivada da primeira chave privada, transferir a primeira chave pública (b) para o segundo dispositivo,
- receber (530) do segundo dispositivo uma segunda chave pública (u), dados de reconciliação (h) e dados encapsulados (c) e índices confiáveis, - gerar (540) uma primeira chave compartilhada bruta (k’) (540) a partir da segunda chave pública (u) e da primeira chave privada (r), - aplicar (550) os dados de reconciliação (h) em uma função de reconciliação para os coeficientes na primeira chave compartilhada bruta (k’) indicada pelos índices confiáveis (safe_bits), obtendo bits confiáveis (k) - desencapsular (560) os dados encapsulados (c) obtendo uma palavra próxima ao código com o uso dos bits confiáveis, - aplicar (570) uma função de correção de erro à palavra próxima ao código obtendo uma palavra de código.
[00134] A palavra de código no método 400 ou 500 pode ser usada para transferir uma mensagem ou uma chave usada para criptografar um método, por exemplo em um método de criptografia de chave pública. A palavra de código pode ser usada para ficar em acordo com uma chave compartilhada.
[00135] Muitas formas diferentes de execução dos métodos são possíveis, conforme ficará evidente para o versado na técnica. Por exemplo, as etapas podem ser executadas na ordem apresentada, mas a ordem das etapas também pode ser variada ou algumas etapas podem ser executadas em paralelo. Além disso, outras etapas de método podem ser inseridas entre as etapas. As etapas inseridas podem representar modificações no método, conforme aqui descrito, ou podem não estar relacionadas ao método. Por exemplo, algumas partes podem ser executadas, pelo menos parcialmente, em paralelo. Além disso, uma dada parte pode não ter sido completamente concluída antes de uma próxima etapa ser iniciada.
[00136] As modalidades do método podem ser executadas com o uso de um software que compreende instruções para fazer com que um sistema processador execute o método. O software pode incluir apenas aquelas etapas empregadas por uma subentidade específica do sistema. O software pode ser armazenado em uma mídia de armazenamento adequada, como um disco rígido, um disquete, uma memória, um disco óptico etc. O software pode ser enviado como um sinal por uma rede com fio, ou sem fio, ou com o uso de uma rede de dados, por exemplo a internet. O software pode ser disponibilizado para download e/ou para uso remoto em um servidor. As modalidades do método podem ser executadas com o uso de um fluxo de bits disposto de modo a configurar lógica programável, por exemplo, uma matriz de portas programável em campo (FPGA), para executar o método.
[00137] Deve-se entender que a invenção também se estende a programas de computador, especialmente programas de computador armazenados em uma portadora, adaptados para colocar a invenção em prática. O programa pode estar sob a forma de código-fonte, código-objeto, código-fonte intermediário e código-objeto parcialmente compilado, ou em qualquer outra forma adequada para uso na implementação de uma modalidade do método. Uma modalidade relacionada a um produto de programa de computador compreende instruções executáveis por computador que correspondem a cada uma das etapas de processamento de pelo menos um dos métodos apresentados. Essas instruções podem ser subdivididas em sub-rotinas e/ou ser armazenadas em um ou mais arquivos que podem estar estática ou dinamicamente ligados. Outra modalidade relacionada a um produto de programa de computador compreende instruções executáveis por computador que correspondem a cada um dos meios de pelo menos um dos sistemas e/ou produtos apresentados.
[00138] A Figura 8a mostra uma mídia legível por computador 1000 que tem uma parte gravável 1010 que compreende um programa de computador 1020, sendo que o programa de computador 1020 compreende instruções para fazer com que um sistema processador execute um método de acordo de chaves ou método de criptografia de chave pública ou método de descriptografia de chave pública, de acordo com uma modalidade. O programa de computador 1020 pode ser incorporado na mídia legível por computador 1000 como marcadores físicos ou por meio de magnetização da mídia legível por computador
1000. Entretanto, qualquer outra modalidade adequada também é concebível. Além disso, deve-se considerar que, embora a mídia legível por computador 1000 seja mostrada aqui como um disco óptico, a mídia legível por computador 1000 pode ser qualquer mídia legível por computador adequada, como um disco rígido, memória de estado sólido, memória Flash etc., e pode ser gravável ou não gravável. O programa de computador 1020 compreende instruções para fazer com que um sistema processador realize o dito método de acordo de chaves ou método de criptografia de chave pública ou método de descriptografia de chave pública.
[00139] a Figura 8b mostra, em uma representação esquemática, de um sistema processador 1140 de acordo com uma modalidade de um dispositivo, por exemplo um dispositivo de acordo de chaves ou um dispositivo de criptografia ou descriptografia de chave pública. O sistema processador compreende um ou mais circuitos integrados 1110. A arquitetura dos um ou mais circuitos integrados 1110 é esquematicamente mostrada na Figura 8b. O circuito 1110 compreende uma unidade de processamento 1120, por exemplo uma CPU, para executar componentes de programas de computador para executar um método de acordo com uma modalidade e/ou implementar seus módulos ou unidades. O circuito 1110 compreende uma memória 1122 para armazenar códigos de programação, dados etc. Parte da memória 1122 pode ser apenas de leitura. O circuito 1110 pode compreender um elemento de comunicação 1126, por exemplo, uma antena, conectores ou ambos e similares. O circuito 1110 pode compreender um circuito integrado dedicado 1124 para executar parte ou todo o processamento definido no método. O processador 1120, a memória 1122, o CI dedicado 1124 e o elemento de comunicação 1126 podem ser conectados entre si através de um interconector 1130, como um barramento. O sistema processador 1110 pode ser disposto para comunicação com contato e/ou sem contato, com o uso de uma antena e/ou conectores, respectivamente.
[00140] Por exemplo, em uma modalidade, o sistema processador 1140, por exemplo o dispositivo de acordo de chaves ou um dispositivo de criptografia ou descriptografia de chave pública, pode compreender um circuito processador e um circuito de memória, sendo que o processador é disposto para executar um software armazenado no circuito de memória. Por exemplo, o circuito processador pode ser um processador Intel Core i7, um ARM Cortex-R8, etc. Em uma modalidade, o circuito processador pode ser um ARM Cortex M0. O circuito de memória pode ser um circuito ROM ou uma memória não volátil, por exemplo uma memória Flash. O circuito de memória pode ser uma memória volátil, por exemplo, uma memória SRAM. No último caso, o dispositivo pode compreender uma interface de software não volátil, por exemplo, um disco rígido, uma interface de rede, etc., disposta para fornecer o software.
[00141] As cláusulas numeradas apresentadas a seguir não são as reivindicações, mas incluem modalidades contempladas. Os requerentes informam, por meio deste documento, que novas reivindicações podem ser formuladas para tais cláusulas e/ou combinações de tais cláusulas e/ou recursos tomados da descrição ou das reivindicações, por exemplo durante o processamento do presente pedido ou de qualquer pedido adicional dele derivado.
1. Um segundo dispositivo criptográfico (20) que compreende: - uma interface de comunicação configurada para se comunicar com um primeiro dispositivo criptográfico (10), - um processador configurado para: - obter uma primeira chave pública (b) para o primeiro dispositivo criptográfico, - gerar uma segunda chave privada (s), uma palavra de código de acordo com um código de correção de erro e gerar uma segunda chave pública (u) a partir da segunda chave privada (s), - gerar uma segunda chave compartilhada bruta (k*) a partir da primeira chave pública (b) e da segunda chave privada (s), - aplicar uma função de bits confiáveis à segunda chave compartilhada bruta (k*) obtendo índices confiáveis, indicando coeficientes da chave compartilhada bruta e bits confiáveis derivados dos coeficientes indicados,
- gerar dados de reconciliação (h) para os coeficientes indicados da chave compartilhada bruta, sendo que os dados de reconciliação compreendem informações que possibilitam a redução das diferenças entre a primeira e a segunda chave bruta derivadas no primeiro e no segundo dispositivo, - encapsular a palavra de código com o uso dos bits confiáveis mediante a aplicação de uma função de encapsulamento, obtendo dados encapsulados (c), - transferir a segunda chave pública (u), os dados de reconciliação (h), os dados encapsulados (c) e os índices confiáveis para o primeiro dispositivo.
2. Um primeiro dispositivo criptográfico (10) que compreende: - uma interface de comunicação configurada para se comunicar com um segundo dispositivo criptográfico (20), - um processador configurado para: - obter uma primeira chave privada (r) e uma primeira chave pública (b) derivada da primeira chave privada, transferir a primeira chave pública (b) para o segundo dispositivo, - receber do segundo dispositivo uma segunda chave pública (u), dados de reconciliação (h) e dados encapsulados (c) e índices confiáveis, - gerar uma primeira chave compartilhada bruta (k’) a partir da segunda chave pública (u) e da primeira chave privada (r), - aplicar os dados de reconciliação (h) em uma função de reconciliação para os coeficientes na primeira chave compartilhada bruta (k’) indicada pelos índices confiáveis, obtendo bits confiáveis (k) - desencapsular os dados encapsulados c) com o uso dos bits confiáveis (k), obtendo uma palavra próxima ao código, - aplicar uma função de correção de erro à palavra próxima ao código obtendo uma palavra de código.
3. Um método criptográfico (400) para compartilhar uma palavra de código, sendo que o método compreende: - comunicar-se (410) com um primeiro dispositivo criptográfico (10), - receber (420) uma primeira chave pública (b) para o primeiro dispositivo criptográfico, - gerar (430) uma segunda chave privada (s) e gerar uma segunda chave pública (u) a partir da segunda chave privada (s), - gerar (440) uma palavra de código de acordo com um código de correção de erro, e, - gerar (450) uma segunda chave compartilhada bruta (k*) (450) a partir da primeira chave pública (b) e da segunda chave privada (s), - aplicar (460) uma função de bits confiáveis à segunda chave compartilhada bruta (k*) obtendo índices confiáveis, indicando coeficientes da chave compartilhada bruta e bits confiáveis derivados dos coeficientes indicados, - gerar (470) dados de reconciliação (h) para os coeficientes indicados da chave compartilhada bruta, sendo que os dados de reconciliação compreendem informações que possibilitam a redução das diferenças entre a primeira e a segunda chave bruta derivadas no primeiro e no segundo dispositivo,
- encapsular (480) a palavra de código com o uso dos bits confiáveis mediante a aplicação de uma função de encapsulamento, obtendo dados encapsulados (c), - transferir (490) a segunda chave pública (u), os dados de reconciliação (h), os dados encapsulados (c) e os índices confiáveis para o primeiro dispositivo.
4. Um método criptográfico (500) para compartilhar uma palavra de código, sendo que o método compreende: - comunicar-se (510) com um segundo dispositivo criptográfico (20), - obter (520) uma primeira chave privada (r) e uma primeira chave pública (b) derivada da primeira chave privada, transferir a primeira chave pública (b) para o segundo dispositivo, - receber (530) do segundo dispositivo uma segunda chave pública (u), dados de reconciliação (h) e dados encapsulados (c) e índices confiáveis, - gerar (540) uma primeira chave compartilhada bruta (k’) (540) a partir da segunda chave pública (u) e da primeira chave privada (r), - aplicar (550) os dados de reconciliação (h) em uma função de reconciliação para os coeficientes na primeira chave compartilhada bruta (k’) indicada pelos índices confiáveis, obtendo bits confiáveis (k) - desencapsular (560) os dados encapsulados (c) com o uso dos bits confiáveis, obtendo uma palavra próxima ao código, - aplicar (570) uma função de correção de erro à palavra próxima ao código obtendo uma palavra de código.
[00142] Deve-se notar que as modalidades mencionadas acima ilustram ao invés de limitarem a invenção, e que os versados na técnica têm a capacidade de projetar muitas modalidades alternativas.
[00143] Nas reivindicações, quaisquer sinais de referência colocados entre parênteses não devem ser interpretados como limitadores da reivindicação. O uso do verbo “compreender” e suas conjugações não exclui a presença de elementos ou etapas além daquelas mencionadas em uma reivindicação. O artigo indefinido “um” ou “uma” que precede um elemento não exclui a presença de uma pluralidade desses elementos. A invenção pode ser implementada por meio de hardware que compreende vários elementos distintos, e por meio de um computador programado adequadamente. Na reivindicação de dispositivo que enumera vários meios, vários desses meios podem ser incorporados por um único item de hardware. O simples fato de certas medidas serem mencionadas em reivindicações dependentes mutuamente diferentes não indica que uma combinação dessas medidas não possa ser usada com vantagem.
[00144] Nas reivindicações, as referências entre parênteses se referem a sinais de referência nos desenhos de modalidades exemplificadoras ou a fórmulas de modalidades, aumentando, assim, a inteligibilidade da reivindicação. Essas referências não devem ser interpretadas como limitadoras da reivindicação. Anexo A Descrições matemáticas esquemáticas de exemplos de modalidades
[00145] Os algoritmos descrevem um esquema de criptografia de chave pública CPAPKE que é seguro por INDCPA (indistinguibilidade sob ataque de texto claro escolhido, ou
Indistinguishability under Chosen-Plaintext Attack). Um CPAKEM (mecanismo de encapsulamento de chave criptográfica para ataque de texto claro escolhido, ou Chosen-Plaintext Attack-Cryptographic Key-Encapsulation Mechanism) pode ser construído a partir de CPAPKE de uma maneira de caixa preta, e um mecanismo de encapsulamento de chave segura de CCAKEM (mecanismo de encapsulamento de chave criptográfica para ataque de texto cifrado escolhido, ou Chosen Ciphertext Attack-Cryptographic Key-Encapsulation Mechanism) INDCCA2 (indistinguibilidade sob ataque adaptativo de texto cifrado escolhido, ou Indistinguishability under Adaptive Chosen Ciphertext Attack) construído a partir de CPAPKE, por exemplo aplicando-se a transformada Fujisaki-Okamoto.
[00146] CPAPKE usa parâmetros públicos que são números inteiros n; q; p; bh; κ; µ e algoritmos para geração, criptografia e descriptografia de chave. Ds é uma distribuição a partir da qual coeficientes da chave secreta podem ser extraídos, e é parametrizada por η. Por exemplo, se Ds for a distribuição de vetores de ternários esparsos, então η representa o peso de Hamming dos vetores. fr é uma função determinística que, dada uma semente ρ, amostra uma nova chave secreta a partir da distribuição Ds. Agir em um polinômio de grau no máximo n. A função SafeBits escolhe os coeficientes µ ≤ n que resultam na probabilidade geral menor de falha de descriptografia, juntamente com uma posição/índice, por exemplo em um vetor, que representa quais coeficientes µ foram escolhidos.
[00147] CPAKEM é um mecanismo de encapsulamento de chave passivamente seguro construído com o uso de CPAPKE de uma maneira de caixa preta. Ele reutiliza o algoritmo de geração de chave do esquema CPAPKE, e compreende adicionalmente algoritmo para encapsulamento e desencapsulamento, os parâmetros do esquema anterior e a função hash H de * bits a κ bits.
[00148] CCAKEM pode ser obtido mediante a aplicação da transformada Fujisaki-Okamoto em CPAPKE e pode usar as funções hash H conforme definido em CPAKEM e adicionalmente a função hash G de * bits a 3 vezes κ bits.

Claims (15)

REIVINDICAÇÕES
1. SEGUNDO DISPOSITIVO CRIPTOGRÁFICO (20), caracterizado por compreender: - uma interface de comunicação configurada para se comunicar com um primeiro dispositivo criptográfico (10), - um processador configurado para: - receber uma primeira chave pública (b) para o primeiro dispositivo criptográfico a partir do primeiro dispositivo criptográfico, sendo que a primeira chave pública (b) é gerada a partir de uma primeira chave privada, - gerar uma segunda chave privada (s), uma palavra de código de acordo com um código de correção de erro gerado, pelo menos em parte, aleatoriamente e gerar uma segunda chave pública (u) a partir da segunda chave privada (s), sendo que a palavra de código é gerada independentemente da primeira chave pública, da segunda chave privada e da segunda chave pública, - gerar uma segunda chave compartilhada bruta (k*) a partir da primeira chave pública (b) e da segunda chave privada (s), sendo que: - a primeira e a segunda chaves públicas, a segunda chave privada e a segunda chave compartilhada bruta são uma matriz sobre um campo finito ou anel, sendo a segunda chave pública obtida a partir da segunda chave privada por uma multiplicação ruidosa com uma matriz compartilhada (a), - encapsular a palavra de código com o uso da segunda chave compartilhada bruta mediante a aplicação de uma função de encapsulamento, obtendo dados encapsulados (c), - derivar uma chave criptográfica compartilhada a partir pelo menos dos dados (K) codificados na palavra de código,
- transferir a segunda chave pública (u) e os dados encapsulados (c) para o primeiro dispositivo.
2. SEGUNDO DISPOSITIVO CRIPTOGRÁFICO, de acordo com a reivindicação 1, caracterizado por: - o processador ser configurado para: - obter a palavra de código mediante a obtenção de dados para encapsulamento e gerar bits de paridade para os dados para encapsulamento, sendo a palavra de código obtida mediante a combinação dos dados para encapsulamento com os bits de paridade.
3. PRIMEIRO DISPOSITIVO CRIPTOGRÁFICO (10), caracterizado por compreender: - uma interface de comunicação configurada para se comunicar com um segundo dispositivo criptográfico (20), - um processador configurado para: - gerar efemeramente uma primeira chave privada (r) para gerar uma chave compartilhada, derivar uma primeira chave pública (b) a partir da primeira chave privada e transferir a primeira chave pública (b) para o segundo dispositivo, - receber do segundo dispositivo uma segunda chave pública (u) e dados encapsulados (c), - gerar uma primeira chave compartilhada bruta (k’) a partir da segunda chave pública (u) e da primeira chave privada (r), sendo que: - a primeira e a segunda chaves públicas, a primeira chave privada e a chave bruta são uma matriz sobre um campo finito ou anel, sendo a primeira chave pública obtida a partir da primeira chave privada por uma multiplicação ruidosa com uma matriz compartilhada (a),
- desencapsular os dados encapsulados c) com o uso da primeira chave compartilhada bruta, obtendo uma palavra próxima ao código independente da primeira chave privada, da primeira chave pública e da segunda chave pública, - aplicar uma função de correção de erro à palavra próxima ao código obtendo uma palavra de código, e - derivar uma chave criptográfica compartilhada a partir pelo menos dos dados (K) codificados na palavra de código.
4. PRIMEIRO DISPOSITIVO CRIPTOGRÁFICO, de acordo com a reivindicação 3, caracterizado pelo processador ser configurado para derivar os dados (K) a partir da palavra de código que é codificada na palavra de código.
5. PRIMEIRO OU SEGUNDO DISPOSITIVO CRIPTOGRÁFICO, de acordo com qualquer uma das reivindicações 1 a 4, configurado para um protocolo de criptografia de chave pública, caracterizado por: - uma mensagem (m) ser codificada na palavra de código, ou - uma mensagem (m) ser criptografada com uma chave simétrica compartilhada derivada pelo menos dos dados (K) codificados na palavra de código, sendo a mensagem criptografada enviada com a segunda chave pública (u) a partir do segundo dispositivo para o primeiro dispositivo.
6. PRIMEIRO OU SEGUNDO DISPOSITIVO CRIPTOGRÁFICO, de acordo com qualquer uma das reivindicações 1 a 5, caracterizado por uma chave compartilhada bruta ser obtida mediante a multiplicação de uma chave pública recebida por uma chave privada.
7. PRIMEIRO OU SEGUNDO DISPOSITIVO, de acordo com qualquer uma das reivindicações 1 a 6, caracterizado por dados de reconciliação serem obtidos a partir pelo menos de coeficientes múltiplos da chave bruta, e os dados de reconciliação serem obtidos, enviados, recebidos e/ou aplicados por menos que todos os coeficientes da chave bruta.
8. SEGUNDO DISPOSITIVO, de acordo com qualquer uma das reivindicações 1 a 7, caracterizado pelo processador do segundo dispositivo ser configurado para: - aplicar uma função de bits confiáveis à segunda chave compartilhada bruta obtendo índices confiáveis, indicando coeficientes da chave compartilhada bruta e bits confiáveis derivados dos coeficientes indicados, - gerar dados de reconciliação para os coeficientes indicados da chave compartilhada bruta, sendo que os dados de reconciliação compreendem informações que possibilitam a redução das diferenças entre a primeira e a segunda chave bruta derivadas no primeiro e no segundo dispositivo, sendo que o encapsulamento da palavra de código usa bits confiáveis, e - transferir os dados de reconciliação e os índices confiáveis para o primeiro dispositivo.
9. PRIMEIRO DISPOSITIVO, de acordo com qualquer uma das reivindicações 1 a 8, caracterizado pelo processador do primeiro dispositivo ser configurado para: - receber, do segundo dispositivo, dados de reconciliação e índices confiáveis, - aplicar os dados de reconciliação em uma função de reconciliação para os coeficientes na primeira chave compartilhada bruta indicada pelos índices confiáveis, obtendo bits confiáveis, sendo que o desencapsulamento dos dados encapsulados utiliza os bits confiáveis.
10. PRIMEIRO DISPOSITIVO, de acordo com a reivindicação 9, caracterizado por - os bits confiáveis serem um ou mais bits mais significativos dos coeficientes indicados, os dados de reconciliação para coeficientes indicados serem um ou mais bits dos coeficientes indicados após os bits confiáveis em significância , um ou mais bits menos significativos dos coeficientes indicados poderem ser descartados.
11. PRIMEIRO DISPOSITIVO, de acordo com qualquer uma das reivindicações 9 ou 10, caracterizado pelo processador ser configurado para - selecionar os coeficientes na chave bruta indicada pelos índices confiáveis, substituir os coeficientes selecionados por coeficientes modificados que estão em acordo com dados de reconciliação correspondentes e que minimizam a distância de Lee entre o coeficiente selecionado e o coeficiente modificado, obtendo os bits confiáveis como um ou mais dos bits mais significativos dos coeficientes modificados.
12. PRIMEIRO DISPOSITIVO, de acordo com a reivindicação 11, caracterizado pelo processador ser configurado para - determinar os coeficientes modificados em acordo com os dados de reconciliação correspondentes que não teriam sido descartados pelo primeiro dispositivo, e que minimizam a distância de Lee entre o coeficiente selecionado e o coeficiente modificado.
13. MÉTODO CRIPTOGRÁFICO (400) PARA COMPARTILHAR UMA PALAVRA DE CÓDIGO, caracterizado por compreender:
- comunicar-se (410) com um primeiro dispositivo criptográfico (10), - receber (420) uma primeira chave pública (b) para o primeiro dispositivo criptográfico a partir do primeiro dispositivo criptográfico, sendo que a primeira chave pública (b) é gerada a partir de uma primeira chave privada, - gerar (430) uma segunda chave privada (s) e gerar uma segunda chave pública (u) a partir da segunda chave privada (s), - gerar (440) uma palavra de código de acordo com um código de correção de erro, ao menos em parte aleatoriamente, sendo que a palavra de código é gerada independente da primeira chave pública, da segunda chave privada e da segunda chave pública, e, - gerar (450) uma segunda chave compartilhada bruta (k*) da primeira chave pública (b) e da segunda chave privada (s), sendo que: - a primeira e a segunda chaves públicas, a segunda chave privada e a segunda chave compartilhada bruta são uma matriz sobre um campo finito ou anel, sendo a segunda chave pública obtida a partir da segunda chave privada por uma multiplicação ruidosa com uma matriz compartilhada (a), - encapsular (480) a palavra de código com o uso da segunda chave compartilhada bruta mediante a aplicação de uma função de encapsulamento, obtendo dados encapsulados (c), - derivar uma chave criptográfica compartilhada a partir pelo menos dos dados (K) codificados na palavra de código - transferir (490) a segunda chave pública (u) e os dados encapsulados (c) para o primeiro dispositivo.
14. MÉTODO CRIPTOGRÁFICO (500) PARA COMPARTILHAR UMA PALAVRA DE CÓDIGO, caracterizado por compreender: - comunicar-se (510) com um segundo dispositivo criptográfico (20), - gerar efemeramente uma primeira chave privada (r) para gerar uma chave compartilhada, derivar uma primeira chave pública (b) a partir da primeira chave privada e transferir a primeira chave pública (b) para o segundo dispositivo, - receber (530) do segundo dispositivo uma segunda chave pública (u) e dados encapsulados (c), - gerar (540) uma primeira chave compartilhada bruta (k’) a partir da segunda chave pública (u) e da primeira chave privada (r), sendo que: - a primeira e a segunda chaves públicas, a primeira chave privada e a chave bruta são uma matriz sobre um campo finito ou anel, sendo a primeira chave pública obtida a partir da primeira chave privada por uma multiplicação ruidosa com uma matriz compartilhada (a), - desencapsular (560) os dados encapsulados (c) com o uso da primeira chave compartilhada bruta, obtendo uma palavra próxima ao código independente da primeira chave privada, da primeira chave pública e da segunda chave pública, - aplicar (570) uma função de correção de erro à palavra próxima ao código obtendo uma palavra de código, e - derivar uma chave criptográfica compartilhada a partir pelo menos dos dados (K) codificados na palavra de código.
15. MÍDIA LEGÍVEL POR COMPUTADOR (1000), caracterizada por compreender dados transitórios ou não transitórios (1020) que representam instruções para fazer com que um sistema processador execute o método conforme definido em qualquer uma das reivindicações 13 ou 14.
BR112021000563-3A 2018-07-17 2019-07-17 Segundo dispositivo criptográfico, primeiro dispositivo criptográfico, método criptográfico para compartilhar uma palavra de código e mídia legível por computador BR112021000563A2 (pt)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
EP18183911.9 2018-07-17
EP18183911 2018-07-17
EP18187763.0 2018-08-07
EP18187763.0A EP3609117A1 (en) 2018-08-07 2018-08-07 Key encapsulation protocols
PCT/EP2019/069188 WO2020016268A1 (en) 2018-07-17 2019-07-17 Key encapsulation protocols

Publications (1)

Publication Number Publication Date
BR112021000563A2 true BR112021000563A2 (pt) 2021-04-06

Family

ID=67253909

Family Applications (1)

Application Number Title Priority Date Filing Date
BR112021000563-3A BR112021000563A2 (pt) 2018-07-17 2019-07-17 Segundo dispositivo criptográfico, primeiro dispositivo criptográfico, método criptográfico para compartilhar uma palavra de código e mídia legível por computador

Country Status (6)

Country Link
US (1) US11483153B2 (pt)
EP (1) EP3824591B1 (pt)
JP (1) JP6975361B2 (pt)
CN (1) CN112715016B (pt)
BR (1) BR112021000563A2 (pt)
WO (1) WO2020016268A1 (pt)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP3843320A1 (en) * 2019-12-24 2021-06-30 Koninklijke Philips N.V. Public/private key system with increased security
JP7460515B2 (ja) 2020-03-13 2024-04-02 Kddi株式会社 電子署名生成装置、電子署名生成方法及び電子署名生成プログラム
CN112367167B (zh) * 2020-10-28 2021-08-10 西南大学 基于张量网络态动态压缩的量子秘密共享方法及***
CN113326530B (zh) * 2021-06-29 2024-02-02 北京计算机技术及应用研究所 一种适用于通信双方秘钥共享的秘钥协商方法

Family Cites Families (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH08204700A (ja) * 1995-01-26 1996-08-09 Nippon Telegr & Teleph Corp <Ntt> 暗号通信装置及び暗号通信方法
WO1998008323A1 (en) * 1996-08-19 1998-02-26 Ntru Cryptosystems, Inc. Public key cryptosystem method and apparatus
US6704871B1 (en) * 1997-09-16 2004-03-09 Safenet, Inc. Cryptographic co-processor
CA2271178A1 (en) * 1999-05-06 1999-07-06 Connotech Experts-Conseils Inc. Server-side public key cryptography apparatus with private key protection and isolation from public networks
CN101272240B (zh) * 2007-03-21 2013-01-23 华为技术有限公司 一种会话密钥的生成方法、***和通信设备
FR2956541B1 (fr) 2010-02-18 2012-03-23 Centre Nat Rech Scient Procede cryptographique de communication d'une information confidentielle.
CN101977112B (zh) * 2010-11-04 2013-10-09 厦门大学 一种基于神经网络混沌吸引子的公钥密码加密和解密方法
CN103200000B (zh) * 2013-03-27 2016-03-16 武汉大学 一种量子计算环境下的共享密钥建立方法
JP2017519457A (ja) * 2014-06-27 2017-07-13 コーニンクレッカ フィリップス エヌ ヴェKoninklijke Philips N.V. 共有鍵を決定するためのデバイス
DE102014117311B4 (de) * 2014-11-26 2017-04-06 Infineon Technologies Ag Kommunikationsanordnung und Verfahren zum Generieren eines Kryptografieschlüssels
CN106161416A (zh) * 2015-05-20 2016-11-23 中兴通讯股份有限公司 一种实现数据传输的方法及光通道传输设备
CN107040369B (zh) * 2016-10-26 2020-02-11 阿里巴巴集团控股有限公司 数据传输方法、装置及***
EP3402118A1 (en) * 2017-05-10 2018-11-14 Koninklijke Philips N.V. Key agreement devices and method
US20200304306A1 (en) * 2018-12-21 2020-09-24 01 Communique Laboratory Inc. Cryptographic System and Method
US20210203502A1 (en) * 2018-12-21 2021-07-01 01 Communique Laboratory Inc. Cryptographic System and Method
US11784825B2 (en) * 2019-09-26 2023-10-10 Visa International Service Association Lattice based signatures with uniform secrets

Also Published As

Publication number Publication date
JP2021524212A (ja) 2021-09-09
US11483153B2 (en) 2022-10-25
US20210266164A1 (en) 2021-08-26
WO2020016268A1 (en) 2020-01-23
EP3824591A1 (en) 2021-05-26
JP6975361B2 (ja) 2021-12-01
EP3824591B1 (en) 2022-02-23
CN112715016A (zh) 2021-04-27
CN112715016B (zh) 2024-04-09

Similar Documents

Publication Publication Date Title
EP3622663B1 (en) Key agreement devices and method
BR112021000563A2 (pt) Segundo dispositivo criptográfico, primeiro dispositivo criptográfico, método criptográfico para compartilhar uma palavra de código e mídia legível por computador
US11991285B2 (en) Configurable cryptographic device
JP7413365B2 (ja) 暗号メッセージのサイズが縮小された公開鍵/秘密鍵システム
CN111492615B (zh) 具有可更新共享矩阵的加密设备
WO2019231392A1 (zh) 一种密钥协商***、方法及装置
JP2022537733A (ja) 認証付き鍵共有
EP4082153B1 (en) Public/private key system with increased security
RU2787692C2 (ru) Протоколы инкапсуляции ключей
RU2787692C9 (ru) Протоколы инкапсуляции ключей
EP3609117A1 (en) Key encapsulation protocols
US20240089113A1 (en) Lightweight fault detection mechanism for streaming of cryptographic data objects