Resumen

  • El RFC 6528 conserva el avance del espacio de secuencia de TCP, pero oculta la relación entre conexiones sumando una función con clave de las direcciones y puertos locales y remotos.
  • El diseño reduce la predicción ciega fuera del camino sin convertirse en autenticación; la rotación de secretos, TIME-WAIT, las filtraciones del NAT y los puertos efímeros siguen dentro del control.

Un número de secuencia inicial cumple dos tareas enfrentadas. Debe avanzar para impedir que una nueva encarnación de la conexión acepte un segmento antiguo. También debe ocultar dónde empezará la conexión siguiente. Un reloj global visible atiende la primera intuición y traiciona la segunda.

El RFC 793 propuso un generador global de 32 bits que avanzaba una unidad aproximadamente cada cuatro microsegundos. El RFC 6528 recuerda que TIME-WAIT y el tiempo de silencio de TCP ya asumen buena parte de la defensa frente a segmentos obsoletos. Algunas pilas derivadas de BSD, sin embargo, usaban ISN crecientes para admitir una reencarnación rápida. El reloj se convirtió en hábito de compatibilidad y superficie de predicción.

El atacante fuera del camino no siempre necesitaba ver la respuesta. Si estimaba el próximo ISN del servidor mediante una conexión anterior, podía falsificar el ACK final del saludo y explotar un servicio que confiara en la dirección origen. Las herramientas históricas de acceso remoto han sido sustituidas en gran parte por SSH, pero la confianza basada en IP aún existe. El defecto del protocolo reforzaba al de la aplicación.

Elegir todos los ISN al azar reduciría la predicción, pero rompería heurísticas que esperan avance monotónico. Guardar el estado de toda conexión cerrada recuperaría seguridad consumiendo memoria. El RFC 6528 elige preservar el progreso dentro de una identidad de conexión y hacer que identidades distintas parezcan no relacionadas.

Un desplazamiento privado para cada conversación

La recomendación es ISN = M + F(localip, localport, remoteip, remoteport, secretkey). M es el temporizador de cuatro microsegundos. F es una función seudoaleatoria del cuádruple y un secreto. El temporizador mantiene el avance; el desplazamiento con clave da un espacio aparente diferente a cada combinación de direcciones y puertos.

La propiedad crítica no es que la función parezca compleja. F no debe poder calcularse desde fuera. De lo contrario, el ISN observado en una conexión ayudaría a predecir otra. El cuádruple no es secreto: la protección reside en la clave y en que la salida no pueda reconstruirse sin ella.

La separación evita guardar el historial de toda conexión muerta. Al reutilizar un cuádruple, M conserva el progreso; al cambiarlo, aparece otro desplazamiento. No es azar añadido a TCP, sino un acuerdo entre continuidad del espacio y opacidad entre conexiones.

El secreto también tiene ciclo de vida

El RFC dice que una clave de 128 bits debería bastar para su modelo y permite aleatoriedad verdadera o un secreto por host. Propone momentos de rotación: arranque, tiempo transcurrido o uso suficiente. Son decisiones operativas, no limpieza gratuita.

Cambiar el secreto cambia el espacio ISN de conexiones reencarnadas. Si el sistema no conserva estado cerrado, puede necesitar un silencio de dos vidas máximas de segmento. Una defensa que ignore TIME-WAIT puede destruir la propiedad temporal que pretendía preservar.

El RFC considera MD5 aceptable para este problema limitado de adivinación fuera del camino y pide valorar funciones más fuertes. Esa conclusión pertenece a su amenaza de 2012. No avala MD5 para autenticación ni describe qué despliegan hoy los sistemas.

Un buen ISN sigue siendo paliativo. Quien observa el inicio conoce el estado de secuencia, y un atacante en el camino ya tiene más poder. El texto señala IPsec y TCP-AO como fronteras criptográficas. También advierte que espacios ISN distintos pueden contar hosts detrás de un NAT y que aleatorizar puertos efímeros dificulta adivinar el cuádruple.

La fuente única es el RFC 6528, publicado en Standards Track en febrero de 2012. Sustituye al RFC 1948 y actualiza el RFC 793. Especifica una mitigación de predicción ciega, no los valores, rotaciones o ataques actuales.