◇ OpenCyber Academy
Tecnólogo · Capítulo 9 · Español

Capítulo 9 — Evidencia y medición

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.

Capítulo 9 — Evidencia y medición

Mapa de la lección

Lección 09 publicada. Mapa, ejemplo, EX025.

flowchart TD
  N0["Resultados de aprendizaje"]
  N1["9.1 Tasas, no anécdotas"]
  N2["9.2 Intervalos de confianza"]
  N3["9.3 Tasas base"]
  N4["9.4 Evidencia reproducible"]
  N5["9.4b Comparar dos defensas"]
  N6["9.4c Medir efectos"]
  N7["Síntesis"]
  N0 --> N1 --> N2 --> N3 --> N4 --> N5 --> N6 --> N7
  N7 --> EX["Ejemplo resuelto"]
  EX --> Q["Ejercicio EX025"]

Dibujo lógico

flowchart LR
  N0["Resultados de aprendizaje"]
  N1["9.1 Tasas, no anécdotas"]
  N2["9.2 Intervalos de confianza"]
  N3["9.3 Tasas base"]
  N4["9.4 Evidencia reproducible"]
  N5["9.4b Comparar dos defensas"]
  N6["9.4c Medir efectos"]
  N7["Síntesis"]
  N0 --> N1 --> N2 --> N3 --> N4 --> N5 --> N6 --> N7 --> Q["EX025"]
[Resultados de aprendizaje]
    |
    v
[9.1 Tasas, no anécdotas]
    |
    v
[9.2 Intervalos de confianza]
    |
    v
[9.3 Tasas base]
    |
    v
[9.4 Evidencia reproducible]
    |
    v
[9.4b Comparar dos defensas]
    |
    v
[9.4c Medir efectos]
    |
    v
[Síntesis]
    |
    v
[Ejemplo resuelto] --> [Ejercicio EX025]

Resultados de aprendizaje

Usted podrá (1) medir los resultados de seguridad como tasas sobre ensayos; (2) calcular e interpretar intervalos de confianza; (3) comprender las tasas base y las falsas alarmas; y (4) conservar evidencia reproducible.

9.1 Tasas, no anécdotas

«Probé cinco inyecciones y ninguna funcionó» dice poco. Ejecute muchos ensayos, cuente los éxitos y comunique la tasa con su tamaño de muestra. Mida lo que ocurrió (una llamada a una herramienta, una fuga de datos), no lo que dijo el modelo. Los 120 casos de Jonas para Ask Brightwell siguen esta regla: el éxito se califica a partir de los registros de herramientas, no de lo que decía la respuesta, y el informe da recuentos sobre el número de ensayos. Una respuesta que suena a negativa mientras en realidad se inició una devolución cuenta como un éxito para el atacante.

9.2 Intervalos de confianza

Un intervalo muestra el rango plausible de la tasa real. Tres éxitos en 20 ensayos dan aproximadamente un 5–36 %; 300 en 2000 dan aproximadamente un 13,5–16,6 %. Cero fallos en n ensayos todavía admite hasta aproximadamente 3/n.

"""Lab S: reporting attack-success rates honestly: Wilson intervals,
seed variation and a paired bootstrap. Synthetic trial outcomes only."""
import math, random
def wilson(k, n, z=1.96):
    p = k/n; d = 1 + z*z/n
    c = (p + z*z/(2*n))/d; h = z*math.sqrt(p*(1-p)/n + z*z/(4*n*n))/d
    return c - h, c + h
for k, n in ((3, 20), (30, 200), (300, 2000)):
    lo, hi = wilson(k, n); print(f"successes={k}/{n} rate={k/n:.3f} wilson95=[{lo:.3f}, {hi:.3f}]")
# five seeds of a synthetic defence evaluation: per-seed attack success rate
rates = []
for seed in range(5):
    r = random.Random(seed); rates.append(sum(r.random() < 0.12 for _ in range(200))/200)
