← Voltar aos artigos

Paper Files / DevSecOps

Integração entre Desenvolvimento e Segurança de Sistemas: Fundamentos Teóricos e Práticos para Engenharia de Software Seguro (1986)

DevSecOpsPT

A intensificação do uso de sistemas de tempo‑compartilhado, a expansão da ARPANET e a consolidação de sistemas operacionais multiusuário tornaram evidentes, na década de 1970 e meados de 1980, as limitações de abordagens ad hoc de segurança. Defendemos, com base no estado da arte até 1986, que a segurança deve ser integrada desde a especificação, passando pelo projeto e implementação, até a operação, como propriedade intrínseca do sistema. Propomos um arcabouço unificado que combina modelos formais (Bell‑LaPadula para confidencialidade, Biba para integridade, modelos de fluxo de informação em reticulado, não‑interferência e modelos de proteção como matriz de acesso, HRU e capacidades), criptografia consolidada (DES e seus modos; Diffie‑Hellman, RSA e ElGamal para estabelecimento de chaves e assinatura), mecanismos de sistema operacional (monitor de referência, TCB, ACLs e capacidades) e práticas de engenharia de software (lógica de Hoare, invariantes, verificação parcial, controle de versões e auditoria). Demonstramos como especificações de políticas podem ser mapeadas em mecanismos concretos, e como propriedades de segurança podem ser tratadas como invariantes preservados por transformações do programa, com provas informais inspiradas em lógicas de programas. Discutimos vulnerabilidades empiricamente observadas até 1986 — senhas fracas, erros de memória e manipulação de ponteiros em C, condições de corrida e abuso de serviços de rede — e apresentamos controles técnicos respaldados por critérios e normas contemporâneas (TCSEC, FIPS). Exibimos exemplos reprodutíveis em ambientes UNIX (configuração de permissões, umask, desativação de serviços via inetd, process accounting) e técnicas de auditoria estatística elementar inspiradas em propostas pioneiras de monitoramento. Por fim, relacionamos exigências do TCSEC (classes C a A1) com artefatos de desenvolvimento, destacando o papel de especificações formais e de evidências de verificação na elevação do nível de confiança. O texto visa fornecer, de forma rigorosa e historicamente fiel ao ano de 1986, fundamentos teóricos e diretrizes práticas para a integração efetiva entre desenvolvimento e segurança de sistemas, evitando anacronismos tecnológicos e consolidando um caminho viável para a construção de software confiável em ambientes multiusuário e em redes de pacotes.

  1. Introduction

A crescente interconexão de sistemas de tempo‑compartilhado, impulsionada por redes de pacotes como a ARPANET e por ambientes multiusuário (e.g., UNIX), expôs a inadequação de controles ad hoc de segurança. Relatórios fundacionais, como o estudo de planejamento tecnológico de segurança computacional (ANDERSON, 1972) e análises subsequentes de monitoramento e vigilância (ANDERSON, 1980), já evidenciavam que abordagens reativas eram insuficientes para prevenir uso indevido e acessos não autorizados. Em paralelo, princípios de proteção formulados por Saltzer e Schroeder (SALTZER; SCHROEDER, 1975) consolidaram a noção de que a segurança deve ser tratada como propriedade de projeto, não como aditamento tardio.

Sustentamos que requisitos de segurança precisam ser formalizados desde a especificação inicial, conectando políticas a mecanismos concretos sob evidências de correção. Esse entendimento está em consonância com os critérios do Departamento de Defesa dos Estados Unidos, consolidados no TCSEC (DOD, 1985), que enfatizam modelos formais, monitor de referência e evidências de verificação, especialmente para as classes B e A.

Este trabalho apresenta um arcabouço teórico‑prático, à luz do estado da arte até 1986, que integra: (i) modelos formais de segurança (confidencialidade, integridade, não‑interferência e proteção), (ii) criptografia (DES, modos de operação e criptografia de chave pública), (iii) mecanismos de sistema operacional (ACLs, capacidades, TCB), (iv) métodos formais de verificação, e (v) processos de engenharia de software e auditoria operacional. Nossa proposta visa à construção de sistemas nos quais propriedades de segurança sejam invariantes mantidos ao longo do ciclo de vida do software.

  1. Contexto histórico e fundamentos

