OpenCyber Academy
Grado · Capítulo 17 · Español
Código del curso: OCA-115Capítulo 17: OCA-115-C017

Capítulo 17 — Conceptos de criptografía

Aprendizaje gratuito y abierto para quienes desean proteger a las personas y la tecnología. No se necesita una cuenta para estudiar ni consultar las respuestas.

Mapa de la lección

Lección 17 publicada. Mapa, ejemplo, EX033.

flowchart TD
  N0["Resultados de aprendizaje y conexión"]
  N1["17.1 Las herramientas y sus garantías"]
  N2["17.2 Lo que necesitan los sistemas de control"]
  N3["17.3 Las claves son la parte difícil"]
  N4["Síntesis del capítulo"]
  N0 --> N1 --> N2 --> N3 --> N4
  N4 --> EX["Ejemplo resuelto"]
  EX --> Q["Ejercicio EX033"]

Dibujo lógico

flowchart LR
  N0["Resultados de aprendizaje y conexión"]
  N1["17.1 Las herramientas y sus garantías"]
  N2["17.2 Lo que necesitan los sistemas de control"]
  N3["17.3 Las claves son la parte difícil"]
  N4["Síntesis del capítulo"]
  N0 --> N1 --> N2 --> N3 --> N4 --> Q["EX033"]
[Resultados de aprendizaje y conexión]
    |
    v
[17.1 Las herramientas y sus garantías]
    |
    v
[17.2 Lo que necesitan los sistemas de control]
    |
    v
[17.3 Las claves son la parte difícil]
    |
    v
[Síntesis del capítulo]
    |
    v
[Ejemplo resuelto] --> [Ejercicio EX033]

Resultados de aprendizaje y conexión

Después de este capítulo usted podrá (1) explicar qué garantiza y qué no garantiza cada uno de estos elementos: el hash, el cifrado simétrico, los códigos de autenticación de mensajes, el cifrado de clave pública y las firmas digitales; (2) explicar por qué la integridad y la autenticidad, más que el secreto, son las necesidades criptográficas de los sistemas de control; (3) usar HMAC con un número de secuencia para rechazar órdenes alteradas y reproducidas; y (4) hacer que un registro deje evidencia de manipulación con una cadena de hashes y un ancla externa. Se apoya en los capítulos 5 y 8 y prepara el capítulo 24 (controles) y el capítulo 29 (operaciones).

17.1 Las herramientas y sus garantías

Una función hash criptográfica como SHA-256 transforma cualquier entrada en un resumen de tamaño fijo; es inviable encontrar dos entradas con el mismo resumen o recuperar la entrada (FIPS 180-4). Un hash por sí solo no demuestra nada sobre quién produjo los datos: cualquiera puede volver a calcularlo. El cifrado simétrico (p. ej., AES, FIPS 197) proporciona confidencialidad con una clave compartida. Un código de autenticación de mensajes (MAC) como HMAC (RFC 2104; FIPS 198-1) permite a quien tiene la clave compartida verificar que un mensaje lo produjo otro poseedor de la clave y que no se alteró. La criptografía de clave pública (Diffie and Hellman, 1976; Rivest, Shamir and Adleman, 1978) permite las firmas digitales: cualquiera con la clave pública puede verificar y solo quien tiene la clave privada puede firmar, lo que constituye la base del firmware firmado y de los certificados. Protocolos como TLS 1.3 combinan estos elementos para ofrecer canales autenticados y cifrados (RFC 8446).

17.2 Lo que necesitan los sistemas de control

En una orden a un interruptor, el secreto rara vez es lo importante; lo son la autenticidad (procede del centro de control), la integridad (no se alteró) y la frescura (no es una orden antigua reproducida). Un MAC proporciona las dos primeras. La frescura necesita un número de secuencia o una marca de tiempo dentro del mensaje autenticado, y un receptor que rechace todo lo que no sea más reciente que el último valor aceptado. Sin frescura, un atacante que grabó ayer una orden «OPEN» válida puede reproducirla hoy.

El Lab 8 demuestra ambas cosas: el nombre del interruptor alterado no supera el MAC y la secuencia 41 se rechaza una vez que ya se ha aceptado.

17.3 Las claves son la parte difícil

La criptografía traslada el problema de proteger los datos a proteger las claves. Quién genera las claves, dónde se almacenan, cómo se rotan y revocan, y qué ocurre cuando se filtra la clave de un dispositivo de campo: esto es lo que determina la seguridad real. Las claves nunca deben estar incrustadas en código publicado (la clave del Lab 8 es pública a propósito), nunca deben compartirse entre todos los dispositivos y, cuando sea posible, deben residir en hardware. Planificar con antelación también importa: el NIST finalizó sus primeras normas de criptografía poscuántica en 2024 (NIST, 2024), y una infraestructura con vidas útiles de 20 años necesita la capacidad de cambiar de algoritmo («agilidad criptográfica»).

17.4 Ejemplo resuelto y Lab 8 (sintético)

Este caso es sintético. CPN autentica las órdenes a los interruptores con HMAC-SHA-256 sobre un mensaje que contiene un número de secuencia, y mantiene un registro encadenado por hashes de las acciones de los operadores cuya cabeza más reciente se copia cada hora en un servidor separado (el ancla).

