Criptografia, assinaturas e PKI

Primitivas, RSA de brinquedo, gestão e contagem de chaves, KDC, certificados e CRL.

TLDR

Perguntar sobre esta página

ChatGPTClaudePerplexityGrokGeminiCopiar e abrirDeepSeekCopiar e abrir

Ana envia ao Bruno a lista de preços da loja. Um observador da rede não deve conseguir lê-la, e Bruno precisa de detetar alterações e verificar a origem. São objetivos distintos: confidencialidade, integridade e autenticidade. Uma primitiva criptográfica é um mecanismo básico, como uma cifra ou uma assinatura, que pode ser combinado num protocolo para cumprir esses objetivos.

Escolher a primitiva

A lista de preços da loja mostra quando cada mecanismo serve. Para esconder a lista em trânsito, Ana cifra para a chave pública do Bruno; para provar que a lista veio da direção, a direção assina com a sua chave privada e qualquer pessoa verifica com a pública; para detetar uma alteração acidental face a uma cópia confiável, basta comparar o hash com a referência guardada. A tabela seguinte resume cada caso e o que não resolve sozinho.

MecanismoSegredo necessárioPropriedade principalO que não dá sozinho
Cifra simétricaChave partilhadaConfidencialidadeAutenticidade e proteção contra repetição
Cifra de chave públicaPrivada do destinatário para decifrarConfidencialidade para esse destinatárioIdentidade de quem enviou
Hash criptográficoNenhumResumo para verificar alterações face a uma referência confiávelAutenticidade se o atacante puder trocar mensagem e resumo
MACChave partilhadaIntegridade e autenticidade entre quem conhece a chaveConfidencialidade ou prova pública do autor
Assinatura digitalPrivada do signatárioIntegridade e verificação pública da origemConfidencialidade

Uma assinatura usa operações próprias Sign e Verify. Não se deve defini-la como “cifrar com a chave privada”: isso não descreve algoritmos como EdDSA e omite a codificação segura do RSA. Se a chave privada foi roubada, verificar a assinatura não distingue o titular do ladrão. Uma assinatura pode apoiar o não repúdio, porque terceiros podem verificar a prova. A atribuição de uma ação à pessoa continua a depender da associação da chave, da sua proteção e do contexto.

Uma função hash tem saída de tamanho fixo. Para a lista de preços, distingue três problemas:

  • Pré-imagem: dado um resumo, encontrar alguma entrada que o produza.
  • Segunda pré-imagem: dada a lista original, encontrar outra lista com o mesmo resumo.
  • Colisão: escolher duas listas distintas que produzam o mesmo resumo, sem uma lista original imposta.

Para uma saída ideal de nn bits, a pesquisa genérica de colisões custa aproximadamente 2n/22^{n/2} tentativas, por causa do paradoxo do aniversário. Isto não torna secreto um dado com poucos valores possíveis: se a lista só pudesse ser uma de dez versões conhecidas, calcular os dez hashes permitiria comparar as hipóteses com o resumo publicado.

Colisões existem necessariamente quando há mais entradas possíveis do que resumos: uma saída de nn bits só admite 2n2^n valores. Isso não fornece um método eficiente para encontrar duas entradas concretas. Existência de colisões e resistência computacional a encontrá-las são afirmações diferentes.

Cifrar e assinar com as chaves certas

Para confidencialidade, Ana cifra para a chave pública do Bruno, que decifra com a privada do Bruno. Para autenticidade, Ana assina com a privada da Ana, e Bruno verifica com a pública da Ana. Trocar estes nomes troca o objetivo.

Em sistemas híbridos, uma chave de sessão protege os dados com uma cifra simétrica autenticada. Um mecanismo de acordo ou encapsulamento de chaves estabelece esse segredo. Isto evita usar operações de chave pública para todo o conteúdo. O acordo de chaves também precisa de autenticação, como veremos em modos e protocolos.

Ordem entre assinar e cifrar

Assinatura e cifragem podem combinar-se nas duas ordens, como descreve a secção 3.7 do RFC 8551. O que muda é o objeto autenticado pela assinatura exterior e o que um verificador consegue concluir.