A trajetória de segurança computacional moderna remonta ao relatório Ware, que estabeleceu, no início da década de 1970, um programa de controle e proteção de sistemas (WARE, 1979). O estudo de Anderson para a Força Aérea sintetizou riscos e traçou linhas mestras para monitores de referência e avaliação de mecanismos (ANDERSON, 1972). Em paralelo, arquiteturas de proteção foram teorizadas e testadas em sistemas como Multics e HYDRA (BELL; LAPADULA, 1976; WULF et al., 1974), enquanto a prática mostrou a relevância de controles operacionais e de software, inclusive contra penetrações deliberadas (LINDE, 1975; KARGER; SCHELL, 1974).

A padronização também avançou: o DES foi publicado como FIPS PUB 46 (NBS, 1977), complementado por modos de operação (FIPS PUB 81) (NBS, 1980); diretrizes de segurança de aplicações e segurança física foram emitidas pelo NBS (FIPS 73; FIPS 31) (NBS, 1974; 1980). Em redes, o modelo IP/TCP foi formalizado (POSTEL, 1980; 1981a; 1981b; 1981c), permitindo comunicação ampla, porém introduzindo novas superfícies de ataque. Pesquisas em protocolos de autenticação e distribuição de chaves surgiram para ambientes distribuídos (NEEDHAM; SCHROEDER, 1978), em sinergia com a emergência de criptografia de chave pública (DIFFIE; HELLMAN, 1976; RIVEST; SHAMIR; ADLEMAN, 1978; ELGAMAL, 1985).

Nesse cenário, princípios de projeto seguro — mínimo privilégio, mediação completa, falha segura, separação de privilégios — e a disciplina de engenharia (SALTZER; SCHROEDER, 1975; PARNAS, 1972) convergiram com métodos formais (HOARE, 1969; DIJKSTRA, 1976; BOYER; MOORE, 1979) para fundamentar a integração entre desenvolvimento e segurança que defendemos.

  1. Modelos formais de segurança

3.1 Fluxo de informação em reticulados e confidencialidade

A formulação de Denning define um reticulado de níveis de segurança e classes de categorias, impondo que fluxos de informação sigam a ordem parcial $,\sqsubseteq,$ (DENNING, 1976). Seja $\mathcal{L} = \langle L, \sqsubseteq \rangle$ um reticulado finito de rótulos de segurança; a política impõe que uma operação de leitura $\text{read}(s,o)$ é segura se $L(o) \sqsubseteq L(s)$, enquanto uma operação de escrita $\text{write}(s,o)$ é segura se $L(s) \sqsubseteq L(o)$. O modelo Bell‑LaPadula (BLP) refina essa intuição em políticas “sem leitura para cima” e “sem escrita para baixo”, visando a confidencialidade em ambientes multinível (BELL; LAPADULA, 1976):

Essas propriedades, dadas as funções $L:S \cup O \rightarrow \mathcal{L}$, excluem fluxos ilegítimos de altos para baixos. Demonstrações de ausência de vazamento podem ser tratadas como invariantes de estados autorizados, fechados por transições seguras.

3.2 Integridade

O modelo de Biba, orientado à integridade, inverte as restrições (BIBA, 1977). Seja $I$ a ordem de integridade; então:

Tais condições preservam a qualidade da informação e a correção de dados críticos.

3.3 Não‑interferência

Goguen e Meseguer formalizaram a não‑interferência, exigindo que ações de domínios de alta segurança não alterem o que é observável por domínios de baixa segurança (GOGUEN; MESEGUER, 1982). Sutherland reforçou a composicionalidade desse princípio (SUTHERLAND, 1986). Seja $H$ o conjunto de ações de alto nível e $L$ o de baixo nível; não‑interferência exige que para quaisquer sequências $h \in H^$ e $l \in L^$, a projeção de observações de $l$ com e sem $h$ seja indistinguível no nível baixo.

3.4 Modelos de proteção: matriz de acesso, HRU e capacidades

A matriz de acesso $M:S \times O \rightarrow 2^R$ modela quais direitos $r \in R$ cada sujeito $s$ possui sobre objeto $o$ (LAMPSON, 1971). O modelo HRU, ao introduzir regras de criação e propagação de direitos, mostrou que o problema geral de confinamento (safety) é indecidível (HARRISON; RUZZO; ULLMAN, 1976), justificando o uso de disciplinas restritivas.

