La firma ciega ( en inglés blind signature ) es un tipo de firma digital , cuya peculiaridad es que la parte firmante no puede conocer con exactitud el contenido del documento firmado. El concepto de firma ciega fue inventado por David Chaum [1] en 1982, también propuso la primera implementación a través del algoritmo RSA . La seguridad del esquema de firma ciega se basaba en la dificultad de factorizar grandes números compuestos . Desde entonces, se han propuesto una gran cantidad de otros esquemas [2] [3] .
La idea básica de las firmas ciegas es la siguiente:
Al final de este protocolo, la parte B no sabe nada sobre el mensaje t, ni sobre la firma bajo este mensaje.
Este esquema se puede comparar con un sobre en el que se colocan un documento y una hoja de copia. Si firma el sobre, la firma quedará impresa en el documento, y cuando se abra el sobre, el documento ya estará firmado.
El propósito de una firma ciega es evitar que el firmante B vea el mensaje de A que está firmando y la firma correspondiente debajo de ese mensaje. Por lo tanto, el mensaje firmado no se puede asociar más con la parte A.
Un esquema seguro de firma ciega debe satisfacer 3 propiedades, a saber:
Debido a las propiedades de conocimiento cero y no rastreabilidad, el esquema de firma ciega puede ser ampliamente utilizado en aplicaciones donde se necesita confidencialidad, por ejemplo, en sistemas de votación electrónica [4] [5] [6] [7] .
Dada la situación: Bob es notario . Alice necesita que firme el documento sin tener idea de su contenido. Bob solo certifica que el documento está notariado en el momento especificado. Luego actúan de acuerdo con el siguiente algoritmo:
En este esquema , Alice quiere que Bob firme ciegamente el mensaje . Para esto:
Este protocolo sólo funciona si las funciones de firma y cifrado son conmutativas .
La primera implementación de firmas ciegas fue realizada por Chaum utilizando el sistema criptográfico RSA:
Supongamos que inicialmente Bob tiene una clave pública , donde es el módulo y es el exponente público de la clave.
Chaum ideó toda una familia de algoritmos de firma ciega más complejos, denominados colectivamente firmas ciegas inesperadas . Sus esquemas son aún más complicados, pero dan más posibilidades [1] .
Firma ciega basada en Schnorr EDSSupongamos que Alicia quiere firmar un mensaje de Bob de tal manera que, en primer lugar, Bob no pueda familiarizarse con el mensaje en el curso de la firma y, en segundo lugar, para que Bob no pueda posteriormente, al recibir el mensaje y la firma correspondiente, identificar al usuario que inició el protocolo de firma ciega para este mensaje específico (Alice). Este protocolo se implementa de la siguiente manera:
La autenticidad de la firma se prueba de la siguiente manera. Se sigue de y . En este caso, se resuelve el problema del anonimato, ya que cualquier terna del conjunto de tales ternas que formó Bob se puede comparar con la firma de este documento . De hecho, tenemos: y , i.e. con una elección aleatoria equiprobable de términos , y la firma se generó con igual probabilidad a partir de cualquier triple incluido en el conjunto de triples formado por el firmante. También notamos que Bob ni siquiera tiene la oportunidad de probar que en el momento en que se formó la firma de este documento , no estaba familiarizado con él.
Firma ciega basada en GOST R 34.10-94 Opciones
p es primo , 510 ≤ | pag | ≤ 512 (o 1022 ≤ | p | ≤ 1024), donde |p| es la capacidad de la representación binaria del número p.
q es un gran divisor primo de p-1, 255 ≤ | q | ≤ 256 (o 511 ≤ | q | ≤ 512)
α ≠ 1, α < pags , mod p = 1.
CálculoEl estándar bielorruso proporciona el siguiente protocolo para generar una firma ciega en el documento M :
En esta descripción se utilizan los siguientes parámetros: q es el módulo utilizado para los cálculos, simple; a es el elemento padre; x - clave privada; y es la clave pública [9] .
Sean claves públicas propiedad de s usuarios. Que haya un mensaje M que m de ellos quieran firmar. En este caso, todas las firmas se pueden combinar en una, cuya longitud es igual a la longitud de la firma de un usuario y no depende de m . Esto se implementa de acuerdo con las reglas del siguiente 1 protocolo:
mod p es la clave pública compartida. En base a ello, la firma ciega colectiva se verifica de acuerdo con el siguiente algoritmo:
El protocolo de firmas ciegas ha encontrado la aplicación más amplia en el campo del dinero digital . Por ejemplo, para que el depositante no engañe al banco, se puede utilizar el siguiente protocolo: el depositante escribe la misma denominación de billetes en cien documentos con diferentes números y los deposita en forma encriptada en el banco. El banco elige al azar y exige abrir 99 (o n-1) sobres, se asegura de que $10 esté escrito en todas partes y no $1000, luego firma el sobre restante a ciegas, sin ver el número de factura.
Puede proporcionarse una opción más sencilla: el banco tiene su propio par de claves públicas asignadas a cada denominación del billete. Entonces solo se envía el número de billete debajo de la firma, y no es necesario verificar la denominación antes de la firma [1] .
Las firmas ciegas se utilizan para la votación secreta . En el protocolo de Fujioka, Okamoto y Ota , el votante prepara una papeleta con su elección, la cifra con una clave secreta y la enmascara. Luego, el votante firma la boleta y la envía al validador. El validador verifica que la firma pertenece a un votante registrado que aún no ha votado.
Si la boleta es válida, el validador firma la boleta y se la devuelve al votante. El votante se quita el disfraz, revelando así la boleta cifrada firmada por el validador. A continuación, el votante envía la boleta firmada y encriptada así obtenida al mostrador, que verifica la firma en la boleta encriptada.
Si la boleta es válida, el escrutador la coloca en una lista que se publicará después de la votación completa. Después de que se publica la lista, los votantes verifican que sus boletas estén en la lista y envían al enumerador las claves de descifrado necesarias para abrir sus boletas. El cajero utiliza estas claves para descifrar las papeletas y suma el voto al total. Después de la elección, el cajero emite claves de descifrado junto con boletas cifradas para que los votantes puedan verificar la elección de forma independiente [10] .
El algoritmo RSA puede ser objeto de un ataque, gracias al cual es posible descifrar un mensaje previamente firmado a ciegas, haciéndolo pasar por un mensaje que aún no ha sido firmado. Partiendo del hecho de que el proceso de firma es equivalente al descifrado por parte del firmante (utilizando su clave privada), un atacante puede firmar una versión ya firmada a ciegas del mensaje cifrado con la clave pública del firmante, es decir, firmar el mensaje .
donde está la versión cifrada del mensaje. Una vez que se firma el mensaje, el texto sin formato se recupera fácilmente:
donde es la función de Euler . Ahora el mensaje es fácil de recibir.
El ataque funciona porque en este esquema, el firmante firma directamente el propio mensaje. Por el contrario, en los esquemas de firma convencionales, el firmante normalmente firmará, por ejemplo, una función hash criptográfica . Por lo tanto, debido a esta propiedad multiplicativa de RSA , nunca se debe usar la misma clave para el cifrado y la firma ciega [8] .