Quando Ana assina o texto original e depois cifra o conjunto para Bruno, quem decifra pode verificar a assinatura sobre esse texto. A identidade do signatário fica escondida de observadores sem a chave de decifra, e a verificação exige decifrar primeiro. Quando Ana cifra primeiro e assina o criptograma, qualquer pessoa pode verificar a assinatura exterior sem decifrar, mas essa verificação autentica o criptograma, não estabelece por si a mesma relação com o texto em claro.

Uma assinatura exterior não prova por si que o signatário compreendeu o conteúdo: processamento automático, chaves comprometidas e contextos diferentes quebram essa leitura. Do mesmo modo, o facto de Ana cifrar para a chave de Bruno não a impede de conhecer o texto que ela própria escolheu cifrar. Para o objetivo desta aula, provar perante terceiros a origem do texto em claro, a composição usada é assinar o original e cifrar depois, com a chave associada a Ana, a chave protegida e o contexto verificado. A outra ordem continua possível noutros objetivos, por exemplo quando se quer verificação sem decifrar. Em ambos os casos, continua a ser preciso proteger a chave de sessão e autenticar o acordo que a estabelece.

Cifras clássicas e espaço de chaves

A cifra de César desloca cada letra num alfabeto. Vamos usar só as 26 maiúsculas ASCII, com A=0, B=1, até Z=25, e manter espaços e pontuação. Com deslocamento k=3k=3, ZEBRA passa a CHEUD, voltando a A depois de Z.

Se xx é o número da letra, ciframos com y=(x+k) mod 26y=(x+k)\bmod26 e recuperamos com x=(y−k) mod 26x=(y-k)\bmod26. O símbolo  mod \bmod dá o resto não negativo da divisão pelo módulo. Por exemplo, 28 mod 26=228\bmod26=2, a letra C. O deslocamento é a chave.

Só há 26 deslocamentos distintos, incluindo zero. Experimentar todos permite reconhecer uma mensagem legível. Numa substituição monoalfabética, cada letra recebe outra letra distinta: há 26!=26×25×⋯×126! = 26\times25\times\cdots\times1 permutações, mas as repetições e frequências do texto continuam a dar informação. Um espaço de chaves grande, sozinho, não demonstra segurança. Estas cifras servem para estudar ideias, não para proteger dados atuais.

Aleatoriedade e bits de segurança

A segurança depende de como se gera uma chave, não de a string resultante parecer complicada. Um gerador que devolve sempre tYs90a tem um único resultado possível, mesmo misturando maiúsculas, minúsculas e números. Uma amostra isolada não permite ordenar a entropia dos geradores que produziram tYs90a, Banan4 e YYYZZZ.

Se uma chave de 128 bits é escolhida uniformemente entre todos os valores, há 21282^{128} hipóteses. Se o gerador escolhe uniformemente entre apenas 256 dessas strings, há oito bits de entropia, porque 256=28256=2^8. Escrever cada resultado em 128 bits não acrescenta escolhas ao gerador. Chaves exigem geração criptograficamente adequada; datas, contadores e geradores previsíveis não são substitutos.

Bits de segurança descrevem a ordem do trabalho do melhor ataque considerado: bb bits corresponde aproximadamente a 2b2^b operações no modelo. Não é necessariamente o tamanho da chave, da mensagem ou do módulo. Por exemplo, um hash ideal com saída de 256 bits tem resistência genérica a colisões da ordem de 128 bits. As hipóteses sobre ataques, recursos e algoritmo fazem parte desta estimativa.

O princípio de Kerckhoffs pede que o sistema continue protegido mesmo que o adversário conheça o seu desenho, desde que os segredos necessários, como a chave, se mantenham protegidos. Esconder o algoritmo não compensa uma chave previsível.

Aritmética modular

Escrever u≡v(modn)u\equiv v\pmod n significa que u−vu-v é múltiplo de nn. Não significa que os dois inteiros são iguais. Assim, 21≡1(mod20)21\equiv1\pmod{20} porque a diferença é 20.