Modelos baseados em capacidades associam direitos a identificadores portados pelo sujeito (DENNIS; VAN HORN, 1966; FABRY, 1974), como explorado em HYDRA (WULF et al., 1974), favorecendo delegação controlada e confinamento. A “confinement problem” de Lampson expôs desafios de impedir que programas transmitam informação indevida por canais encobertos (LAMPSON, 1973).

3.5 Comparação sintética de modelos

Modelo Propriedade foco Estrutura formal Resultado clássico
Denning (reticulado) Fluxo de informação Reticulado $(L,\sqsubseteq)$ Fechamento por junção/meet (DENNING, 1976)
Bell-LaPadula Confidencialidade Níveis e categorias “No read up, no write down” (BELL; LAPADULA, 1976)
Biba Integridade Níveis de integridade “No read down, no write up” (BIBA, 1977)
Goguen-Meseguer Não‑interferência Sistemas de transição Separação de domínios (GOGUEN; MESEGUER, 1982)
HRU Segurança de proteção Matriz + regras Indecidibilidade da safety (HARRISON; RUZZO; ULLMAN, 1976)
Capacidades Delegação/confinamento Tokens de direito Eficiência e delegação controlada (FABRY, 1974; WULF et al., 1974)
  1. Da política ao mecanismo: SO, TCB e monitor de referência

A implementação fiel de políticas requer um conjunto mínimo de mecanismos confiáveis — a Base Computacional Confiável (TCB) — sob a noção de monitor de referência: sempre invocado, pequeno, verificável e impenetrável (ANDERSON, 1972; DOD, 1985). Em sistemas com ACLs, o controle é mediado por verificação de permissões na passagem de fronteira entre modos usuário e núcleo (SALTZER; SCHROEDER, 1975; RITCHIE; THOMPSON, 1974). Em sistemas por capacidades, verificações são reificadas em tokens intransferíveis ou delegáveis sob disciplinas específicas (DENNIS; VAN HORN, 1966; WULF et al., 1974).

Lições de Multics evidenciaram a importância de reduzir a complexidade do TCB, endurecer a mediação completa e adotar auditoria robusta (KARGER; SCHELL, 1974; BELL; LAPADULA, 1976). A virtualização, quando atende aos critérios de Popek‑Goldberg, oferece um invólucro para isolar domínios e simplificar argumentos de confinamento (POPEK; GOLDBERG, 1974). Essas práticas são coerentes com as exigências de classes B2/B3/A1 do TCSEC, que demandam especificações formais do TCB e evidências de verificação (DOD, 1985).

  1. Métodos formais e verificação de propriedades

Adotamos a lógica de Hoare para expressar propriedades como invariantes preservados por programas (HOARE, 1969). Para um programa $P$ e propriedade $\phi$, a tríplice de Hoare ${\phi},P,{\phi}$ expressa preservação de $\phi$ sob a execução de $P$. Para composições sequenciais $P;Q$, vale: $$ \frac{{\phi},P,{\phi} \quad {\phi},Q,{\phi}}{{\phi},P;Q,{\phi}} $$ Por indução estrutural, se cada operação atômica de $P$ preserva $\phi$, então qualquer sequência finita as preserva, desde que não haja interferências não modeladas.

A disciplina de programação de Dijkstra reforça a construção de programas corretos por construção (DIJKSTRA, 1976), e desenvolvimentos iniciais em automatização (BOYER; MOORE, 1979) sugerem a viabilidade de verificação parcial de componentes críticos do TCB. Para concorrência, critérios de correção e ordenação parcial de eventos (LAMPORT, 1977) são relevantes na análise de condições de corrida e de não‑interferência, conectando‑se a políticas como Biba (integridade) sob cenários multiprocessados.

  1. Criptografia e autenticação

6.1 Cifra simétrica e modos de operação