m = sum(rates)/5; sd = math.sqrt(sum((x-m)**2 for x in rates)/4)
print("per-seed rates:", " ".join(f"{x:.3f}" for x in rates), f"mean={m:.3f} sd={sd:.3f}")
# paired bootstrap: baseline vs defence on the same 300 synthetic prompts
r = random.Random(42)
base = [r.random() < 0.30 for _ in range(300)]
defn = [b and r.random() < 0.6 for b in base]   # defence blocks ~40% of successes
diffs = []
for _ in range(2000):
    idx = [r.randrange(300) for _ in range(300)]
    diffs.append(sum(base[i] for i in idx)/300 - sum(defn[i] for i in idx)/300)
diffs.sort()
print(f"baseline_asr={sum(base)/300:.3f} defended_asr={sum(defn)/300:.3f} "
      f"reduction_ci95=[{diffs[50]:.3f}, {diffs[1949]:.3f}]")

Salida esperada:

successes=3/20 rate=0.150 wilson95=[0.052, 0.360]
successes=30/200 rate=0.150 wilson95=[0.107, 0.206]
successes=300/2000 rate=0.150 wilson95=[0.135, 0.166]
per-seed rates: 0.110 0.130 0.135 0.105 0.145 mean=0.125 sd=0.017
baseline_asr=0.350 defended_asr=0.190 reduction_ci95=[0.120, 0.203]

Jonas comunica así los resultados de Ask Brightwell: tras el servicio de políticas, cero devoluciones dañinas en 80 casos reservados todavía admiten una tasa real de hasta aproximadamente un 4 %, de modo que escribe la cota, no «riesgo cero». En Ask Brightwell, Jonas calcula estos intervalos con el método de Wilson en su banco de evaluación, de modo que cada informe nocturno muestra un intervalo junto a cada recuento, incluidos los casos con cero éxitos.

9.3 Tasas base

Un detector con un 95 % de detección y un 5 % de falsos positivos suena bien, pero si solo 1 de cada 1000 eventos es malicioso, menos del 2 % de sus alertas son reales. Pregunte siempre con qué frecuencia ocurre el evento dañino.

"""Lab B: base rates and alarm precision (Bayes' rule).
A detector for malicious prompts with given true- and false-positive rates
is applied to traffic with different shares of malicious prompts."""
for tpr, fpr in ((0.95, 0.05), (0.95, 0.01), (0.80, 0.001)):
    for prev in (0.10, 0.01, 0.001):
        tp = tpr * prev; fp = fpr * (1 - prev)
        prec = tp / (tp + fp)
        per_10k = round(10000 * (tp + fp))
        print(f"tpr={tpr:.2f} fpr={fpr:.3f} prevalence={prev:.3f} precision={prec:.3f} alerts_per_10k={per_10k}")

Salida esperada:

tpr=0.95 fpr=0.050 prevalence=0.100 precision=0.679 alerts_per_10k=1400
tpr=0.95 fpr=0.050 prevalence=0.010 precision=0.161 alerts_per_10k=590
tpr=0.95 fpr=0.050 prevalence=0.001 precision=0.019 alerts_per_10k=509
tpr=0.95 fpr=0.010 prevalence=0.100 precision=0.913 alerts_per_10k=1040
tpr=0.95 fpr=0.010 prevalence=0.010 precision=0.490 alerts_per_10k=194
tpr=0.95 fpr=0.010 prevalence=0.001 precision=0.087 alerts_per_10k=109
tpr=0.80 fpr=0.001 prevalence=0.100 precision=0.989 alerts_per_10k=809
tpr=0.80 fpr=0.001 prevalence=0.010 precision=0.890 alerts_per_10k=90
tpr=0.80 fpr=0.001 prevalence=0.001 precision=0.445 alerts_per_10k=18

ReturnGuard muestra el mismo efecto a menor escala. El fraude supone aproximadamente el 1 % de las devoluciones, así que incluso un modelo que detecta la mayor parte del fraude señala a muchos más clientes honestos que estafadores con una tasa de falsos positivos del 5 %. La recomendación de Jonas de una revisión humana antes de cualquier rechazo se deriva de esa aritmética, no de la desconfianza hacia el modelo.

