Resumen

  • RFC 3454 fijó el orden mapear, normalizar, prohibir y comprobar bidi, pero cada protocolo debía definir un perfil completo.
  • Una salida igual solo probaba igualdad bajo ese perfil y versión Unicode; no ortografía universal, apariencia, intención, control de cuenta, autorización ni identidad humana.

Comparar era un problema anterior a identificar

Unicode permitió transportar mucho más que ASCII, pero una misma apariencia podía provenir de secuencias distintas, mayúsculas, caracteres de compatibilidad o marcas invisibles. RFC 3454, publicado en diciembre de 2002, creó stringprep para preparar cadenas antes de almacenarlas o compararlas.

Su promesa fue prudente: aumentar la probabilidad de que dos personas que creían escribir lo mismo obtuvieran una salida idéntica carácter por carácter. No pretendió resolver todas las variantes ortográficas del mundo. El texto, el registro de RFC Editor, el Datatracker, el historial, las referencias, las citas y las erratas documentan la norma, no la intención del usuario ni el dominio de la cuenta.

El perfil era la política efectiva

Stringprep no funcionaba solo. El protocolo usuario debía fijar aplicabilidad, repertorio, tablas de mapeo, normalización, salidas prohibidas, prueba bidireccional y restricciones añadidas. Dos perfiles podían tratar de forma distinta la misma entrada sin incumplir el marco.

El mapeo podía eliminar, sustituir o expandir caracteres, y no volvía a examinar lo recién producido en esa fase. Si el perfil normalizaba, tenía que usar NFKC, documentada por el Anexo Unicode 15. La convergencia facilitaba comparación, pero no aseguraba apariencia idéntica en toda fuente ni significado equivalente entre lenguas.

El orden también era evidencia

Mapear, normalizar, prohibir y comprobar bidi debía ocurrir exactamente así. Cambiar el orden cambiaba potencialmente la salida. La etapa de prohibición devolvía cadena o error, nunca ambas. Controles, puntos privados, no caracteres, sustitutos y etiquetas podían quedar excluidos. Las reglas bidi estabilizaban cadenas con escritura derecha-a-izquierda; no autenticaban a quien tecleaba.

El Informe Unicode 36 amplió después el análisis de confusables visuales. Normalizar correctamente no elimina todos los parecidos, y que dos secuencias terminen iguales no demuestra un dueño común.

La versión formaba parte del resultado

RFC 3454 ancló sus tablas a Unicode 3.2 y negó que se aplicaran automáticamente a versiones posteriores. Eso hizo reproducible la operación, pero volvió incompleta cualquier afirmación de “cadena válida” que omitiera perfil y versión.

Los puntos aún no asignados mostraban la tensión. No podían aparecer en cadenas almacenadas, pues una asignación futura podía alterar sus propiedades; las consultas podían tratarlos con más tolerancia para interoperar entre versiones. Una entrada podía fallar al crear y pasar al buscar. El tipo de operación era parte del juicio.

Guardar solo la salida final borraba entrada, tablas, transformaciones y diferencia entre almacenamiento y consulta. Tras una actualización ya no sería posible distinguir un cambio del usuario de un cambio de software.

Nameprep mostró el valor y el coste

RFC 3491 convirtió Nameprep en perfil del IDNA original y RFC 3490 lo incorporó al flujo de nombres. RFC 4690 revisó problemas posteriores; el vocabulario IDNA2008 de RFC 5890 abandonó stringprep.

La comparación no dejó de ser necesaria. El marco atado a una versión envejeció. RFC 6885 formuló el problema PRECIS, RFC 7564 sustituyó RFC 3454 y RFC 8264 reemplazó el primer PRECIS. Esa sucesión prueba reparación, no un cambio instantáneo de todos los identificadores ya almacenados.

La disciplina de capas de realidad de Heng Lu separa entrada, perfil, tablas, etapas, salida o error, comparación, vínculo de cuenta y autorización. La primacía del código en ejecución deja que el programa pruebe su cálculo, no que nombre al propietario. La especificación inicial mínima explica por qué identidad y poder quedaron en el protocolo consumidor. Es una lectura editorial posterior.

RFC 3454 hizo fuerte la normalización dentro de una frontera explícita. El error histórico comienza cuando una comparación determinista se convierte en identidad.

Fuentes