Resumen

  • El borrador activo del grupo CBOR define serialización general, preferred-plus y determinista. Esta última añade a preferred-plus el orden lexicográfico byte a byte de las codificaciones deterministas de las claves de un mapa; obtiene bytes repetibles sin convertir el mapa en una secuencia con significado de negocio.
  • El determinismo hace falta cuando dos partes reconstruyen por separado la entrada de una firma, un hash, una dirección de contenido o una comparación. Normalmente sobra cuando los bytes protegidos viajan intactos y nunca demuestra que el dato esté completo, vigente o autorizado.

La alerta inicial decía «firma inválida». El equipo de aplicaciones respondió con dos volcados visualmente idénticos. Solo al comparar el hexadecimal apareció la causa: una biblioteca emitía un argumento en una forma legal más larga y conservaba el orden de inserción del mapa; la otra escogía formas mínimas y ordenaba claves. Ambas secuencias eran CBOR válido. No eran la misma secuencia.

Ese tipo de desacuerdo es el centro operativo de draft-ietf-cbor-serialization-08. El texto, fechado el 29 de julio de 2026, sigue siendo un Internet-Draft activo del grupo de trabajo CBOR, en Working Group Last Call, con estado IESG I-D Exists. No es un RFC final ni certifica el comportamiento de ningún producto. Su aportación es asignar nombres claros a tres contratos de serialización para que los protocolos indiquen cuál necesitan y dónde.

CBOR permite que un modelo de datos y su representación binaria no sean idénticos conceptos. Una misma información puede tener varias codificaciones válidas. Esa flexibilidad facilita flujos, equipos restringidos y compatibilidad. El problema nace cuando un sistema posterior usa los bytes como identidad, pero el protocolo solo acordó el valor.

Tres contratos para necesidades diferentes

La serialización general es el valor teórico por omisión cuando un protocolo basado en CBOR guarda silencio. Para cada tipo soportado, el decodificador debe aceptar todas las formas permitidas, incluidas longitudes definidas e indefinidas. El borrador advierte que esa amplitud no se implementa de manera generalizada. Por eso «admite CBOR» no es una matriz de interoperabilidad.

Preferred-plus limita al codificador: argumentos en su forma más corta, flotantes en la representación exacta más breve, longitudes definidas, el tratamiento especificado para NaN y normalización de enteros y bignums. Busca un terreno práctico para la mayoría de protocolos sin ordenar mapas.

La serialización determinista parte de preferred-plus y añade una regla principal. Los elementos del mapa se ordenan según el orden lexicográfico byte a byte de las codificaciones deterministas de sus claves. Si el modelo y las reglas periféricas están bien definidos, dos codificadores independientes pueden llegar a los mismos bytes.

No son niveles de calidad universal. La serialización general conserva opciones necesarias en algunos sistemas: longitudes indefinidas para emisión progresiva, distinción semántica entre entero y bignum o cargas NaN no triviales. Determinismo sacrifica esas variantes para obtener repetibilidad. La elección debe responder a una necesidad verificable.

Tampoco debe confundirse producción con aceptación. La decodificación determinista no exige más que preferred-plus. Un sistema puede emitir una única forma y aceptar un conjunto más amplio. Rechazar cualquier entrada no determinista es otra política y necesita una regla explícita, pruebas de compatibilidad y una razón de seguridad o interoperabilidad.

La pregunta decisiva: ¿viajan los bytes?

Cuando el remitente firma una carga CBOR y envía exactamente esos bytes junto con la firma, el receptor puede verificar lo recibido. No necesita decodificar y recrear la serialización. Las cargas COSE ilustran este patrón. Una firma requiere acuerdo sobre su cadena de entrada, no que cada objeto CBOR del sistema tenga una representación única.

El problema cambia si ambas partes construyen la cadena por su cuenta. La Sig_structure de COSE se arma en el firmante y vuelve a armarse en el verificador. Una anchura diferente, otro tratamiento del flotante o una variación de orden pueden romper la firma aunque el modelo parezca igual. Lo mismo ocurre con claves de caché, direcciones de contenido, deduplicación, manifiestos reproducibles y comparaciones binarias.