Dois inteiros são coprimos quando o seu máximo divisor comum é 1. Um inverso modular de ee é um inteiro dd que satisfaz ed≡1(modn)ed\equiv1\pmod n; existe precisamente quando ee e nn são coprimos. Para e=3e=3 e módulo 20, d=7d=7 serve porque 3×7=213\times7=21 deixa resto 1. Já 2 não tem inverso módulo 20: todos os seus produtos são pares e não podem deixar resto 1.

Podemos reduzir os resultados intermédios de uma potência. Por exemplo, 262 mod 33=1626^2\bmod33=16 e 264 mod 33=2526^4\bmod33=25, e como 7=4+2+17=4+2+1 calculamos 25×16×26 mod 33=525\times16\times26\bmod33=5. Em Python, pow(26, 7, 33) faz a exponenciação modular sem construir primeiro o inteiro 26726^7.

RSA de brinquedo

A conta seguinte usa RSA sem codificação, só para compreender a aritmética. Este esquema não é seguro para uso real. Os esquemas reais de cifragem e assinatura acrescentam construções como OAEP e PSS.

Bruno escolhe os primos p=3p=3 e q=11q=11. Então n=pq=33n=pq=33 e φ(n)=(p−1)(q−1)=20\varphi(n)=(p-1)(q-1)=20. A função φ\varphi conta os inteiros de 1 até n−1n-1 coprimos com nn; esta fórmula usa dois primos distintos. Escolhe e=3e=3, coprimo com 20, e d=7d=7, porque ed=21≡1(mod20)ed=21\equiv1\pmod{20}. A chave pública é (n,e)(n,e) e a privada inclui dd.

Para m=5m=5, com 0≤m<n0\leq m<n, Ana calcula c=me mod n=125 mod 33=26c=m^e\bmod n=125\bmod33=26. Bruno recupera o valor em passos: 262 mod 33=1626^2\bmod33=16, 264 mod 33=2526^4\bmod33=25 e 267=264×262×26 mod 33=25×16×26 mod 33=526^7=26^4\times26^2\times26\bmod33=25\times16\times26\bmod33=5. Assim m=cd mod n=5m=c^d\bmod n=5.

Para separar as identidades, Ana usa outro par: p=5p=5, q=11q=11, n=55n=55, φ(n)=40\varphi(n)=40, e=3e=3, d=27d=27. Neste exemplo aritmético, o representante da mensagem é 5. A operação privada dá s=527 mod 55=25s=5^{27}\bmod55=25. A operação pública verifica 253 mod 55=525^3\bmod55=5. O valor 25 pertence ao par da Ana, não ao do Bruno.

OperaçãoChave usadaCálculoResultado
Cifrar para BrunoPública de Bruno53 mod 335^3\bmod3326
Recuperar por BrunoPrivada de Bruno267 mod 3326^7\bmod335
Operação privada da AnaPrivada da Ana527 mod 555^{27}\bmod5525
Verificar essa operaçãoPública da Ana253 mod 5525^3\bmod555

O módulo 33 pertence ao par do Bruno; o módulo 55 pertence ao da Ana. A última linha é apenas a verificação aritmética deste exemplo, sem a codificação de uma assinatura segura.

Os números pequenos permitem fatorizar o módulo imediatamente. Mesmo com números grandes, RSA sem codificação é determinístico e tem relações algébricas exploráveis. Esta conta demonstra o mecanismo, não a segurança de um protocolo.

Dois ataques ao RSA sem codificação

Se a mensagem só pode ser 4 ou 5 e a pública é (n=33,e=3)(n=33,e=3), qualquer observador calcula as duas hipóteses:

43 mod 33=31.4^3\bmod33=31. 53 mod 33=26.5^3\bmod33=26.

Observar 26 identifica a mensagem 5 sem obter a privada. O problema é a cifragem determinística, não apenas a fatorização fácil destes números. Um esquema seguro usa a aleatoriedade e a codificação da construção, como OAEP.

Na assinatura aritmética sem codificação, também há uma falsificação escolhida pelo atacante. Escolhe s=2s=2 e calcula publicamente m=se mod n=8m=s^e\bmod n=8. O verificador aceita (m=8,s=2)(m=8,s=2) porque essa é exatamente a sua igualdade de verificação. O atacante não assinou uma mensagem arbitrária previamente imposta, mas construiu um par aceite sem conhecer dd, o que já viola a segurança de uma assinatura. PSS tem uma codificação própria, não esta regra sobre inteiros crus.

