PKCS 1 - PKCS 1

Na criptografia , o PKCS # 1 é o primeiro de uma família de padrões chamados Public-Key Cryptography Standards (PKCS) , publicado pelos RSA Laboratories . Ele fornece as definições básicas e recomendações para a implementação do algoritmo RSA para criptografia de chave pública . Ele define as propriedades matemáticas de chaves públicas e privadas, operações primitivas para criptografia e assinaturas, esquemas criptográficos seguros e representações de sintaxe ASN.1 relacionadas .

A versão atual é 2.2 (2012-10-27). Em comparação com 2.1 (2002-06-14), que foi republicado como RFC 3447, a versão 2.2 atualiza a lista de algoritmos de hash permitidos para alinhá-los com FIPS 180-4, adicionando portanto SHA-224, SHA-512/224 e SHA- 512/256.

Chaves

O padrão PKCS # 1 define as definições matemáticas e propriedades que as chaves RSA públicas e privadas devem ter. O par de chave tradicional baseia-se num módulo, que é o produto de dois grandes distintos números primos , e , de tal modo que .

A partir da versão 2.1, essa definição foi generalizada para permitir chaves multiprimos, onde o número de primos distintos pode ser dois ou mais. Ao lidar com chaves multi-primos, os fatores primos são geralmente rotulados como para alguns , como:

para

Como uma notação de conveniência, e .

A chave pública RSA é representada como a tupla , onde o inteiro é o expoente público.

A chave privada RSA pode ter duas representações. A primeira forma compacta é a tupla , onde é o expoente privado. A segunda forma tem pelo menos cinco termos (p, q, dp, dq, qinv) ou mais para chaves multiprimos. Embora matematicamente redundantes para a forma compacta, os termos adicionais permitem certas otimizações computacionais ao usar a chave. Em particular, o segundo formato permite derivar a chave pública.

Primitivos

O padrão define vários primitivos básicos. As operações primitivas fornecem as instruções fundamentais para transformar as fórmulas matemáticas brutas em algoritmos computáveis.

  • I2OSP - Primitivo de string de inteiro em octeto - converte um inteiro não negativo (potencialmente muito grande) em uma sequência de bytes (string de octeto).
  • OS2IP - String de octeto para primitivo inteiro - interpreta uma sequência de bytes como um inteiro não negativo
  • RSAEP - RSA Encryption Primitive - criptografa uma mensagem usando uma chave pública
  • RSADP - RSA Decryption Primitive - descriptografa o texto cifrado usando uma chave privada
  • RSASP1 - Primitivo de assinatura RSA 1 - cria uma assinatura sobre uma mensagem usando uma chave privada
  • RSAVP1 - Primitiva de verificação RSA 1 - verifica se uma assinatura é para uma mensagem usando uma chave pública

Esquemas

Por si mesmas, as operações primitivas não fornecem necessariamente qualquer segurança. O conceito de um esquema criptográfico é definir algoritmos de nível superior ou usos das primitivas para que atinjam certos objetivos de segurança.

Existem dois esquemas de criptografia e descriptografia:

Nota: Uma pequena mudança foi feita em RSAES-OAEP em PKCS # 1 versão 2.1, fazendo com que RSAES-OAEP em PKCS # 1 versão 2.0 fosse totalmente incompatível com RSA-OAEP em PKCS # 1 versão 2.1 e versão 2.2.

Existem também dois esquemas para lidar com assinaturas:

  • RSASSA-PSS: melhorado P robabilistic S ignature S cheme com apêndice; com base no esquema de assinatura probabilística originalmente inventado por Bellare e Rogaway.
  • RSASSA-PKCS1-v1_5: antigo S ignature S cheme com um anexo como padronizado pela primeira vez na versão 1.5 de PKCS # 1.

Os dois esquemas de assinatura usam métodos de codificação definidos separadamente:

  • EMSA-PSS: método de codificação para apêndice de assinatura, esquema de assinatura probabilística.
  • EMSA-PKCS1-v1_5: método de codificação para apêndice de assinatura conforme padronizado pela primeira vez na versão 1.5 do PKCS # 1.

Os esquemas de assinatura são, na verdade, assinaturas com apêndice , o que significa que, em vez de assinar alguns dados de entrada diretamente, uma função hash é usada primeiro para produzir uma representação intermediária dos dados e, em seguida, o resultado do hash é assinado. Essa técnica quase sempre é usada com RSA porque a quantidade de dados que podem ser assinados diretamente é proporcional ao tamanho das chaves; que quase sempre é muito menor do que a quantidade de dados que um aplicativo deseja assinar.

Histórico de versão

  • Versões 1.1-1.3, de fevereiro a março de 1991, distribuída de forma privada.
  • Versão 1.4, junho de 1991, publicado para NIST / OSI Implementors 'Workshop.
  • Versão 1.5, novembro de 1993. Primeira publicação pública. Republicado como RFC 2313.
  • Versão 2.0, setembro de 1998. Republicado como RFC 2437.
  • Versão 2.1, junho de 2002. Republicado como RFC 3447.
  • Versão 2.2, outubro de 2012. Republicado como RFC 8017.

Implementações

Abaixo está uma lista de bibliotecas de criptografia que fornecem suporte para PKCS # 1:

Ataques

Vários ataques foram descobertos contra PKCS # 1 v1.5.

Em 1998, Daniel Bleichenbacher publicou um artigo seminal sobre o que ficou conhecido como ataque de Bleichenbacher (também conhecido como "ataque de milhões de mensagens"). PKCS # 1 foi posteriormente atualizado na versão 2.0 e os patches foram emitidos para usuários que desejam continuar usando a versão antiga do padrão. Com pequenas variações, essa vulnerabilidade ainda existe em muitos servidores modernos.

Em 2006, Bleichenbacher apresentou um novo ataque de falsificação contra o esquema de assinatura RSASSA-PKCS1-v1_5.

Veja também

Referências

links externos