O DES, padronizado pelo NBS, oferece cifra de bloco de 64 bits baseada em estrutura de Feistel (NBS, 1977; FEISTEL, 1973). O uso correto exige modos de operação que evitem padrões e suportem fluxos: ECB, CBC, CFB e OFB (NBS, 1980). Seja $E_k$ a cifra sob chave $k$ e $m$ a mensagem; em modo CBC: $$ c_i = E_k(m_i \oplus c_{i-1}), \quad c_0 = \text{IV} $$ A autenticação de mensagens pode ser realizada com MACs baseados em cifra de bloco (e.g., CBC‑MAC), e famílias universais de hash oferecem base teórica para autenticadores eficientes (CARTER; WEGMAN, 1979).

6.2 Criptografia de chave pública e assinatura

A publicação de Diffie e Hellman inaugurou o paradigma de chave pública (DIFFIE; HELLMAN, 1976). O RSA provê confidencialidade e assinatura sob a suposição de fatoração difícil (RIVEST; SHAMIR; ADLEMAN, 1978): $$ c \equiv m^e \bmod n,\quad m \equiv c^d \bmod n,\quad n=pq $$ ElGamal introduziu um esquema baseado em logaritmos discretos (ELGAMAL, 1985). A segurança da troca de chaves pode ser estabelecida combinando Diffie‑Hellman com autenticação por assinatura; identificações interativas eficientes começam a surgir (FIAT; SHAMIR, 1986).

6.3 Protocolos de autenticação em redes

Em ambientes distribuídos, protocolos com não‑ces e carimbos de tempo mitigam ataques de repetição. O esquema de Needham‑Schroeder com servidor confiável ilustra autenticação com criptografia simétrica e tickets (NEEDHAM; SCHROEDER, 1978). A análise desses protocolos pode ser feita por raciocínio de traços e estados, conectando eventos observáveis a propriedades de segredo e autenticidade na forma de invariantes.

6.4 Senhas, armazenamento e política

Estudos práticos mostraram fragilidades no uso de senhas fracas e na reutilização (MORRIS; THOMPSON, 1979). Recomendamos hashing com sal e iterações no armazenamento de senhas (crypt(3) baseado em DES) e políticas de composição e renovação consistentes com FIPS 73 (NBS, 1980). Exemplo em UNIX:

Ajuste de permissões e política de criação
umask 077

Criação de arquivo confidencial e configuração de dono/grupo
touch /seg/relato.log
chown auditor:seguranca /seg/relato.log
chmod 640 /seg/relato.log
  1. Engenharia de software segura integrada ao ciclo de vida

Propomos um ciclo com quatro eixos integrados:

  1. Especificação formal de políticas: declarar confidencialidade, integridade e não‑interferência como invariantes ($\phi_c,\phi_i,\phi_n$), definindo rótulos, domínios e operações admitidas (DENNING, 1976; GOGUEN; MESEGUER, 1982).

  2. Arquitetura e projeto modular: decompor o sistema em módulos com interfaces estreitas e ocultação de informação (PARNAS, 1972), minimizando o TCB e centralizando a mediação completa (SALTZER; SCHROEDER, 1975).

  3. Implementação disciplinada: em C, adotar verificadores estáticos como lint para prevenir erros de ponteiros/tipos (JOHNSON, 1978) e práticas de tratamento explícito de erros e verificação de limites, evitando funções propensas a abuso (e.g., evitar gets).

  4. Verificação e auditoria: usar lógicas de programas (HOARE, 1969; DIJKSTRA, 1976) para provas parciais de preservação de invariantes nos componentes críticos; estabelecer trilhas de auditoria e análise estatística de anomalias (ANDERSON, 1980).

O controle de configuração com RCS permite rastrear mudanças, associando cada alteração a testes e inspeções específicos de segurança (TICHY, 1985). O vínculo entre artefatos de projeto e propriedades formais é essencial para sustentar evidências exigidas por TCSEC níveis B/A (DOD, 1985).

  1. Vulnerabilidades conhecidas até 1986 e controles

Relatos empíricos e estudos de caso até 1986 destacam categorias recorrentes de falhas (SALTZER; SCHROEDER, 1975; ANDERSON, 1980; MORRIS; THOMPSON, 1979; LINDE, 1975):