Por eso el alcance debe ser local. La exigencia determinista de una Sig_structure no convierte automáticamente en deterministas la carga incluida, la envoltura exterior o todos los objetos futuros. Un documento de protocolo debe señalar el límite exacto donde nace la secuencia compartida.

Dos preguntas descubren muchas averías: ¿qué bytes atraviesan la red sin tocarse? ¿Qué datos se decodifican y vuelven a codificar antes de una operación sensible? Si un proxy, una pasarela o una caché reserializa un objeto, ya no es transparente en el plano que cuenta.

Ordenar claves no ordena el negocio

Un mapa CBOR es desordenado en el modelo genérico. El orden determinista sirve para escoger una presentación binaria repetible. No establece prioridad, secuencia de evaluación ni preferencia de interfaz.

La confusión aparece porque las herramientas muestran una lista. Un lenguaje mantiene la inserción, otra biblioteca conserva el orden recibido y una tabla hash puede devolver otro. Todos pueden representar el mismo mapa. Si una aplicación necesita «primero» y «después», debe usar una matriz, un campo de prioridad o una regla formal.

El ordenamiento tampoco decide claves duplicadas, etiquetas aceptables, campos desconocidos, evolución del esquema o equivalencia. Preferred-plus produce un resultado determinista cuando no hay mapas, pero esa coincidencia no dice si dos etiquetas significan lo mismo o si la ausencia de un campo cambia una autorización.

La igualdad binaria puede ser más estricta que la semántica. Dos representaciones pueden ser equivalentes para el negocio y distintas para un hash. También puede ocurrir lo contrario en la práctica: los mismos bytes pueden contener un dato caducado o insuficiente. Normalización de texto, dominios numéricos, valores por defecto y etiquetas necesitan contrato propio.

Conviene evitar «canónico» sin apellido. El perfil separado de draft-mcnally-deterministic-cbor-17 restringe CBOR más allá del borrador del grupo de trabajo. Sus reglas no se pueden importar por insinuación. Un informe debe nombrar perfil y revisión, no usar una etiqueta amplia que oculta diferencias.

La firma valida una frontera, no toda la realidad

Si dos sistemas reconstruyen los mismos bytes y una firma se valida, existe una prueba útil: un algoritmo concreto y una clave concreta protegieron esa secuencia. La prueba no dice que el esquema incluyera todos los hechos relevantes.

No demuestra que una etiqueta fuera admisible, que la hora siguiera vigente, que el firmante conservara competencia, que no faltara un campo opcional decisivo ni que la política autorizara la acción. Tampoco observa el efecto final. Confundir estos pasos transforma una garantía criptográfica estrecha en poder institucional sin evidencia.

Hay que separar el modelo de información, el modelo CBOR, la secuencia serializada, la verificación criptográfica, la validación semántica, la política local, la autorización, el intento de ejecución y el efecto observado. Cada capa tiene propietario, evidencia y vencimiento.

CDDL describe formas de datos CBOR. El control de serialización tratado en el borrador puede expresar cómo codificar una forma. Sigue sin ser código ejecutado, autorización ni recibo de efecto. Una coincidencia con el esquema no muestra qué versión del analizador corrió, cómo manejó duplicados o qué transacción terminó confirmada.

COSE y CWT son marcos que alojan protocolos de extremo a extremo. Un marco no conoce todas las necesidades de streaming, reconstrucción o negocio. Cuando no impone un conjunto, el borrador recomienda preferred-plus y deja al protocolo incorporador la obligación de concretar. Las opciones por omisión de una biblioteca no pueden ocupar ese lugar: cambian entre versiones y lenguajes.

Probar el decodificador que existe

La obligación amplia de la serialización general y su aplicación irregular crean un hueco operativo. Un proveedor puede declarar «CBOR» mientras su decodificador rechaza longitudes indefinidas; otro puede aceptar anchuras alternativas sin haberlas probado; un tercero puede transformar un entero grande.

La evidencia debe incluir biblioteca, versión, compilación, opciones, modo del codificador, conjunto aceptado por el decodificador, revisión del esquema, valor de entrada, bytes emitidos y resultado posterior. Los vectores dorados deben atravesar implementaciones independientes.