Gestão de chaves

Uma chave precisa de geração adequada, distribuição autenticada, armazenamento protegido, controlo de utilização e revogação. A rotação não desfaz a leitura de dados antigos já expostos. Uma chave de cifragem perdida pode tornar os dados irrecuperáveis; uma chave roubada pode expor os dados e permitir falsificação, conforme a sua função.

Um sal de palavra-passe não é uma chave secreta. Um nonce também não precisa, em geral, de ser secreto. O requisito de cada valor depende da construção: confundir estes papéis leva a guardar segredos no sítio errado ou a reutilizar valores que têm de ser únicos.

Quantas chaves simétricas precisamos?

Se NN entidades tiverem uma chave diferente para cada par, existem

Kpares=(N2)=N(N−1)2.K_{pares}=\binom{N}{2}=\frac{N(N-1)}{2}.

Não contamos uma chave de A para B e outra de B para A: neste modelo, é um segredo partilhado pelo par. Para seis entidades, 6×5/2=156\times5/2=15. Ao acrescentar uma sétima, precisamos de seis novas chaves.

Um centro de distribuição de chaves, ou KDC, permite a cada entidade partilhar uma chave duradoura com o centro. No modelo simplificado com seis entidades e um KDC adicional, há seis destas chaves. O centro ajuda a distribuir chaves de sessão entre participantes, protegidas pelas chaves duradouras. A distribuição segue três passos: Ana pede ao centro uma chave para falar com Bruno; o centro gera uma chave de sessão e envia uma cópia a cada um, protegida pela chave duradoura de cada um; Ana e Bruno usam depois essa chave de sessão para proteger os dados. Kerberos usa um KDC com tickets e autenticadores; não envia simplesmente segredos em claro.

A conta NN refere-se só às ligações duradouras entre as NN entidades e o centro. Não conta chaves de sessão, réplicas, chaves internas nem outras entidades de uma instalação real. O preço da centralização é confiança e dependência no KDC: comprometer o centro pode afetar muitos participantes. Não confundas reduzir o número de segredos duradouros com eliminar gestão de chaves.

Verificar certificados

Um certificado associa uma identidade a uma chave pública através da assinatura de uma autoridade de certificação. Uma raiz instalada como âncora de confiança permite verificar uma cadeia.

Para aceitar o servidor, verificamos a cadeia de assinaturas, datas, nome esperado do servidor, restrições e utilizações permitidas, e os requisitos de estado/revogação da política aplicável. Uma cadeia criptograficamente válida para outra-loja.example não autoriza loja.example. Uma raiz autoassinada só é confiável porque foi instalada por um mecanismo confiável, não porque consegue assinar-se a si própria.

O certificado também não prova que o serviço é honesto, não contém erros ou está autorizado a receber todos os nossos dados, porque prova apenas uma associação de chave e identidade dentro de uma política.

Revogação e CRL

Um certificado pode ter datas válidas e, mesmo assim, estar revogado porque a chave foi comprometida. Uma CRL, lista de revogação de certificados, é uma estrutura assinada que identifica certificados revogados no seu âmbito, normalmente por número de série. Não é a lista de todos os certificados válidos ou emitidos.

Antes de usar uma CRL, verifica quem a emitiu, a assinatura, o âmbito e a atualidade, incluindo thisUpdate e nextUpdate segundo a política. O número de série tem significado com o emissor, não como identificador global isolado.

Caso: validade ainda não terminou

O certificado de api.example expira em dezembro. Uma CRL atual do emissor contém o seu número de série, 42, com revogação aplicável. Estamos em outubro. A assinatura do certificado e as datas podem passar, mas a revogação faz falhar a aceitação sob essa política.

Se a série 42 não aparecer numa CRL antiga, isso não prova que continua aceitável: faltam atualidade, âmbito e as restantes verificações da cadeia e do nome. Uma política que exige informação de estado precisa de definir também o que acontece quando essa informação não pode ser obtida.

Exercícios

Cifrar para o destinatário