Categoria Descrição Controle técnico Referências
Senhas fracas Palavras comuns, previsíveis Hash com sal, política de complexidade e expiração (MORRIS; THOMPSON, 1979; NBS, 1980)
Erros de memória Acesso fora de limites, ponteiros inválidos Verificação estática (lint), checagem de limites, revisões de código (JOHNSON, 1978; KERNIGHAN; RITCHIE, 1978)
Corrida/verificação-uso Janelas entre checagem e uso Mediação completa, atomicidade, minimização de setuid (SALTZER; SCHROEDER, 1975; RITCHIE; THOMPSON, 1974)
Abuso de serviços tftp/rsh não autenticados, trust indevido Desabilitar serviços, configurar /etc/hosts.equiv com parcimônia (POSTEL, 1980; 1981b)
Controle de privilégios ACLs mal configuradas Princípio do menor privilégio, revisão periódica (SALTZER; SCHROEDER, 1975)
Software malicioso Vírus replicantes Políticas de execução controlada e integridade (COHEN, 1984; BIBA, 1977)

Exemplo de endurecimento de serviços via inetd em UNIX (4.3BSD):

/etc/inetd.conf — desabilitar serviços inseguros
comente as linhas desnecessárias
tftp   dgram   udp     wait    root    /usr/etc/tftpd     tftpd -s /tftpboot
shell  stream  tcp     nowait  root    /usr/etc/rshd      rshd
login  stream  tcp     nowait  root    /usr/etc/rlogind   rlogind
telnet  stream  tcp     nowait  root    /usr/etc/telnetd   telnetd
ftp     stream  tcp     nowait  root    /usr/etc/ftpd      ftpd -l

E gestão cuidadosa de confiança em r‑comandos:

Evitar confiança ampla
echo "+ +" >> /root/.rhosts   EXEMPLO DO QUE NÃO FAZER — EVITAR
Preferir ausência de /etc/hosts.equiv ou listas estritas e específicas
  1. Auditoria e monitoramento

A coleta de trilhas de auditoria é basilar. Seja $E={e_1,\dots,e_n}$ o conjunto de eventos; definimos uma função de detecção $$ A: E \to {0,1} $$ em que $1$ sinaliza potencial violação de política. Critérios estatísticos simples (e.g., desvios de médias horárias de logins, tentativas de acesso negadas) podem indicar anomalias (ANDERSON, 1980). Princípios de mediação completa e responsabilidade (accountability) sustentam a utilidade probatória desses registros (SALTZER; SCHROEDER, 1975; WEISSMAN, 1969).

Em UNIX, o process accounting pode ser habilitado para registrar comandos executados:

Habilitar accounting
accton /var/adm/pacct

Consulta simples por usuário
sa -m | sort -nr -k 2 | head

Técnicas de encadeamento de registros com números de sequência e MACs simétricos (e.g., CBC-MAC) podem elevar a resistência a adulterações (CARTER; WEGMAN, 1979; NBS, 1980).

  1. Redes de pacotes: exposição e contenção

A padronização do IP/TCP/UCP/ICMP viabilizou interconexões amplas (POSTEL, 1980; 1981a; 1981b; 1981c; CERF; KAHN, 1974). A inexistência, por padrão, de autenticação de host e integridade de cabeçalhos em redes abertas demanda práticas defensivas:

Embora o termo “firewall” não esteja consolidado, práticas de filtragem e segmentação administrativa já se mostram efetivas na redução de exposição.

  1. Conformidade com TCSEC: mapeamento de evidências

O TCSEC estabelece classes que vão de D (mínima) a A1 (verificação formal) (DOD, 1985):

Nosso arcabouço organiza políticas como invariantes e mapeia mecanismos ao TCB, municiando evidências compatíveis com B2/B3 e sinalizando um caminho para A1 em componentes nucleares.

  1. Estudo ilustrativo: serviço de arquivos multinível em UNIX

Consideremos uma política de confidencialidade de dois níveis $L={\text{Baixo} \sqsubset \text{Alto}}$. Implementamos separação física por diretórios distintos e grupos, com um processo mediador setuid que aplica verificação de rótulos antes de permitir movimentações ascendentes. Invariante central $\phi_c$: “nenhum objeto de Baixo recebe escrita a partir de sujeito com rótulo Alto”.

Grupos e diretórios
groupadd baixo
groupadd alto
mkdir /dados/baixo /dados/alto
chown :baixo /dados/baixo
chown :alto  /dados/alto
chmod 770 /dados/baixo /dados/alto