Las pruebas negativas definen el perímetro: una forma general legal ante un receptor general; un argumento no mínimo ante una puerta preferred-plus; mapas creados con distintos órdenes de inserción; límites de entero y bignum; longitudes definidas e indefinidas; anchos de flotante y NaN. Registrar solo «parseado» pierde la mitad del caso: hay que conservar el valor resultante y la decisión que provocó.

Un test del codificador no acredita la amplitud del decodificador. Un test de aceptación no acredita los bytes producidos. Un viaje de ida y vuelta en una sola biblioteca puede ocultar ambos fallos porque repite sus propios supuestos. La interoperabilidad empieza al cruzar productos y caminos de ejecución.

NaN, bignums y streaming no son detalles

Preferred-plus prescribe la representación exacta más corta de los flotantes y un NaN silencioso trivial. Algunas aplicaciones, sin embargo, conservan bits de carga en NaN o distinguen sus variantes. Si esos bits pertenecen al modelo, el protocolo necesita otra serialización y reglas portables.

Algo similar sucede si bignum e entero ordinario son categorías diferentes o si un productor necesita empezar a enviar antes de conocer la longitud total. La serialización general puede ser correcta para esos límites. Lo peligroso no es la excepción, sino una excepción silenciosa decidida por un interruptor de biblioteca.

La especificación inicial mínima favorece el menor contrato compartido que resuelva la coordinación. Determinismo donde se reconstruyen bytes; preferred-plus para intercambios corrientes que admiten sus límites; un perfil general o especial cuando la aplicación lo exige. No hace falta congelar todo el ecosistema para estabilizar una sola entrada de firma.

Menos variación, un canal encubierto menos

Las representaciones alternativas permiten esconder información que desaparece al decodificar. Un componente manipulado puede variar anchuras, segmentar cadenas indefinidas o escoger otras formas legales. Preferred-plus y determinismo eliminan parte de ese alfabeto y hacen visible una divergencia.

No eliminan todas las vías. Se puede filtrar información seleccionando valores permitidos, marcas de tiempo, etiquetas, relleno en otra capa, ritmo o tamaño de tráfico. Una prueba honesta dirá que un productor dio una sola codificación para un corpus congelado; no dirá que el sistema carece de canales encubiertos.

En fronteras sensibles puede ser útil guardar, con límites de privacidad, el digest de los bytes y la forma normalizada. Si una fuente que promete determinismo cambia de digest, investigar versión, opciones e insumo. La anomalía no prueba por sí sola un ataque, pero convierte una libertad invisible en evidencia observable.

El recibo completo

Un recibo de serialización resistente a una actualización nombra protocolo y revisión; conjunto exigido en cada límite; perfil del modelo CBOR; etiquetas y tipos de clave; política de duplicados; versiones y opciones de codificador y decodificador; esquema; entrada; bytes o digest recuperable; entrada criptográfica; procedencia de clave; resultado de firma; validación semántica; política; autorización; intento y efecto.

También identifica dónde los bytes viajan y dónde se recrean. Esa cartografía suele revelar el verdadero defecto: una pasarela reserializa una carga firmada, una caché calcula sobre un objeto analizado o dos servicios aplican valores por omisión distintos.

La responsabilidad debe seguir distribuida. El diseñador del protocolo fija la frontera binaria. Ingeniería demuestra emisión y aceptación. Seguridad acredita parser, clave y criptografía. El dueño de la aplicación define equivalencia y suficiencia. La autoridad local decide. Operaciones confirma el efecto. Un identificador de transacción acotado une los recibos sin convertirlos en una sola afirmación.

La primacía del código en ejecución de Lu Heng exige mostrar qué binario y qué opción actuaron. Sus capas de realidad impiden que unos bytes repetibles hereden la autoridad del esquema o que una firma herede el permiso de actuar. La serialización determinista cumple así una función importante y limitada: dos codificadores independientes pueden obtener la misma secuencia. Nada más debe entrar de contrabando en esa conclusión.

Fuentes