Capítulo 15 — Segurança de TO, IoT e sistemas ciberfísicos: laboratório guiado
Mapa da aula
Aula 15 publicada. Mapa, exemplo, EX043.
flowchart TD
N0["15.1 A pergunta do laboratório"]
N1["15.2 Interpretando"]
N2["15.3 O que um atacante mudaria"]
N3["15.4 Registrando o resultado"]
N4["Síntese"]
N0 --> N1 --> N2 --> N3 --> N4
N4 --> EX["Exemplo resolvido"]
EX --> Q["Exercício EX043"]
Desenho lógico
flowchart LR
N0["15.1 A pergunta do laboratório"]
N1["15.2 Interpretando"]
N2["15.3 O que um atacante mudaria"]
N3["15.4 Registrando o resultado"]
N4["Síntese"]
N0 --> N1 --> N2 --> N3 --> N4 --> Q["EX043"]
[15.1 A pergunta do laboratório]
|
v
[15.2 Interpretando]
|
v
[15.3 O que um atacante mudaria]
|
v
[15.4 Registrando o resultado]
|
v
[Síntese]
|
v
[Exemplo resolvido] --> [Exercício EX043]
Objetivos de aprendizagem
Você vai (1) analisar dados sintéticos de registradores em busca de excursões de temperatura; (2) relacionar o atraso do alarme com a consequência para a segurança dos alimentos; (3) reconhecer como dados falsificados mudariam o resultado; e (4) documentar um resultado de laboratório com entradas e saída.
15.1 A pergunta do laboratório
A antecâmara resfriada da Freezer-2 ficou em 5 °C ou abaixo disso e, se não ficou, por quanto tempo, e o alarme disparou? O laboratório usa dez leituras sintéticas com cinco minutos de intervalo e um alarme que só dispara quando uma excursão dura pelo menos 10 minutos — um atraso que evita alarmes incômodos causados pela abertura de portas.
"""Lab 15: find cold-room temperature excursions in synthetic logger data (minutes, degC)."""
readings = [(0, 2.1), (5, 2.4), (10, 3.0), (15, 5.6), (20, 7.2), (25, 8.4), (30, 6.9), (35, 4.8), (40, 3.9), (45, 2.6)]
LIMIT, ALARM_DELAY = 5.0, 10
start = None
for t, v in readings:
if v > LIMIT and start is None: start = t
if v <= LIMIT and start is not None:
dur = t - start
print(f"excursion {start}-{t} min, duration {dur} min, peak {max(x for s, x in readings if start <= s < t)} C, alarm {'raised' if dur >= ALARM_DELAY else 'not raised'} (delay {ALARM_DELAY} min)")
start = None
Execute com python3 lab_excursion.py. Saída verificada:
excursion 15-35 min, duration 20 min, peak 8.4 C, alarm raised (delay 10 min)
Os dados da antecâmara são o conjunto sintético A, que Priya usou no seu relatório abaixo. O conjunto A tem amostragem de 5 minutos, um limite de 5 °C e um atraso de alarme de 10 minutos, os valores que o registro dela repete.
15.2 Interpretando
A excursão começou aos 15 minutos e terminou aos 35, durando 20 minutos, com pico de 8,4 °C. O alarme disparou porque 20 ≥ 10. A saída também nos diz o limite de resolução: com amostras de cinco minutos, o início verdadeiro pode estar em qualquer ponto entre os minutos 10 e 15. Essa incerteza de cinco minutos importa num registro de segurança dos alimentos: um contrato com cliente que permita excursões de até 20 minutos seria cumprido ou violado dependendo de onde, nessa janela, a excursão de fato começou. O relatório de Priya declara a duração como 20 minutos, com o início incerto em até cinco, e deixa o julgamento contratual com o gerente de qualidade.
15.3 O que um atacante mudaria
Se as leituras dos minutos 15–30 fossem substituídas por valores em torno de 4 °C, o script não reportaria excursão nenhuma — o registro mostraria conformidade enquanto as mercadorias aqueciam. É por isso que o cenário do Capítulo 13 compara os dados dos registradores na nuvem com a própria sonda do CLP no historiador: dois registros independentes são muito mais difíceis de falsificar de forma consistente. O relatório de Priya lista a falta dessa verificação cruzada como limitação: o conjunto sintético A não tem uma sonda do HIST para comparar. Nos dados reais da NCS, a sonda do HIST na antecâmara seria a verificação cruzada: uma leitura de registrador que discorde dela é uma pergunta antes de ser uma excursão.
15.4 Registrando o resultado
Registre o arquivo de entrada (ou o seu hash), a versão do script, os parâmetros de limite e de atraso, e a saída. Outro tecnólogo precisa conseguir reproduzi-lo exatamente. O registro de Priya, citado no exemplo resolvido abaixo, nomeia a excursão, o quanto o seu início é incerto por causa do intervalo de amostragem e a verificação de integridade que não pôde ser feita. Com o hash do arquivo de entrada, o limite de 5 °C e o atraso de 10 minutos registrados, outro tecnólogo pode executá-lo de novo e obter a mesma linha.
Exemplo resolvido (NCS sintética)
Priya escreve: "Laboratório 15 sobre as leituras da antecâmara (conjunto sintético A): uma excursão de 15–35 min, 20 min, pico de 8,4 °C, alarme disparado com atraso de 10 min. Resolução: amostragem de 5 min, então o início é incerto em até 5 min. Verificação de integridade: comparada com a sonda TT-A1 do HIST — indisponível no conjunto sintético; listada como limitação."
Caso sintético — Northgate Cold Storage. Todas as leituras são inventadas.
Erros e limites
O script supõe que as leituras estão ordenadas e espaçadas por igual. Uma excursão ainda em curso na última amostra não é reportada — um defeito que vale a pena corrigir.
Exercícios
- EX043 — Mudando o atraso do alarme. Se
ALARM_DELAY = 25, o que o laboratório imprime? Rubrica: 3 = a mesma excursão, "alarm not raised (delay 25 min)"; 2 = só o estado do alarme; 1 = nenhuma excursão; 0 = nada. - EX044 — O defeito da excursão não terminada. Acrescente
(50, 6.0)às leituras. O que acontece, e como você corrigiria? Rubrica: 3 = a segunda excursão não é impressa; acrescentar uma verificação final depois do laço; 2 = um; 1 = diz que imprime; 0 = nada. - EX045 — Verificação de falsificação. Descreva uma verificação que revelaria leituras substituídas. Rubrica: 3 = comparar com uma sonda independente do CLP/historiador ou um segundo registrador, sinalizar a divergência; 2 = parcial; 1 = vago; 0 = nada.
Síntese
Um laboratório guiado transforma leituras brutas numa afirmação reproduzível e delimitada — e mostra exatamente onde dados falsificados se esconderiam.
Continue estudando — capítulo 15 de 30
← Capítulo 14 · Índice de capítulos do curso · Capítulo 16 →
Siga para a próxima lição escrita.