Essa abordagem, ainda que em um UNIX genérico com DAC, aproxima‑se de uma interpretação de BLP por disciplina organizacional e mecanismos de apoio, alinhando‑se a C2/B1 em conformidade (DOD, 1985).

  1. Discussão: limites, composição e canais encobertos

Mesmo com a disciplina de modelos, canais encobertos e recursos compartilhados desafiam a segurança perfeita (LAMPSON, 1973; KARGER; SCHELL, 1974). Estratégias mitigadoras incluem: redução de compartilhamento, orçamentação de recursos, medições e auditoria direcionada. A composição de políticas (confidencialidade, integridade e não‑interferência) requer cuidado: por exemplo, $,\phi_c \land \phi_i,$ pode restringir excessivamente operações; técnicas de reticulados de segurança e de integridade independentes, com operações monotônicas, ajudam a manter propriedades por construção (DENNING, 1976; BIBA, 1977; GOGUEN; MESEGUER, 1982).

  1. Conclusão

Sistematizamos, com base no conhecimento acumulado até 1986, um arcabouço integrado de desenvolvimento e segurança que conjuga modelos formais, criptografia comprovada, mecanismos de SO e práticas de engenharia, todos apoiados por referências normativas e científicas contemporâneas. A segurança, tratada como invariante de projeto e de implementação, é reforçada por auditoria e por disciplina operacional. A correspondência entre políticas matematicamente definidas e mecanismos auditáveis fornece as evidências exigidas pelas classes superiores do TCSEC. Em suma, a integração proposta oferece um caminho tecnicamente sólido e historicamente consistente para construir sistemas confiáveis em ambientes multiusuário e redes de pacotes, sem recorrer a anacronismos tecnológicos.

References

ANDERSON, J. P. Computer Security Technology Planning Study. Bedford: Air Force Electronic Systems Division, 1972. Disponível em: https://apps.dtic.mil/sti/pdfs/ADA954828.pdf

ANDERSON, J. P. Computer security threat monitoring and surveillance. Fort Washington: James P. Anderson Co., 1980. Disponível em: https://csrc.nist.gov/publications/detail/other/1980/04/15/computer-security-threat-monitoring-and-surveillance/final

BELL, D. E.; LAPADULA, L. J. Secure computer systems: unified exposition and Multics interpretation. Bedford: MITRE, 1976. Disponível em: https://apps.dtic.mil/sti/pdfs/ADA023588.pdf

BIBA, K. J. Integrity considerations for secure computer systems. Bedford: MITRE, 1977. Disponível em: https://apps.dtic.mil/sti/pdfs/ADA039324.pdf

BOYER, R. S.; MOORE, J. S. A computational logic. New York: Academic Press, 1979. Disponível em: https://www.cs.utexas.edu/users/boyer/acl.pdf

CARTER, J. L.; WEGMAN, M. N. Universal classes of hash functions. Journal of Computer and System Sciences, v. 18, n. 2, p. 143–154, 1979. Disponível em: https://doi.org/10.1016/0022-0000(79)90044-8

CERF, V.; KAHN, R. A protocol for packet network intercommunication. IEEE Transactions on Communications, v. 22, n. 5, p. 637–648, 1974. Disponível em: https://ieeexplore.ieee.org/document/1092259

COHEN, F. Computer viruses—Theory and experiments. Computers & Security, v. 6, n. 1, p. 22–35, 1984. Disponível em: https://faculty.ece.ucsb.edu/zheng/ufiles/Cohen.pdf

DENNIS, J. B.; VAN HORN, E. C. Programming semantics for multiprogrammed computations. Communications of the ACM, v. 9, n. 3, p. 143–155, 1966. Disponível em: https://doi.org/10.1145/365230.365257

DENNING, D. E. A lattice model of secure information flow. Communications of the ACM, v. 19, n. 5, p. 236–243, 1976. Disponível em: https://doi.org/10.1145/360051.360056

DENNING, D. E. Cryptography and data security. Reading: Addison‑Wesley, 1982. Disponível em: https://archive.org/details/cryptographydats00denn