Num RSA de brinquedo, Bruno tem chave pública n=55,e=3n=55,e=3. Ana quer cifrar a mensagem inteira m=7m=7 para Bruno. Qual é o valor cifrado? Não uses este esquema para comunicação real.

Pista

A cifragem usa a pública do destinatário.

Solução

73=343=6×55+137^3=343=6\times55+13, logo c=13c=13. A privada do Bruno é necessária para a operação de recuperação no esquema.

Erros frequentes

A privada da Ana corresponde à assinatura, não à cifragem para Bruno.

Voltar à explicação
Mensagem e hash substituídos

Um servidor publica um ficheiro e o seu SHA-256 na mesma página. Um atacante controla essa página e troca ambos. Explica por que a comparação não prova autenticidade e que tipo de referência seria necessário.

Pista

O hash exige algum segredo?

Solução

O hash público do novo ficheiro coincide com o resumo que o atacante publica. Nesse caso, a comparação só comprova consistência com essa referência. Uma assinatura com chave verificada ou um resumo obtido por canal confiável muda a hipótese de confiança.

Confere a tua resposta:

  • Explica que o atacante calcula o hash do ficheiro adulterado.
  • Distingue integridade face a uma referência de autenticidade da referência.
  • Propõe assinatura verificada por chave pública confiável ou referência obtida por canal confiável.

Erros frequentes

Um hash mais longo não corrige o controlo de ambos os valores.

Voltar à explicação
Oito entidades

Oito entidades partilham uma chave duradoura diferente por par. Quantas chaves distintas existem? Considera a mesma chave nos dois sentidos de comunicação.

Pista

Contar os pares ordenados duplicaria cada segredo.

Solução

8×7/2=288\times7/2=28. Num modelo com um KDC adicional e uma chave por entidade com esse centro, seriam oito chaves duradouras destas ligações. A comparação exclui chaves de sessão e outros componentes do centro.

Erros frequentes

Não usar 8 vezes 8, nem incluir pares de uma entidade consigo própria.

Voltar à explicação
Nome, emissor e revogação

Para ligar a loja.example, compara três certificados com cadeia e datas válidas. A é de outra-loja.example e não está revogado. B é de loja.example e aparece numa CRL atual do seu emissor, com assinatura e âmbito válidos. C é de loja.example, tem série 42, e só sabemos que uma CRL de outro emissor contém a série 42. A política exige verificar revogação. Decide o que estes dados permitem concluir sobre cada caso.

Pista

Separa condições de aceitação de identidades de certificados.

Solução

A falha a correspondência do nome, mesmo sem revogação. B falha a verificação de revogação, mesmo com nome e datas corretos. Para C, uma série de outro emissor não demonstra uma revogação aplicável: a série é interpretada com o emissor e o âmbito. Isto também não prova aceitação de C. Precisamos de obter o estado aplicável segundo a política e verificar os restantes usos e restrições.

Confere a tua resposta:

  • Rejeitei A pelo nome e B pela revogação aplicável.
  • Expliquei por que a série isolada não basta para rejeitar C.
  • Exigi todas as verificações da política para aceitar C.

Erros frequentes

Não confundir falta de prova de revogação com prova de validade completa.

Voltar à explicação
Deslocar sem perder os restantes caracteres

Define cesar(texto, deslocamento): devolve uma string com cada maiúscula ASCII de A a Z deslocada no alfabeto. Mantém todos os outros caracteres. O deslocamento é um inteiro, pode ser negativo ou maior que 25. A string vazia dá uma string vazia. Esta é uma cifra de estudo sem segurança para uso real.

Python
def cesar(texto, deslocamento):
    pass
Testes e resultado

Verifica o código para comparar o resultado com os testes.

Testes
  1. Dar a volta ao alfabeto
    Código do teste
    print(cesar("ZEBRA", 3))
    Esperado:
    CHEUD
  2. Espaços, pontuação e minúsculas
    Código do teste
    print(cesar("A Z! abc", 1))
    Esperado:
    B A! abc
  3. Deslocamento negativo
    Código do teste
    print(cesar("CHEUD", -3))
    Esperado:
    ZEBRA
  4. Mais de uma volta
    Código do teste
    print(cesar("XYZ", 27))
    Esperado:
    YZA
  5. Fora do alfabeto ASCII
    Código do teste
    print(cesar("Á Zç", 1))
    Esperado:
    Á Aç
  6. Texto vazio
    Código do teste
    print(repr(cesar("", 9)))
    Esperado:
    ''

