Saltar al contenido

Acumuladores criptográficos

Una guía de los acumuladores criptográficos centrada en la verificación, que aborda los diseños basados en RSA y hashes, los testigos de pertenencia y no pertenencia, las actualizaciones dinámicas, los usos en cadenas de bloques y los riesgos operativos.

Actualizado

Solo con fines educativos; no constituye asesoramiento de inversión ni de implementación criptográfica. Una prueba de acumulador autentica una afirmación con respecto a un compromiso, no los datos subyacentes, el estado de consenso ni la disponibilidad de los datos.

Respuesta directa

Un acumulador criptográfico establece un compromiso con un conjunto mediante un valor corto y permite que un verificador compruebe con un testigo conciso que un elemento pertenece al conjunto comprometido. Algunos esquemas también demuestran la no pertenencia. El verificador necesita el valor del acumulador, el elemento, el testigo y los parámetros públicos del esquema, pero no todos los demás elementos del conjunto.

Un acumulador es estático si hay que reconstruirlo cuando cambia el conjunto, dinámico si las adiciones o eliminaciones permiten actualizar el acumulador y los testigos de forma eficiente, y universal si admite pruebas tanto de pertenencia como de no pertenencia. Estas denominaciones describen capacidades independientes; un esquema dinámico no es universal por el mero hecho de ser dinámico.

Las cadenas de bloques pueden comprometerse con transacciones, salidas no gastadas, cuentas, validadores o registros de revocación. Un compromiso más pequeño puede reducir el estado que mantienen algunos participantes, pero el sistema todavía debe distribuir los datos subyacentes y los testigos vigentes, autenticar las actualizaciones, gestionar las reorganizaciones de la cadena y definir quién puede modificar el conjunto.

Cómo funciona

  1. Especificar el conjunto con precisión. Hay que definir la codificación canónica de los elementos, el tratamiento de duplicados, las reglas de orden cuando sean pertinentes, la separación de dominios y la versión exacta del compromiso. Una prueba correspondiente a una codificación o raíz de estado no dice nada sobre otra.

  2. Ejecutar la configuración del esquema. Un acumulador basado en hashes puede utilizar únicamente parámetros públicos de hash. Un acumulador RSA emplea un grupo de orden desconocido, normalmente derivado de un módulo RSA N; la seguridad exige que las partes no autorizadas no puedan aprovechar su factorización. Otros esquemas pueden usar emparejamientos, grupos de clases, retículas o parámetros públicos adicionales con supuestos de confianza diferentes.

  3. Representar los elementos en el álgebra. En una construcción RSA simplificada, cada elemento x_i se transforma de manera determinista en un representante primo distinto p_i. Con base g, el acumulador es:

    A = g^(p_1 * p_2 * ... * p_n) mod N

  4. Crear un testigo de pertenencia. Para el elemento representado por p_i, se omite su factor del exponente:

    w_i = g^(product of p_j for all j != i) mod N

  5. Verificar contra el acumulador exacto. El verificador comprueba que las entradas sean canónicas y evalúa:

    w_i^(p_i) mod N = A

    Conforme al supuesto de seguridad del esquema, debería ser inviable producir esta igualdad para un elemento ajeno al conjunto acumulado. La igualdad no demuestra que el elemento sea verdadero o esté autorizado.

  6. Procesar por separado las actualizaciones y la no pertenencia. Los esquemas dinámicos definen cómo las adiciones y eliminaciones modifican A y cómo se actualizan los testigos afectados. Los esquemas universales incorporan un testigo de no pertenencia y un algoritmo de verificación distintos. Las implementaciones deben rechazar los testigos obsoletos y las actualizaciones vinculadas a un estado diferente.

  7. Comparar las estructuras basadas en hashes por sus costes reales. Un árbol de Merkle es un acumulador basado en hashes en sentido amplio: su raíz es corta, mientras que una prueba de pertenencia contiene los hashes hermanos a lo largo de una ruta y, por tanto, crece de forma logarítmica con el número de hojas. Los esquemas de tipo RSA pueden ofrecer testigos individuales de tamaño constante, pero la generación de pruebas, el mantenimiento de testigos, la configuración y el cómputo tienen costes diferentes.

