Computer Science › Software + Computação Distribuída
A tríade CIA, confidencialidade (só leitura autorizada), integridade (só modificação autorizada e detectável) e disponibilidade (o sistema permanece usável por partes autorizadas), é o vocabulário em torno do qual esta disciplina inteira é organizada: essencialmente todo mecanismo coberto depois existe para servir um ou mais desses três objetivos contra algum modelo de ameaça específico e enunciado.
\"Quem é você?\" e \"o que você tem permissão de fazer?\" soam quase como a mesma pergunta, mas são respondidas por mecanismos diferentes, podem falhar independentemente uma da outra, e confundi-las é uma das fontes mais comuns de bugs reais e exploráveis em sistemas de produção.
STRIDE, Spoofing, Tampering, Repudiation, Information disclosure, Denial of service, Elevation of privilege, é um checklist sistemático para modelagem de ameaças que mapeia cinco das suas seis categorias diretamente sobre a tríade CIA mais autenticação e autorização, e introduz um objetivo genuinamente novo, o não repúdio; aplicado a cada componente, ele transforma um vago \"pensar no que pode dar errado\" numa lista de ameaças específicas e individualmente triáveis.
O sigilo perfeito, o texto cifrado revelando zero informação sobre o texto claro, mesmo contra um atacante ilimitado, é alcançado exatamente pelo one-time pad: fazer XOR da mensagem com uma chave verdadeiramente aleatória, do comprimento da mensagem, usada exatamente uma vez; ambas as condições (aleatoriedade verdadeira e uso único) são essenciais, e o seu custo de distribuição de chave é exatamente tão difícil quanto o problema que ele resolve.
Uma cifra de bloco (AES) e um modo de operação são duas peças separadas e escolhidas independentemente de qualquer esquema de criptografia simétrica real: o AES define uma transformação segura, com chave e invertível sobre um único bloco de tamanho fixo, enquanto o modo define como aplicar essa transformação por uma mensagem inteira; uma cifra correta combinada com um modo mal escolhido (ECB) ainda pode falhar catastroficamente.
Uma função de hash criptográfica tem de satisfazer três propriedades de segurança distintas, resistência a pré-imagem (não dá para inverter), resistência a segunda pré-imagem (não dá para forjar uma correspondência a uma entrada fixa) e resistência a colisão (não dá nem para achar duas entradas que correspondam), um contrato adversarial fundamentalmente mais forte do que o requisito de velocidade-e-distribuição das funções de hash de tabela hash; o limite de aniversário torna a resistência a colisão dramaticamente mais difícil.
A criptografia sozinha fornece confidencialidade mas nenhuma garantia de integridade, e um hash simples enviado junto a um texto cifrado também não fornece nenhuma proteção real contra um atacante ativo, já que qualquer um pode recomputar um hash simples sem precisar de nenhum segredo; um MAC fecha essa lacuna exigindo uma chave secreta compartilhada, e a criptografia autenticada (AEAD) agrupa confidencialidade e integridade num único primitivo à prova de erros.
A criptografia de chave pública existe para resolver um problema que a criptografia simétrica não consegue: estabelecer um segredo compartilhado entre duas partes que nunca se conheceram, sobre um canal que um bisbilhoteiro observa por completo; todo esquema que esta disciplina cobre repousa sobre a aritmética modular já provada em matemática discreta, mais um novo fato, o pequeno teorema de Fermat, e a assimetria de mão única da exponenciação modular.
O Diffie-Hellman deixa duas partes que não compartilham nenhum segredo prévio concordarem com um sobre um canal público totalmente observado: cada uma escolhe um expoente privado, troca `g` elevado a esse expoente módulo um primo público, e cada uma combina o valor público da outra com o seu próprio expoente privado para chegar ao segredo compartilhado idêntico `g^(ab) mod p`, cuja segurança se reduz diretamente ao problema do logaritmo discreto.
O RSA gera uma chave pública `(n, e)` e uma chave privada `d` a partir de dois primos secretos `p` e `q`, de forma que a criptografia (`m^e mod n`) e a descriptografia (`c^d mod n`) são inversos prováveis uma da outra, uma consequência algébrica direta de escolher `d` como o inverso de `e` módulo `φ(n)` e aplicar o teorema de Euler; a sua segurança repousa sobre o problema da fatoração de inteiros.
A assinatura RSA roda o mesmo trapdoor usado para criptografia ao contrário: a chave privada produz uma assinatura, e a chave pública a verifica, deixando qualquer um confirmar a autoria sem conseguir forjá-la, uma capacidade que MACs (que exigem um segredo compartilhado) não conseguem oferecer; certificados então amarram uma chave pública a uma identidade via a assinatura de uma CA, numa cadeia de confiança que se reduz a um pequeno conjunto de raízes pré-confiáveis.
Um buffer overflow de pilha e uma injeção SQL são, estruturalmente, o mesmo erro subjacente ocorrendo em duas camadas diferentes de um sistema: entrada não confiável tratada como se só pudesse jamais ser dado inerte, quando um mecanismo a jusante (o ciclo busca-decodifica-executa da CPU; o parser SQL do banco) consegue reinterpretar parte dessa entrada como código ou comandos.
Canários de pilha, memória não executável (W^X/DEP) e ASLR cada um perturba um passo específico do ataque clássico de buffer-overflow-para-execução-de-código; nenhum é individualmente completo, cada um tem um bypass conhecido, que é exatamente por que sistemas endurecidos reais implantam os três juntos como defesas em camadas e complementares, uma postura honesta de \"defesa em profundidade\" em vez de uma alegação de ter resolvido o problema.
Cross-site scripting e cross-site request forgery ambos exploram o mesmo comportamento subjacente do navegador, a anexação automática de cookies a requisições, mas de formas estruturalmente diferentes exigindo defesas inteiramente diferentes: XSS é outra instância do padrão de limite dado/código, derrotado por codificação de saída; CSRF não exige injeção de script alguma, derrotado por tokens anti-CSRF e pelo atributo de cookie SameSite.
Um firewall impõe política sobre qual tráfego de rede tem permissão de alcançar um sistema de todo, um ponto genuinamente mais cedo no ciclo de vida de um ataque do que toda defesa de nível de aplicação coberta antes, que assumem que o tráfego já chegou; as defesas de nível de rede e de nível de aplicação são complementares, não redundantes, cada uma fechando uma lacuna que a outra estruturalmente não consegue.
Um handshake TLS não é um primitivo criptográfico novo, mas uma composição cuidadosa de quase todo mecanismo que esta disciplina cobriu: troca de chaves Diffie-Hellman, autenticação baseada em certificado, AES num modo autenticado, e uma função de hash dentro de um HMAC ou AEAD, todos sequenciados juntos para resolver, simultaneamente, toda ameaça do STRIDE para o caso de duas partes que nunca se conheceram precisarem se comunicar com segurança.
Part of the Computer Science curriculum.
A tríade CIA, confidencialidade (só leitura autorizada), integridade (só modificação autorizada e detectável) e disponibilidade (o sistema permanece usável por partes autorizadas), é o vocabulário em torno do qual esta disciplina inteira é organizada: essencialmente todo mecanismo coberto depois existe para servir um ou mais desses três objetivos contra algum modelo de ameaça específico e enunciado.
\"Quem é você?\" e \"o que você tem permissão de fazer?\" soam quase como a mesma pergunta, mas são respondidas por mecanismos diferentes, podem falhar independentemente uma da outra, e confundi-las é uma das fontes mais comuns de bugs reais e exploráveis em sistemas de produção.
STRIDE, Spoofing, Tampering, Repudiation, Information disclosure, Denial of service, Elevation of privilege, é um checklist sistemático para modelagem de ameaças que mapeia cinco das suas seis categorias diretamente sobre a tríade CIA mais autenticação e autorização, e introduz um objetivo genuinamente novo, o não repúdio; aplicado a cada componente, ele transforma um vago \"pensar no que pode dar errado\" numa lista de ameaças específicas e individualmente triáveis.
O sigilo perfeito, o texto cifrado revelando zero informação sobre o texto claro, mesmo contra um atacante ilimitado, é alcançado exatamente pelo one-time pad: fazer XOR da mensagem com uma chave verdadeiramente aleatória, do comprimento da mensagem, usada exatamente uma vez; ambas as condições (aleatoriedade verdadeira e uso único) são essenciais, e o seu custo de distribuição de chave é exatamente tão difícil quanto o problema que ele resolve.
Uma cifra de bloco (AES) e um modo de operação são duas peças separadas e escolhidas independentemente de qualquer esquema de criptografia simétrica real: o AES define uma transformação segura, com chave e invertível sobre um único bloco de tamanho fixo, enquanto o modo define como aplicar essa transformação por uma mensagem inteira; uma cifra correta combinada com um modo mal escolhido (ECB) ainda pode falhar catastroficamente.
Uma função de hash criptográfica tem de satisfazer três propriedades de segurança distintas, resistência a pré-imagem (não dá para inverter), resistência a segunda pré-imagem (não dá para forjar uma correspondência a uma entrada fixa) e resistência a colisão (não dá nem para achar duas entradas que correspondam), um contrato adversarial fundamentalmente mais forte do que o requisito de velocidade-e-distribuição das funções de hash de tabela hash; o limite de aniversário torna a resistência a colisão dramaticamente mais difícil.
A criptografia sozinha fornece confidencialidade mas nenhuma garantia de integridade, e um hash simples enviado junto a um texto cifrado também não fornece nenhuma proteção real contra um atacante ativo, já que qualquer um pode recomputar um hash simples sem precisar de nenhum segredo; um MAC fecha essa lacuna exigindo uma chave secreta compartilhada, e a criptografia autenticada (AEAD) agrupa confidencialidade e integridade num único primitivo à prova de erros.
A criptografia de chave pública existe para resolver um problema que a criptografia simétrica não consegue: estabelecer um segredo compartilhado entre duas partes que nunca se conheceram, sobre um canal que um bisbilhoteiro observa por completo; todo esquema que esta disciplina cobre repousa sobre a aritmética modular já provada em matemática discreta, mais um novo fato, o pequeno teorema de Fermat, e a assimetria de mão única da exponenciação modular.
O Diffie-Hellman deixa duas partes que não compartilham nenhum segredo prévio concordarem com um sobre um canal público totalmente observado: cada uma escolhe um expoente privado, troca `g` elevado a esse expoente módulo um primo público, e cada uma combina o valor público da outra com o seu próprio expoente privado para chegar ao segredo compartilhado idêntico `g^(ab) mod p`, cuja segurança se reduz diretamente ao problema do logaritmo discreto.
O RSA gera uma chave pública `(n, e)` e uma chave privada `d` a partir de dois primos secretos `p` e `q`, de forma que a criptografia (`m^e mod n`) e a descriptografia (`c^d mod n`) são inversos prováveis uma da outra, uma consequência algébrica direta de escolher `d` como o inverso de `e` módulo `φ(n)` e aplicar o teorema de Euler; a sua segurança repousa sobre o problema da fatoração de inteiros.
A assinatura RSA roda o mesmo trapdoor usado para criptografia ao contrário: a chave privada produz uma assinatura, e a chave pública a verifica, deixando qualquer um confirmar a autoria sem conseguir forjá-la, uma capacidade que MACs (que exigem um segredo compartilhado) não conseguem oferecer; certificados então amarram uma chave pública a uma identidade via a assinatura de uma CA, numa cadeia de confiança que se reduz a um pequeno conjunto de raízes pré-confiáveis.
Um buffer overflow de pilha e uma injeção SQL são, estruturalmente, o mesmo erro subjacente ocorrendo em duas camadas diferentes de um sistema: entrada não confiável tratada como se só pudesse jamais ser dado inerte, quando um mecanismo a jusante (o ciclo busca-decodifica-executa da CPU; o parser SQL do banco) consegue reinterpretar parte dessa entrada como código ou comandos.
Canários de pilha, memória não executável (W^X/DEP) e ASLR cada um perturba um passo específico do ataque clássico de buffer-overflow-para-execução-de-código; nenhum é individualmente completo, cada um tem um bypass conhecido, que é exatamente por que sistemas endurecidos reais implantam os três juntos como defesas em camadas e complementares, uma postura honesta de \"defesa em profundidade\" em vez de uma alegação de ter resolvido o problema.
Cross-site scripting e cross-site request forgery ambos exploram o mesmo comportamento subjacente do navegador, a anexação automática de cookies a requisições, mas de formas estruturalmente diferentes exigindo defesas inteiramente diferentes: XSS é outra instância do padrão de limite dado/código, derrotado por codificação de saída; CSRF não exige injeção de script alguma, derrotado por tokens anti-CSRF e pelo atributo de cookie SameSite.
Um firewall impõe política sobre qual tráfego de rede tem permissão de alcançar um sistema de todo, um ponto genuinamente mais cedo no ciclo de vida de um ataque do que toda defesa de nível de aplicação coberta antes, que assumem que o tráfego já chegou; as defesas de nível de rede e de nível de aplicação são complementares, não redundantes, cada uma fechando uma lacuna que a outra estruturalmente não consegue.
Um handshake TLS não é um primitivo criptográfico novo, mas uma composição cuidadosa de quase todo mecanismo que esta disciplina cobriu: troca de chaves Diffie-Hellman, autenticação baseada em certificado, AES num modo autenticado, e uma função de hash dentro de um HMAC ou AEAD, todos sequenciados juntos para resolver, simultaneamente, toda ameaça do STRIDE para o caso de duas partes que nunca se conheceram precisarem se comunicar com segurança.