DIFFIE, W.; HELLMAN, M. New directions in cryptography. IEEE Transactions on Information Theory, v. 22, n. 6, p. 644–654, 1976. Disponível em: https://ieeexplore.ieee.org/document/1055638

DIJKSTRA, E. W. A discipline of programming. Englewood Cliffs: Prentice‑Hall, 1976. Disponível em: https://archive.org/details/disciplineofprog00dijk

DOD. Trusted computer system evaluation criteria. Washington, DC: U.S. Department of Defense, 1985. Disponível em: https://csrc.nist.gov/publications/detail/dod/5200-28-std/final

ELGAMAL, T. A public key cryptosystem and a signature scheme based on discrete logarithms. IEEE Transactions on Information Theory, v. 31, n. 4, p. 469–472, 1985. Disponível em: https://ieeexplore.ieee.org/document/1057074

FABRY, R. S. Capability‑based addressing. Communications of the ACM, v. 17, n. 7, p. 403–412, 1974. Disponível em: https://doi.org/10.1145/361646.361662

FEISTEL, H. Cryptography and computer privacy. Scientific American, v. 228, n. 5, p. 15–23, 1973. Disponível em: https://www.cs.fsu.edu/~redwood/OffensiveComputerSecurity/lectures/feistel.pdf

FIAT, A.; SHAMIR, A. How to prove yourself: Practical solutions to identification and signature problems. In: Advances in Cryptology — CRYPTO’86. Berlin: Springer, 1986. p. 186–194. Disponível em: https://link.springer.com/chapter/10.1007/3-540-47721-7_12

GOGUEN, J. A.; MESEGUER, J. Security policies and security models. In: Proceedings of the 1982 IEEE Symposium on Security and Privacy. Oakland: IEEE, 1982. p. 11–20. Disponível em: https://ieeexplore.ieee.org/document/1000857

HARRISON, M. A.; RUZZO, W. L.; ULLMAN, J. D. Protection in operating systems. Communications of the ACM, v. 19, n. 8, p. 461–471, 1976. Disponível em: https://doi.org/10.1145/360248.360255

HOARE, C. A. R. An axiomatic basis for computer programming. Communications of the ACM, v. 12, n. 10, p. 576–580, 1969. Disponível em: https://doi.org/10.1145/363235.363259

JOHNSON, S. C. Lint, a C program checker. Murray Hill: Bell Laboratories, 1978. Disponível em: https://www.bell-labs.com/usr/dmr/www/lint.html

KARGER, P. A.; SCHELL, R. R. Multics security evaluation: Vulnerability analysis. In: Proceedings of the 1974 National Computer Conference. AFIPS, 1974. Disponível em: https://multicians.org/security-eval.html

KERNIGHAN, B. W.; RITCHIE, D. M. The C programming language. Englewood Cliffs: Prentice‑Hall, 1978. Disponível em: https://archive.org/details/cprogramminglang00ritc

LAMPSON, B. W. Protection. In: Proceedings of the 5th Princeton Symposium on Information Sciences and Systems. Princeton: Princeton University, 1971. Disponível em: https://bwlampson.site/08-Protection/08-ProtectionAbstract.html

LAMPSON, B. W. A note on the confinement problem. Communications of the ACM, v. 16, n. 10, p. 613–615, 1973. Disponível em: https://doi.org/10.1145/362375.362389

LAMPORT, L. Proving the correctness of multiprocess programs. IEEE Transactions on Software Engineering, v. SE‑3, n. 2, p. 125–143, 1977. Disponível em: https://doi.org/10.1109/TSE.1977.231145

LINDE, R. Operating system penetration. In: Proceedings of the 1975 National Computer Conference. AFIPS, 1975. p. 361–368. Disponível em: https://doi.org/10.1145/1499949.1500068

MERKLE, R. C. Secure communications over insecure channels. Communications of the ACM, v. 21, n. 4, p. 294–299, 1978. Disponível em: https://doi.org/10.1145/359460.359473

MORRIS, R.; THOMPSON, K. Password security: A case history. Communications of the ACM, v. 22, n. 11, p. 594–597, 1979. Disponível em: https://doi.org/10.1145/359168.359172

NATIONAL BUREAU OF STANDARDS. Data Encryption Standard. FIPS PUB 46. Washington, DC: U.S. Department of Commerce, 1977. Disponível em: https://csrc.nist.gov/publications/detail/fips/46/final