Pista

ord dá o número de um caráter e chr faz a operação inversa. Subtrai ord('A') para obter os valores de 0 a 25.

Mais uma pista

Em Python, (indice + deslocamento) % 26 dá um índice de 0 a 25, incluindo para deslocamentos negativos. Os caracteres fora de A a Z ficam iguais.

Solução
def cesar(texto, deslocamento):
    resultado = []
    for carater in texto:
        if 'A' <= carater <= 'Z':
            indice = ord(carater) - ord('A')
            carater = chr(ord('A') + (indice + deslocamento) % 26)
        resultado.append(carater)
    return ''.join(resultado)

Somar o deslocamento e tomar o resto mantém o índice dentro do alfabeto. Passar o deslocamento oposto recupera as maiúsculas originais. A avaliação automática verifica este contrato nos casos publicados; não avalia a segurança de uma cifra.

Erros frequentes

Não uses apenas isupper(): também aceita maiúsculas de outros alfabetos, fora do contrato. Não elimines espaços nem esqueças a volta de Z para A.

Voltar à explicação
Que primitiva para cada objetivo

Para a lista de preços da loja, decide: esconder a pauta em trânsito; provar que veio da direção; detetar alteração acidental face a uma cópia confiável. Escolhe a primitiva de cada objetivo e diz o que ela não resolve sozinha.

Pista

Cada objetivo pede um segredo e uma propriedade diferentes.

Solução

Para esconder em trânsito, cifra para a chave pública do destinatário; não prova quem enviou. Para prova pública de origem, assinatura com a privada da direção e verificação com a pública; não esconde o conteúdo. Para alteração acidental face a referência confiável, compara o hash; sem canal confiável para a referência, usa MAC com chave partilhada ou assinatura.

Confere a tua resposta:

  • Escolhe cifra para confidencialidade em trânsito.
  • Escolhe assinatura para prova pública de origem.
  • Escolhe hash/MAC conforme a referência é pública ou partilhada, e diz o que cada um não dá.

Erros frequentes

Não proposes hash público publicado no mesmo canal controlado pelo atacante como prova de origem.

Voltar à explicação
128 bits escritos, quantas escolhas?

Um gerador escolhe uniformemente uma de 256 chaves conhecidas, cada uma escrita em 128 bits. Outro só mostrou uma amostra, Banan4, sem descrever o método de geração. Quantos bits de entropia tem o primeiro? Quantas hipóteses precisa de testar quem conhece a lista, no pior caso de pesquisa exaustiva? Podemos concluir que o segundo é melhor ou pior só pela amostra? Compara ainda uma saída hash ideal de 256 bits com a ordem do custo de encontrar uma colisão.

Pista

Conta resultados possíveis do gerador e distingue procurar uma chave de procurar dois hashes iguais.

Solução

O primeiro tem oito bits de entropia, pois 256=28256=2^8 escolhas equiprováveis. Uma pesquisa exaustiva testa no máximo 256 candidatos, não 21282^{128}; representá-los em 128 bits não cria mais possibilidades. A amostra do segundo não revela a distribuição nem a previsibilidade do gerador, por isso não permite essa comparação. Para o hash ideal, a pesquisa genérica de colisões tem custo da ordem de 21282^{128}, embora cada resumo tenha 256 bits. Tamanho, entropia e bits de segurança medem coisas diferentes.

Confere a tua resposta:

  • Calculei oito bits de entropia para 256 escolhas uniformes.
  • Distingui tamanho da representação de trabalho de ataque.
  • Não atribuí entropia a uma amostra pela sua aparência.
Voltar à explicação
Usar apenas a chave pública

Considera RSA de brinquedo com pública (n=55,e=3)(n=55,e=3), sem codificação. Uma mensagem só pode ser 2 ou 3 e observas a cifra 27. Recupera a mensagem sem fatorizar o módulo. Noutro sistema que aceita assinaturas pela regra se mod n=ms^e\bmod n=m, escolhe s=4s=4 e encontra uma mensagem que seja aceite. Que problema cada caso demonstra? Estes esquemas não servem para comunicação real.

