Pular para o conteúdo

Segurança da informação: o mapa

O currículo completo — da tríade CIA ao bloqueio progressivo — com o que a linguagem responde para cada item, e o que ela não responde.

Segurança da informação não é uma biblioteca que se adota: é um conjunto de decisões que atravessam a linguagem, o código, o processo e a operação. Esta seção percorre o currículo inteiro e, para cada conceito, responde três coisas: o que é, como o DataForge o atende, e o que ele não atende — com o motivo.

O mapa#

FrenteO que ela cobreOnde
PrincípiosCIA, autenticação, autorização, responsabilização, não-repúdio, privilégio mínimo, defesa em profundidade, zero trust, seguro por desenho e por padrãoPrincípios
Ameaçasmodelagem de ameaças (STRIDE), superfície de ataque, fronteiras de confiança e de segurança, gestão de risco, políticasAmeaças e risco
A linguagemsegurança de tipos, de memória, limites de índice, ausência segura, dados imutáveis, padrões segurosO que a linguagem garante
A entradavalidação, codificação de saída, serialização e desserialização segurasEntrada e saída
Identidadesenha, hashing, MFA, TOTP, WebAuthn, OAuth, OIDC, SAML, LDAP, JWT, tokens, sessãoAutenticação
Permissãoautorização, RBAC, capacidades, módulos, dependências, sandboxAutorização e capacidades
Ataquesforça bruta, credential stuffing, bloqueio de conta, atrasos progressivos, limite de taxaAtaques a credenciais
Ferramentasdetecção de segredos, linter de segurança, análise estática, verificações em execução, auditoriaAs ferramentas

A tríade CIA, em uma tela#

Todo o resto é meio para estes três fins. Um controle que não serve a nenhum deles é cerimônia.

A perguntaA resposta da linguagem
Confidencialidadequem não deveria ver, não vê?Crypto.cifrar (ChaCha20-Poly1305), Seg.segredo, Seg.redigir, Seg.mascarar_pii
Integridadeo dado é o mesmo que foi gravado?Crypto.hmac, Seg.assinar, Seg.auditoria (cadeia encadeada), a etiqueta do AEAD
Disponibilidadequem deveria usar, consegue?Seg.limitador, Kiln.limite_de_corpo, Seg.json_seguro, o teto da fila do Arcane.Laco
dataforge
adopt Arcane.Crypto as Crypto
adopt Arcane.Seguranca as Seg
adopt Arcane.Bytes as Bytes

// CONFIDENCIALIDADE: o texto cifrado nao revela o conteudo.
// 'cifrar' e 'decifrar' trabalham em Bytes, e nao em texto.
cofre := Crypto.cifrar("saldo: 12345", "uma senha forte")
assert "12345" not in Crypto.hex_encode(cofre)

// INTEGRIDADE: a etiqueta do AEAD vem de graca junto com a cifra.
// Senha errada — ou um byte trocado — e RECUSA, e nao "texto
// ilegivel": e a diferenca entre saber e adivinhar.
assert Bytes.para_texto(Crypto.decifrar(cofre, "uma senha forte")) is "saldo: 12345"

monitor:
    Crypto.decifrar(cofre, "senha errada")
    assert no
handle Error as e:
    out "recusado: a etiqueta nao fecha"

// DISPONIBILIDADE: o limite e o que impede um cliente derrubar todos.
limite := Seg.limitador(100, periodo := 60.0)
assert limite.permitir("cliente-7")

Os quatro que sustentam uma conta#

A perguntaComo se responde aqui
Autenticaçãoquem é você?senha derivada com scrypt, TOTP, token assinado com propósito
Autorizaçãovocê pode fazer isto?RBAC na aplicação, Arcane.Capacidade no módulo, V.exigir_permissao na tela
Responsabilizaçãoquem fez, e quando?Seg.auditoria — uma linha por evento, com o resumo da anterior
Não-repúdiodá para provar que foi você?assinatura com chave que só o autor tem. Um HMAC não dá isso: quem confere também consegue forjar

O que não existe — a lista curta#

Não háPorqueO que fazer
WebAuthn, passkeys, FIDO2exige CBOR, COSE, atestação e um navegador do outro lado — é um protocolo, não uma funçãoum provedor de identidade na frente
OAuth 2.0 / OIDC / SAML / LDAP completossão integrações com sistemas externos, não primitivas. O que existe são as peças locais: Seg.pkce, Seg.estado_de_oauth, Crypto.jwt_verificarAutenticação
Argon2idem Python puro rodaria lento a ponto de exigir parâmetros fracos — pior que o scrypt do hashlib, e não melhorCrypto.hash_password usa scrypt
Assinatura assimétrica (RSA, ECDSA, Ed25519)implementá-las em Python puro é lento e é exatamente onde um erro de implementação vira falha silenciosassl do Python, ou um HSM/KMS
TLS no Kilnele roda sobre o http.server; TLS é do nginx ou do Caddy na frenteKiln em produção

Privacidade não é o mesmo que segurança#

Segurança pergunta quem pode acessar. Privacidade pergunta se esse dado deveria existir. Um sistema pode ser impecável na primeira e ilegal na segunda — e a LGPD cobra a segunda.

PrincípioO que ele obrigaA peça
Minimizaçãonão coletar o que não se usanenhuma ferramenta substitui a decisão; é de desenho
Privacidade por padrãoo estado inicial é o mais restritivoSeg.limpar_html com lista de permitidos, Kiln.cabecalhos_seguros
Mascaramentoo log e o relatório não carregam o dado pessoalSeg.mascarar_pii (CPF, CNPJ, cartão com Luhn, e-mail, telefone)
Descarteapagar de verdade quando o prazo venceCrypto.apagar_seguro, e a política de retenção que ninguém automatiza por você
dataforge
adopt Arcane.Seguranca as Seg

// Um corpo de pedido inteiro indo para o log — o caminho mais
// comum de um vazamento, e o mais inocente.
corpo := """{"cpf": "123.456.789-09", "email": "ana.silva@exemplo.com",
 "cartao": "4111111111111111", "pedido": 1234567890123456}"""

limpo := Seg.mascarar_pii(corpo)

assert "123.456.789-09" not in limpo
assert "ana.silva" not in limpo
assert "4111111111111111" not in limpo

// O numero do pedido NAO passa no Luhn, entao continua legivel:
// sem isso, todo numero de 16 digitos virava cartao e o relatorio
// ficava ilegivel — um falso positivo que faz desligar a mascara.
assert "1234567890123456" in limpo

out limpo

Por onde começar#