# Lab 8 - HMAC message authentication and a hash-chained log (synthetic; DEMO KEY ONLY, offline)
import hmac, hashlib
KEY = b"demo-key-published-in-a-textbook-never-use"
def tag(msg): return hmac.new(KEY, msg, hashlib.sha256).hexdigest()[:16]
cmd = b"seq=41;breaker=F7;op=OPEN"
t = tag(cmd)
print("tag:", t)
print("valid original:", hmac.compare_digest(t, tag(cmd)))
print("valid altered :", hmac.compare_digest(t, tag(b"seq=41;breaker=F2;op=OPEN")))
last_seq = 41
print("replay of seq 41 accepted?", 41 > last_seq)
# hash chain: each entry commits to the previous head
def chain(entries):
    head, heads = "0" * 64, []
    for e in entries:
        head = hashlib.sha256((head + e).encode()).hexdigest(); heads.append(head)
    return heads
log = ["08:00 login ana", "08:05 setpoint PS2 4.1m", "08:09 logout ana"]
good = chain(log)
log[1] = "08:05 setpoint PS2 2.0m"
bad = chain(log)
print("anchored head:", good[-1][:12], "| recomputed after edit:", bad[-1][:12])
print("first differing entry:", next(i for i, (a, b) in enumerate(zip(good, bad)) if a != b))

Salida esperada:

tag: 347e6a26d1844d03
valid original: True
valid altered : False
replay of seq 41 accepted? False
anchored head: c5754d1d1639 | recomputed after edit: 65e0b2a20fac
first differing entry: 1

El nombre del interruptor alterado no supera la verificación; el número de secuencia reproducido se rechaza; el registro editado ya no coincide con la cabeza anclada, y la comparación muestra la primera entrada alterada. Truncar la etiqueta a 64 bits mantiene breve la salida impresa; los sistemas reales usan la etiqueta completa o un truncamiento normalizado. La cadena de hashes detecta la edición solo si el ancla está fuera del alcance de quien edita: alguien que controla tanto el registro como el ancla puede reconstruir toda la cadena.

17.5 Errores comunes y límites

En el Lab 8, un SHA-256 simple de la orden permitiría a cualquiera que la cambie calcular un resumen nuevo. El MAC sin seq= aceptaría la orden OPEN de ayer. El laboratorio usa hmac.compare_digest en lugar de ==. Una sola clave en todas las RTU significa que una clave filtrada compromete la red. Y el cifrado no ayudaría si la propia HMI del centro de control envía órdenes falsificadas.

Ejercicios — capítulo 17

EX033 — Elegir la primitiva. Objetivo: asociar necesidades con herramientas. Entradas: (a) actualizaciones de firmware del fabricante para las bombas de infusión del CVH; (b) órdenes del centro de control de CPN a sus propias RTU; (c) historias clínicas en un portátil perdido; (d) detectar ediciones en un registro de auditoría. Pasos: elija una primitiva para cada caso y justifíquela. Evidencia esperada: cuatro elecciones. Rúbrica: 3 = firmas, MAC con frescura (o un canal autenticado), cifrado simétrico con protección de la clave, cadena de hashes con ancla externa; 2 = una errónea; 1 = dos erróneas; 0 = nada.

EX034 — Romper el ancla. Objetivo: razonar sobre la confianza en el ancla. Entradas: Lab 8. Pasos: explique cómo un administrador con acceso de escritura tanto al servidor de registros como al ancla podría ocultar una edición, y proponga dos cambios de diseño que lo impidan. Evidencia esperada: descripción del ataque y cambios. Rúbrica: 3 = recalcular la cadena y sobrescribir el ancla; cambios: ancla custodiada por otro equipo u otro sistema con almacenamiento de solo anexado, publicación externa periódica o marcas de tiempo firmadas; 2 = un cambio; 1 = solo la descripción; 0 = nada.

Síntesis del capítulo

Cada primitiva garantiza algo concreto: los hashes detectan cambios solo frente a una referencia de confianza, los MAC y las firmas dan autenticidad, los números de secuencia dan frescura y el cifrado da secreto. En los sistemas de control, lo que más importa es la autenticidad, la integridad y la frescura, y la seguridad real depende de la gestión de claves y de mantener las anclas fuera del alcance de un atacante.

Respuestas desarrolladas

EX033. (a) Firmas digitales: cualquiera puede verificar, solo el fabricante puede firmar. (b) MAC con números de secuencia (o un canal con autenticación mutua como TLS, donde los dispositivos lo admitan): autenticidad, integridad y frescura. (c) Cifrado simétrico del disco con la clave protegida por hardware y por la autenticación del usuario. (d) Cadena de hashes con un ancla custodiada externamente (o entradas de registro firmadas).

EX034. Un administrador con acceso al registro y al ancla edita una entrada, recalcula todas las cabezas siguientes y sobrescribe el ancla con la nueva cabeza; la verificación entonces se supera. Prevención: custodiar el ancla en un sistema administrado por otro equipo con almacenamiento de solo anexado; publicar o refrendar periódicamente las cabezas con un servicio de sellado de tiempo de confianza; alertar ante cualquier reescritura del ancla.