Pista

A cifragem e a verificação são operações públicas. No segundo caso, escolhes a assinatura antes da mensagem.

Solução

As duas cifras possíveis são 23 mod 55=82^3\bmod55=8 e 33 mod 55=273^3\bmod55=27. A observação identifica a mensagem 3 pelo determinismo e pelo conjunto pequeno de hipóteses. Para a falsificação, 43=644^3=64 deixa resto 9 módulo 55, por isso (m=9,s=4)(m=9,s=4) passa a verificação. Não conhecemos a privada nem resolvemos a assinatura de uma mensagem previamente escolhida pelo destinatário; construímos um par aceite. OAEP e PSS acrescentam codificações próprias, respetivamente para cifragem e assinatura, em vez de usar estes inteiros crus.

Confere a tua resposta:

  • Identifiquei a mensagem pela comparação das duas cifras públicas.
  • Construí um par de mensagem e assinatura aceite sem calcular d.
  • Distingui falsificação escolhida de assinatura de mensagem imposta.
Voltar à explicação
Escolher a ordem para provar a origem do texto

Ana envia a Bruno uma ordem que só ele pode ler e cuja autoria do texto em claro deve poder provar perante terceiros. Que composição cumpre este objetivo, e o que garante a outra ordem?

A tua resposta

Solução

Assinar o original e cifrar depois: quem decifra verifica a assinatura sobre o texto em claro, com a chave associada a Ana e o contexto verificado. A outra ordem, cifrar e assinar o criptograma, autentica o criptograma e permite verificar sem decifrar, como descreve o RFC 8551 na secção 3.7, mas não estabelece por si a mesma relação com o texto em claro. Só cifrar não dá prova de origem; só assinar não dá confidencialidade. O facto de Ana cifrar para Bruno não a impede de conhecer o texto que escolheu.

  • Assina o texto original com a sua privada e cifra o conjunto para Bruno.. Para este objetivo, a assinatura cobre o texto em claro e quem decifra verifica a origem desse texto.
  • Cifra para Bruno e assina o criptograma para verificação sem decifrar.. Essa ordem autentica o criptograma e permite verificar sem decifrar, mas não estabelece por si a mesma relação com o texto em claro.
  • Só cifra para Bruno, sem assinar.. Bruno não tem prova pública de que a ordem veio de Ana.
  • Só assina, sem cifrar.. Qualquer observador lê o conteúdo.

Erros frequentes

Não tratar uma assinatura exterior ao criptograma como prova automática de compreensão do texto em claro, nem a incapacidade de decifrar como prova de desconhecimento.

Voltar à explicação

À tua maneira

Aparência

Modo de cor
Tema
Cor de destaque

Leitura

Fonte de leitura

Álgebra, lógica e uma ideia de cada vez.

Código

Fonte do código

Navegação

Cursor de leitura, sem edição. h, j, k, l movem; / pesquisa nesta página. v seleciona caracteres; V seleciona linhas; y copia. Tab permite destacar ou comentar. Espaço ou Enter abre blocos recolhíveis. Nos cartões, h, j, k, l mudam o foco.

CSS personalizado

Ativa uma sugestão ou guarda o teu CSS. Só muda este navegador.

Usa --page, --text e --accent para acompanhar o tema.

Seletores e recuperação

.site-header, .prose, .course-card, [data-reading-history], [data-playground] e .page-actions.

Abre a aparência com a tecla vírgula ou no rodapé. Se o CSS esconder os controlos, abre esta página sem CSS personalizado.

Pesquisar

Escreve para pesquisar em todo o site.

para escolher · Enter para abrir · Esc para fechar

Copiar fórmula

A cópia automática não está disponível. Copia o LaTeX abaixo.

Pesquisar nesta página

Enter procura · n / N repetem · Esc cancela. Ctrl / Cmd K pesquisa todo o site.

Atalhos de teclado

Clica numa tecla para a mudar. Esc cancela. Backspace desativa.

PesquisarCtrl / Cmd K

Os atalhos não interferem enquanto escreves. Tab e Enter funcionam sempre.