Capítulo 15 — Seguridad de TO, IoT y sistemas ciberfísicos: laboratorio guiado
Mapa de la lección
Lección 15 publicada. Mapa, ejemplo, EX043.
flowchart TD
N0["Resultados de aprendizaje"]
N1["15.1 La pregunta del laboratorio"]
N2["15.2 Interpretación"]
N3["15.3 Qué cambiaría un atacante"]
N4["15.4 Registrar el resultado"]
N5["Síntesis del capítulo"]
N0 --> N1 --> N2 --> N3 --> N4 --> N5
N5 --> EX["Ejemplo resuelto"]
EX --> Q["Ejercicio EX043"]
Dibujo lógico
flowchart LR
N0["Resultados de aprendizaje"]
N1["15.1 La pregunta del laboratorio"]
N2["15.2 Interpretación"]
N3["15.3 Qué cambiaría un atacante"]
N4["15.4 Registrar el resultado"]
N5["Síntesis del capítulo"]
N0 --> N1 --> N2 --> N3 --> N4 --> N5 --> Q["EX043"]
[Resultados de aprendizaje]
|
v
[15.1 La pregunta del laboratorio]
|
v
[15.2 Interpretación]
|
v
[15.3 Qué cambiaría un atacante]
|
v
[15.4 Registrar el resultado]
|
v
[Síntesis del capítulo]
|
v
[Ejemplo resuelto] --> [Ejercicio EX043]
Resultados de aprendizaje
Usted será capaz de (1) analizar datos sintéticos de registradores en busca de desviaciones de temperatura; (2) relacionar el retardo de la alarma con la consecuencia para la seguridad alimentaria; (3) reconocer cómo cambiarían el resultado unos datos falsificados; y (4) documentar el resultado de un laboratorio con sus entradas y su salida.
15.1 La pregunta del laboratorio
¿Se mantuvo la antecámara refrigerada del Congelador 2 a 5 °C o menos y, si no, durante cuánto tiempo y saltó la alarma? El laboratorio usa diez lecturas sintéticas tomadas cada cinco minutos y una alarma que solo salta cuando una desviación dura al menos 10 minutos, un retardo que evita las alarmas molestas por la apertura de puertas.
"""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
Ejecútelo con python3 lab_excursion.py. Salida verificada:
excursion 15-35 min, duration 20 min, peak 8.4 C, alarm raised (delay 10 min)
Los datos de la antecámara son el conjunto sintético A, que Priya usó en su informe más abajo. El conjunto A tiene un muestreo de 5 minutos, un límite de 5 °C y un retardo de alarma de 10 minutos, los valores que repite su registro.
15.2 Interpretación
La desviación empezó en el minuto 15 y terminó en el 35, duró 20 minutos y alcanzó un máximo de 8,4 °C. La alarma saltó porque 20 ≥ 10. La salida también nos indica el límite de resolución: con muestras cada cinco minutos, el inicio real podría estar en cualquier punto entre los minutos 10 y 15. Esa incertidumbre de cinco minutos importa en un registro de seguridad alimentaria: un contrato con un cliente que admita desviaciones de hasta 20 minutos se cumpliría o se incumpliría según el punto de esa ventana en que la desviación empezara realmente. El informe de Priya indica una duración de 20 minutos, con un inicio incierto de hasta cinco, y deja el juicio contractual al responsable de calidad.
15.3 Qué cambiaría un atacante
Si las lecturas de los minutos 15–30 se sustituyeran por valores en torno a 4 °C, el script no informaría de ninguna desviación: el registro mostraría cumplimiento mientras la mercancía se calentaba. Por eso el escenario del capítulo 13 compara los datos de los registradores en la nube con la sonda propia del PLC en el historiador: dos registros independientes son mucho más difíciles de falsificar de forma coherente. El informe de Priya recoge como limitación la falta de esa comprobación cruzada: el conjunto sintético A no tiene una sonda de HIST con la que comparar. En los datos reales de NCS, la sonda de HIST en la antecámara sería la comprobación cruzada: una lectura del registrador que discrepe de ella es una pregunta antes que una desviación.
15.4 Registrar el resultado
Registre el archivo de entrada (o su hash), la versión del script, los parámetros de límite y retardo, y la salida. Otro tecnólogo debe poder reproducirlo exactamente. El registro de Priya, citado en el ejemplo resuelto de abajo, indica la desviación, cuánta incertidumbre tiene su inicio por el intervalo de muestreo y la comprobación de integridad que no pudo hacerse. Con el hash del archivo de entrada y el límite de 5 °C y el retardo de 10 minutos registrados, otro tecnólogo puede volver a ejecutarlo y obtener la misma línea.
Ejemplo resuelto (NCS sintética)
Priya escribe: «Laboratorio 15 sobre las lecturas de la antecámara (conjunto sintético A): una desviación de 15 a 35 min, 20 min, máximo de 8,4 °C, alarma activada con retardo de 10 min. Resolución: muestreo de 5 min, por lo que el inicio es incierto hasta 5 min. Comprobación de integridad: comparación con la sonda TT-A1 de HIST, no disponible en el conjunto sintético; recogida como limitación».
Caso sintético — Northgate Cold Storage. Todas las lecturas son inventadas.
Errores y límites
El script supone que las lecturas están ordenadas y espaciadas por igual. Una desviación que sigue en curso en la última muestra no se notifica: un error que merece la pena corregir.
Ejercicios — capítulo 15
- EX043 — Cambiar el retardo de la alarma. Si
ALARM_DELAY = 25, ¿qué imprime el laboratorio? Rúbrica: 3 = la misma desviación,alarm not raised (delay 25 min); 2 = solo el estado de la alarma; 1 = ninguna desviación; 0 = nada. - EX044 — El error de la desviación sin terminar. Añada
(50, 6.0)a las lecturas. ¿Qué ocurre y cómo lo corregiría? Rúbrica: 3 = la segunda desviación no se imprime; añadir una comprobación final tras el bucle; 2 = una de las dos; 1 = dice que se imprime; 0 = nada. - EX045 — Comprobación de falsificación. Describa una comprobación que revelaría lecturas sustituidas. Rúbrica: 3 = comparar con una sonda independiente del PLC o del historiador o con un segundo registrador, y señalar la discrepancia; 2 = parcial; 1 = vago; 0 = nada.
Síntesis del capítulo
Un laboratorio guiado convierte lecturas en bruto en una afirmación reproducible y acotada, y muestra exactamente dónde se esconderían los datos falsificados.
Siga estudiando — capítulo 15 de 30
← Capítulo 14 (borrador) · Índice de capítulos del curso · Capítulo 16 (borrador) →