NATIONAL BUREAU OF STANDARDS. DES Modes of Operation. FIPS PUB 81. Washington, DC: U.S. Department of Commerce, 1980. Disponível em: https://csrc.nist.gov/publications/detail/fips/81/final

NATIONAL BUREAU OF STANDARDS. Guidelines to ADP Physical Security. FIPS PUB 31. Washington, DC: U.S. Department of Commerce, 1974. Disponível em: https://nvlpubs.nist.gov/nistpubs/Legacy/FIPS/fipspub31.pdf

NATIONAL BUREAU OF STANDARDS. Guidelines for security of computer applications. FIPS PUB 73. Washington, DC: U.S. Department of Commerce, 1980. Disponível em: https://nvlpubs.nist.gov/nistpubs/Legacy/FIPS/fipspub73.pdf

NEEDHAM, R. M.; SCHROEDER, M. D. Using encryption for authentication in large networks of computers. Communications of the ACM, v. 21, n. 12, p. 993–999, 1978. Disponível em: https://doi.org/10.1145/359657.359659

PARNAS, D. L. On the criteria to be used in decomposing systems into modules. Communications of the ACM, v. 15, n. 12, p. 1053–1058, 1972. Disponível em: https://doi.org/10.1145/361598.361623

POPEK, G. J.; GOLDBERG, R. P. Formal requirements for virtualizable third generation architectures. Communications of the ACM, v. 17, n. 7, p. 412–421, 1974. Disponível em: https://doi.org/10.1145/361011.361073

POSTEL, J. RFC 768: User Datagram Protocol. 1980. Disponível em: https://www.rfc-editor.org/rfc/rfc768

POSTEL, J. RFC 791: Internet Protocol. 1981a. Disponível em: https://www.rfc-editor.org/rfc/rfc791

POSTEL, J. RFC 792: Internet Control Message Protocol. 1981b. Disponível em: https://www.rfc-editor.org/rfc/rfc792

POSTEL, J. RFC 793: Transmission Control Protocol. 1981c. Disponível em: https://www.rfc-editor.org/rfc/rfc793

RITCHIE, D. M.; THOMPSON, K. The UNIX time‑sharing system. Bell System Technical Journal, v. 57, n. 6, p. 1905–1929, 1978. Disponível em: https://www.bell-labs.com/usr/dmr/www/bs1206.pdf

RIVEST, R.; SHAMIR, A.; ADLEMAN, L. A method for obtaining digital signatures and public‑key cryptosystems. Communications of the ACM, v. 21, n. 2, p. 120–126, 1978. Disponível em: https://people.csail.mit.edu/rivest/Rsapaper.pdf

SALTZER, J. H.; SCHROEDER, M. D. The protection of information in computer systems. Proceedings of the IEEE, v. 63, n. 9, p. 1278–1308, 1975. Disponível em: https://ieeexplore.ieee.org/document/1451869

SHANNON, C. E. Communication theory of secrecy systems. Bell System Technical Journal, v. 28, n. 4, p. 656–715, 1949. Disponível em: http://netlab.cs.ucla.edu/wiki/files/shannon1949.pdf

SUTHERLAND, D. A model of information. Bedford: MITRE, 1986. Disponível em: https://apps.dtic.mil/sti/pdfs/ADA168627.pdf

WARE, W. H. Security controls for computer systems (The Ware Report). Santa Monica: RAND Corporation, 1979. Disponível em: https://www.rand.org/pubs/reports/R609.html

WEISSMAN, C. The programmer’s viewpoint: Security and privacy in a computer utility. In: Proceedings of the 1969 Fall Joint Computer Conference. AFIPS, 1969. p. 27–32. Disponível em: https://doi.org/10.1145/1478462.1478466

WULF, W. A. et al. HYDRA: The kernel of a multiprocessor operating system. Communications of the ACM, v. 17, n. 6, p. 337–345, 1974. Disponível em: https://doi.org/10.1145/361011.361061

TICHY, W. F. RCS—A system for version control. Software: Practice and Experience, v. 15, n. 7, p. 637–654, 1985. Disponível em: https://dl.acm.org/doi/10.1145/62040.62042