Ejemplos prácticos

  • Tamaño de una prueba de Merkle. Un árbol de Merkle binario equilibrado con 1,048,576 = 2^20 hojas necesita 20 hashes hermanos para una ruta de inclusión. Con hashes de 32 bytes, esto supone 20 * 32 = 640 bytes antes de los datos de la hoja, los bits de posición y la sobrecarga de serialización. La raíz sigue ocupando 32 bytes.
  • Tamaño constante no significa trabajo constante. En la construcción RSA simplificada, A y cada w_i siguen siendo un único elemento del grupo a medida que crece el conjunto. El exponente producto, la generación de representantes primos, las actualizaciones por lotes y la distribución de testigos actualizados pueden seguir requiriendo mucho cómputo o datos auxiliares.
  • Un acumulador de UTXO cambia quién almacena cada cosa. Un nodo de estado compacto puede conservar un acumulador de salidas no gastadas y validar un gasto solo cuando recibe la salida junto con una prueba de pertenencia vigente. Otros participantes todavía deben conservar suficiente estado para generar esas pruebas, y las actualizaciones deben eliminar las salidas gastadas y añadir las recién creadas.
  • La revocación respeta el mismo límite. El titular de una credencial puede demostrar que un identificador sigue incluido en un acumulador de miembros activos, o emplear un diseño universal para demostrar que está ausente de un conjunto de revocación. La prueba autentica el conjunto comprometido por el emisor; no demuestra que este haya aplicado una política de revocación justa o correcta.

Riesgos

  • Usar codificaciones de elementos ambiguas o no canónicas, permitiendo que un mismo elemento lógico se represente de formas distintas.
  • Transformar incorrectamente los elementos en representantes primos o hacerlo sin los controles de colisiones exigidos por el esquema.
  • Confiar en un módulo RSA cuya factorización pueda conocer la parte que realizó la configuración o un atacante.
  • Considerar segura una ceremonia de configuración multipartita sin verificar su transcripción, los supuestos sobre sus participantes y la vinculación de los parámetros.
  • Permitir que un administrador sustituya los parámetros públicos o las versiones del acumulador sin reglas de migración autenticadas.
  • Verificar un testigo contra un valor de acumulador obsoleto, no finalizado o elegido por un atacante.
  • Aplicar una adición, eliminación o actualización de testigo procedente del bloque, bifurcación, época o versión del conjunto equivocados.
  • Suponer que un testigo de pertenencia también demuestra la validez, la propiedad, la autorización o el valor económico del elemento.
  • Suponer que un compromiso corto hace que el conjunto subyacente esté disponible o sea recuperable.
  • Perder los datos o el servicio necesarios para construir testigos vigentes, volviendo inutilizable un estado válido.
  • Omitir la compatibilidad con la no pertenencia mientras una aplicación depende de forma implícita de pruebas de ausencia.
  • Confundir una ruta de Merkle, un testigo RSA, una apertura polinómica y una prueba de validez como si fueran objetos intercambiables.
  • Ignorar los costes de eliminación, el tráfico de actualización de testigos, la latencia de generación de pruebas o las entradas de denegación de servicio.
  • No vincular las pruebas a un protocolo, una cadena, un contrato, una raíz de estado, un dominio y una versión de serialización.
  • Depender de una única implementación sin auditar o de aritmética personalizada sin vectores de prueba independientes.
  • Suponer que la seguridad clásica de RSA, los emparejamientos o el logaritmo discreto seguirá resistiendo a una computadora cuántica criptográficamente relevante.

Errores comunes

  • El acumulador contiene una copia comprimida del conjunto. Es un compromiso vinculante, no un archivo reversible.
  • Todos los acumuladores demuestran la ausencia. La no pertenencia requiere un esquema diseñado y verificado para esa capacidad.
  • Un testigo de tamaño constante implica un coste total constante. La configuración, la generación de pruebas, las actualizaciones, el almacenamiento y la distribución de testigos siguen siendo costes independientes.
  • Sin estado significa que nadie almacena estado. Algunos participantes deben conservar o reconstruir suficientes datos para crear elementos, actualizaciones y testigos.
  • Una prueba válida hace verdadero el elemento comprometido. Solo vincula el elemento con un compromiso autenticado bajo los supuestos especificados.
  • Los árboles de Merkle y los acumuladores RSA tienen el mismo perfil de confianza y rendimiento. Comparten la finalidad de comprometerse con un conjunto, pero utilizan supuestos, tamaños de prueba, procedimientos de actualización y modos de fallo distintos.

Temas relacionados

Fuentes

Navegación

Buscar en la wiki...