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#
| Frente | O que ela cobre | Onde |
|---|---|---|
| Princípios | CIA, 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ão | Princípios |
| Ameaças | modelagem de ameaças (STRIDE), superfície de ataque, fronteiras de confiança e de segurança, gestão de risco, políticas | Ameaças e risco |
| A linguagem | segurança de tipos, de memória, limites de índice, ausência segura, dados imutáveis, padrões seguros | O que a linguagem garante |
| A entrada | validação, codificação de saída, serialização e desserialização seguras | Entrada e saída |
| Identidade | senha, hashing, MFA, TOTP, WebAuthn, OAuth, OIDC, SAML, LDAP, JWT, tokens, sessão | Autenticação |
| Permissão | autorização, RBAC, capacidades, módulos, dependências, sandbox | Autorização e capacidades |
| Ataques | força bruta, credential stuffing, bloqueio de conta, atrasos progressivos, limite de taxa | Ataques a credenciais |
| Ferramentas | detecção de segredos, linter de segurança, análise estática, verificações em execução, auditoria | As 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 pergunta | A resposta da linguagem | |
|---|---|---|
| Confidencialidade | quem não deveria ver, não vê? | Crypto.cifrar (ChaCha20-Poly1305), Seg.segredo, Seg.redigir, Seg.mascarar_pii |
| Integridade | o dado é o mesmo que foi gravado? | Crypto.hmac, Seg.assinar, Seg.auditoria (cadeia encadeada), a etiqueta do AEAD |
| Disponibilidade | quem deveria usar, consegue? | Seg.limitador, Kiln.limite_de_corpo, Seg.json_seguro, o teto da fila do Arcane.Laco |
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 pergunta | Como se responde aqui | |
|---|---|---|
| Autenticação | quem é você? | senha derivada com scrypt, TOTP, token assinado com propósito |
| Autorização | você pode fazer isto? | RBAC na aplicação, Arcane.Capacidade no módulo, V.exigir_permissao na tela |
| Responsabilização | quem fez, e quando? | Seg.auditoria — uma linha por evento, com o resumo da anterior |
| Não-repúdio | dá 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á | Porque | O que fazer |
|---|---|---|
| WebAuthn, passkeys, FIDO2 | exige CBOR, COSE, atestação e um navegador do outro lado — é um protocolo, não uma função | um provedor de identidade na frente |
| OAuth 2.0 / OIDC / SAML / LDAP completos | sã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_verificar | Autenticação |
| Argon2id | em Python puro rodaria lento a ponto de exigir parâmetros fracos — pior que o scrypt do hashlib, e não melhor | Crypto.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 silenciosa | ssl do Python, ou um HSM/KMS |
| TLS no Kiln | ele roda sobre o http.server; TLS é do nginx ou do Caddy na frente | Kiln 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ípio | O que ele obriga | A peça |
|---|---|---|
| Minimização | não coletar o que não se usa | nenhuma ferramenta substitui a decisão; é de desenho |
| Privacidade por padrão | o estado inicial é o mais restritivo | Seg.limpar_html com lista de permitidos, Kiln.cabecalhos_seguros |
| Mascaramento | o log e o relatório não carregam o dado pessoal | Seg.mascarar_pii (CPF, CNPJ, cartão com Luhn, e-mail, telefone) |
| Descarte | apagar de verdade quando o prazo vence | Crypto.apagar_seguro, e a política de retenção que ninguém automatiza por você |
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 limpoPor onde começar#
Princípios
CIA, privilégio mínimo, defesa em profundidade, zero trust.
Ameaças e risco
STRIDE, superfície de ataque, fronteiras de confiança.
O que a linguagem garante
Tipos, memória, limites, ausência — e o que ela não garante.
Entrada e saída
Validar na entrada, codificar na saída, desserializar com lista.
Autenticação
Senha, scrypt, MFA, TOTP, OAuth, JWT, sessão.
Autorização e capacidades
RBAC, a fronteira de autoridade, dependências.
Ataques a credenciais
Força bruta, credential stuffing, bloqueio progressivo.
As ferramentas
Segredos, linter, análise estática, auditoria.
Garantias por construção
Injeção, XSS, pacotes, TLS — e como relatar uma falha.