9.4 Evidencia reproducible

Registre las versiones (modelo, prompt, código, datos), las semillas, los conjuntos de pruebas y las fechas. Guarde los scripts con los resultados para que otras personas puedan volver a ejecutarlos. El informe nocturno del banco de evaluación de Ask Brightwell registra al principio de cada ejecución la versión del modelo del proveedor, la versión y el hash del prompt, la compilación del índice, la versión del conjunto de pruebas y la fecha. Cuando un cambio posterior del prompt hizo aumentar las propuestas dañinas, esos campos mostraron exactamente qué cambio deshacer, y cualquiera pudo repetir la comparación a partir de los scripts guardados. Sin esos campos, la regresión se habría rastreado a base de conjeturas.

9.4b Comparar dos defensas

Para comparar defensas de forma justa, ejecute ambas sobre el mismo conjunto de pruebas, con las mismas versiones del modelo y del prompt, y comunique cada tasa con su intervalo. Si los intervalos se solapan mucho, la diferencia puede ser ruido; añada más ensayos antes de afirmar que una es mejor. Mida también el coste para los usuarios normales, como las peticiones bloqueadas por error, porque una defensa que lo bloquea todo obtiene una puntuación perfecta frente a los ataques. Jonas lo aplicó cuando un proveedor ofreció un cortafuegos de prompts: lo ejecutó sobre su conjunto reservado y midió tanto lo que bloqueaba como las preguntas normales que detenía por error.

9.4c Medir efectos

Decida de antemano qué cuenta como éxito para el atacante. En un agente suele ser una acción —una llamada a una herramienta con parámetros dañinos— más que unas palabras en una respuesta. Escriba el calificador como código que inspecciona los registros de herramientas, para que los resultados no dependan del juicio de una persona sobre un texto. En Ask Brightwell, el éxito del atacante es una llamada start_return para un pedido sobre el que no preguntó el usuario que ha iniciado sesión. El calificador lee el registro de herramientas en busca de esas llamadas; no mira el texto de la respuesta, de modo que una respuesta que suena inofensiva mientras inicia una devolución sigue contándose como un éxito.

9.5 Ejemplo resuelto (caso sintético de Brightwell)

ReturnGuard señala las devoluciones fraudulentas. Jonas encuentra fraude en aproximadamente el 1 % de las devoluciones; la tasa de falsos positivos del modelo es del 5 %. Con el laboratorio, la precisión es de aproximadamente el 16 %: cinco de cada seis clientes señalados son honestos. Recomienda un umbral del 1 % de falsos positivos (precisión de 0,490 en el laboratorio, de modo que los revisores ven aproximadamente un cliente honesto por cada estafador señalado) y una revisión humana antes de cualquier rechazo. La recomendación no afirma que el modelo sea malo; muestra que un evento raro hace que la mayoría de las alertas sean erróneas con ese umbral. La revisión humana protege también a los clientes honestos de los errores que persisten con el umbral más estricto.

9.6 Errores y límites

Los informes de Jonas evitan los tres: cada tasa de Ask Brightwell se da como un recuento sobre los ensayos, las alertas de ReturnGuard se analizan teniendo presente la tasa de fraude del 1 % y cada ejecución registra versiones y semillas para que las cifras puedan volver a obtenerse. Una cifra sin esto no es una evidencia que nadie pueda comprobar ni usar para actuar. El banco de evaluación impone los tres automáticamente, de modo que ningún paso manual puede saltárselos. Sin semillas registradas, una nueva ejecución podría dar otro resultado y nadie sabría decir por qué.

Ejercicios

Síntesis

La buena evidencia cuenta resultados a lo largo de muchos ensayos, muestra la incertidumbre, respeta las tasas base y puede reproducirse.

Siga estudiando — capítulo 09 de 30

← Capítulo 08 (borrador) · Índice de capítulos del curso · Capítulo 10 (borrador) →