OpenCyber Academy
Tecnólogo · Capítulo 3 · Português
Código do curso: OCA-077Capítulo 03: OCA-077-C003

Capítulo 3 — Fundamentos de programação

Ensino gratuito e aberto para quem deseja proteger pessoas e tecnologias. Não é preciso criar uma conta para estudar ou consultar as respostas.

Mapa da aula

Aula 03 publicada. Mapa, exemplo, EX007.

flowchart TD
  N0["3.1 Scripts para as operações"]
  N1["Laboratório — Codificação não é cifração"]
  N2["3.2 Ler o laboratório de codificação"]
  N3["3.3 Segredos em scripts"]
  N4["Síntese"]
  N0 --> N1 --> N2 --> N3 --> N4
  N4 --> EX["Exemplo resolvido"]
  EX --> Q["Exercício EX007"]

Desenho lógico

flowchart LR
  N0["3.1 Scripts para as operações"]
  N1["Laboratório — Codificação não é cifração"]
  N2["3.2 Ler o laboratório de codificação"]
  N3["3.3 Segredos em scripts"]
  N4["Síntese"]
  N0 --> N1 --> N2 --> N3 --> N4 --> Q["EX007"]
[3.1 Scripts para as operações]
    |
    v
[Laboratório — Codificação não é cifração]
    |
    v
[3.2 Ler o laboratório de codificação]
    |
    v
[3.3 Segredos em scripts]
    |
    v
[Síntese]
    |
    v
[Exemplo resolvido] --> [Exercício EX007]

Objetivos de aprendizagem

Você vai (1) escrever scripts simples em Python para as operações; (2) distinguir codificação de cifração; (3) tratar segredos em scripts com segurança.

3.1 Scripts para as operações

Os tecnólogos automatizam o trabalho rotineiro com scripts. Os primeiros scripts de Rosa leem exportações em CSV da lista de certificados da prefeitura e imprimem os que expiram em até trinta dias. Ela aprende a usar a biblioteca padrão: csv para ler arquivos, datetime para a aritmética de datas e argparse para as opções de linha de comando. Ela escreve funções pequenas, com nomes claros, e testa cada uma com dados de exemplo antes de executá-las sobre as exportações reais. Owen revisa o código e pede que ela trate as linhas ruins com elegância, já que as exportações dos sistemas mais antigos às vezes contêm datas em branco que, de outra forma, derrubariam o script.

Laboratório — Codificação não é cifração

"""Encoding is not encryption: Base64 and hex are reversible by anyone (synthetic permit record)."""
import base64
REC = b"permit=PK-2291;plate=HRV-447;zone=4"

def main():
    b64 = base64.b64encode(REC).decode()
    print("base64:", b64)
    print("decoded without any key:", base64.b64decode(b64).decode())
    print("hex:", REC.hex()[:32], "...")
    print("length grows by", len(b64) - len(REC), "chars; secrecy added: none")

if __name__ == "__main__":
    main()

Execute com python3 lab_encoding.py. Saída verificada:

base64: cGVybWl0PVBLLTIyOTE7cGxhdGU9SFJWLTQ0Nzt6b25lPTQ=
decoded without any key: permit=PK-2291;plate=HRV-447;zone=4
hex: 7065726d69743d504b2d323239313b70 ...
length grows by 13 chars; secrecy added: none

3.2 Ler o laboratório de codificação

O laboratório codifica em Base64 um registro sintético de licença. A saída parece embaralhada, mas decodificá-la não exige nenhuma chave e imprime exatamente o registro original. A codificação hexadecimal, da mesma forma, apenas muda a representação. O Base64 deixa o texto treze caracteres mais longo e não acrescenta nenhum sigilo. Rosa encontra uma integração da prefeitura que "protegia" os dados das licenças em trânsito codificando-os em Base64 dentro de uma requisição HTTP não cifrada. Ela a relata, e a integração passa para HTTPS com TLS. A lição é simples, mas importante: a codificação serve a formatos de transporte e armazenamento, enquanto a confidencialidade exige cifração com uma chave.

3.3 Segredos em scripts

O script seguinte de Rosa chama uma API interna que exige um token. Sua primeira versão escreve o token diretamente no código, o que Owen rejeita: o código é copiado, compartilhado e versionado em repositórios. Ela move o token para uma variável de ambiente preenchida pelo repositório de segredos da prefeitura e faz o script falhar de forma clara se ele estiver ausente. Ela também evita imprimir tokens nos logs e usa o módulo secrets quando um script precisa gerar um valor aleatório, nunca o módulo random. Esses hábitos se aplicam a todos os scripts que ela escreve depois.

Exemplo resolvido

Rosa escreve um script de expiração de certificados com leitura tolerante, mostra que o Base64 não acrescenta sigilo, faz uma integração com Base64 sobre HTTP passar para TLS e tira um token de API do código.

Caso sintético. O registro de licença e a integração são inventados.

Erros e limites

A ofuscação, como o Base64, leva as pessoas a acreditar que os dados estão protegidos. Variáveis de ambiente são melhores que o código, mas ainda precisam de um repositório de segredos por trás.

Exercícios

Síntese

Scripts operacionais exigem um tratamento de dados limpo, a compreensão clara de que codificação não é cifração e um manuseio disciplinado dos segredos.

Respostas comentadas

EX007. Linhas com datas em branco ou malformadas vindas das exportações antigas, para que o script não falhe.

EX008. Uma integração enviava dados de licenças codificados em Base64 por HTTP não cifrado; ela passou para HTTPS.

EX009. Para uma variável de ambiente preenchida a partir do repositório de segredos, porque o código-fonte é compartilhado e versionado.