Firma ciega

La versión actual de la página aún no ha sido revisada por colaboradores experimentados y puede diferir significativamente de la versión revisada el 14 de septiembre de 2021; las comprobaciones requieren 3 ediciones .

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] .

Descripción

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:

  1. Cero conocimiento . Esta propiedad ayuda al usuario a obtener una firma en un mensaje determinado sin exponer el mensaje al firmante.
  2. Trazabilidad . El firmante no puede rastrear el par firma-mensaje después de que el usuario haya hecho pública la firma en su mensaje.
  3. Imposibilidad . Solo el firmante puede generar una firma válida. Esta propiedad es la más importante y debe cumplirse para todos los esquemas de firma.

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] .

Algoritmos de firma ciega

Firma completamente ciega

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:

  1. Alice encripta el mensaje con la función , recibiendo el mensaje encriptado .
  2. Alice envía un mensaje encriptado a Bob.
  3. Bob ciegamente (porque no sabe lo que hay dentro) firma el mensaje con la función , recibiendo .
  4. Bob envía de vuelta a Alice.
  5. Alice recibe y elimina su encriptación, obteniendo: .

Este protocolo sólo funciona si las funciones de firma y cifrado son conmutativas .

Firma ciega

  1. Bob prepara n documentos, cada uno de los cuales contiene una palabra única (cuanto más n, menos posibilidades tiene Bob de hacer trampa).
  2. Bob enmascara cada documento con un factor de enmascaramiento único y se los envía a Alice.
  3. Alice recibe todos los documentos y selecciona al azar n-1 de ellos.
  4. Alice le pide a Bob que envíe factores de enmascaramiento para los documentos seleccionados.
  5. Bob lo hace.
  6. Alice abre los documentos n-1 y se asegura de que sean correctos.
  7. Alice firma el documento restante y se lo envía a Bob.
  8. Bob ahora tiene un documento firmado por Alice con una palabra única que Alice no conoce.
Protocolo RSA

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.

  1. Alice elige un factor de enmascaramiento aleatorio relativamente primo y lo calcula .
  2. Alice envía un canal abierto a Bob.
  3. Bob calcula usando su clave privada .
  4. Bob envía de vuelta a Alice.
  5. Alice se quita el disfraz original y recibe el mensaje original firmado por Bob de la siguiente manera: .

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 EDS

Supongamos 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:

  1. Alice inicia la interacción con Bob.
  2. Bob envía el valor a Alice .
  3. Alice calcula los valores (w y t son números aleatorios que no superan ), y luego envía el valor a Bob .
  4. Bob calcula un valor tal que y se lo envía a Alice.
  5. Alice calcula una firma , donde y , que es auténtica con respecto al mensaje [8] .
Prueba

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álculo
  1. Necesidad de generar k , 1 < k < q ;
  2. R = ( mod p ) mod q  es la primera parte de la firma;
  3. H = Hash(m) , donde Hash  es la función hash descrita en el estándar GOST R 34.11-94 , m  es el mensaje a firmar;
  4. S = kH + zR mod q , donde z  es la clave privada .
  5. Si S=0, repita las operaciones 1-4.
Comprobación
  1. 0 < R < q o 0 < S < q. Si al menos una de las dos condiciones no se cumple, la firma no es válida. De lo contrario:
  2. R' = ( mod p ) mod q , donde y  es la clave pública ;
  3. Si R = R' , entonces la firma es válida [9] .
Firma ciega basada en STB 1176.2-99

El estándar bielorruso proporciona el siguiente protocolo para generar una firma ciega en el documento M :

  1. Es necesario generar un k aleatorio tal que 1 < k < q y calcular . Estas acciones son realizadas por el firmante. Luego pasa el número R al usuario;
  2. El usuario genera números aleatorios ε y τ tales que 1 < ε, τ < q y luego calcula , y E = E'  - τ mod q ; E  - el primer elemento de la firma - se envía al firmante;
  3. El firmante calcula el segundo elemento de la firma S = (k - xE) mod q y envía S al usuario;
  4. El usuario calcula S' = S + ε mod q .

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] .

Firma colectiva a ciegas

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:

  1. Cada uno de los m usuarios genera un número aleatorio < p , donde j = , p  es un número primo grande. Luego, cada uno de los m usuarios calcula mod p ( k  es una gran potencia prima) y envía este número a todos los demás usuarios de este grupo.
  2. Cada usuario calcula mod p . A continuación, se calcula e = f(R,M) = RH mod q , donde q  es un número primo grande diferente de p , H = Hash(M)  es una función hash. El número e será el primer elemento de la firma colectiva.
  3. mod p  es la parte del usuario. Cada usuario calcula esta cuota y se la proporciona a los demás.
  4. Luego, cada usuario calcula mod p . Este es el segundo elemento de la firma colectiva.
Verificación de la firma ciega colectiva

mod p  es la clave pública compartida. En base a ello, la firma ciega colectiva se verifica de acuerdo con el siguiente algoritmo:

  1. Mod p se calcula .
  2. Calcular e' = f(R,M) = RH mod q
  3. Si e' = e , entonces la firma es válida [9] .

Aplicación

Sistemas bancarios

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] .

Voto secreto

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] .

Vulnerabilidades de firma ciega

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] .

Véase también

Notas

  1. ↑ 1 2 3 Bruce Schneier, Criptografía aplicada. 2ª edición. Protocolos, algoritmos y textos fuente en lenguaje C, editorial Triumph, 2002
  2. Jean Kamenich, Jean-Marc Piveto, Markus Stadler, "Firmas ciegas basadas en el problema del logaritmo discreto", Eurocrypt, páginas 428-432, Springer-Verlag, 1995.
  3. Qalian Chakrabortu, Jean Mehta, "Un esquema de firma ciega estampado basado en un problema de logaritmo discreto de curva elíptica", International Journal of Network Security, Número 14, páginas 316-319, 2012.
  4. Lung-Chang Lin, Ming-Shiang Hang, Chin-Chen Chang "Mejora de la seguridad para el voto electrónico anónimo en la web", Estándares e interfaces de computadora, número 25, páginas 131-139, 2003.
  5. Tatsuaki Okamoto, "Firmas ciegas y parcialmente ciegas eficientes sin predicciones aleatorias", Colección de artículos "Teoría de la criptografía", páginas 80-99, Springer-Verlag, 2006.
  6. Markus Ruckert, "Firma ciega basada en celosías", colección de documentos de la conferencia Asiacrypt, páginas 413-430, Springer-Verlag, 2010.
  7. Daniel Ortiz-Arroyo, Claudia García-Zamora, "Otra mejora del protocolo de votación electrónica de Mu-Varadarajan", Interfaces y estándares informáticos, Número 29, páginas 471-480, 2007.
  8. ↑ 1 2 Moldovyan N.A. Taller sobre criptosistemas de clave pública. - 2007. - 304 págs. — ISBN 5-9775-0024-6 .
  9. ↑ 1 2 3 N.D. moldavo. Algoritmos de mínimo teórico y firma digital. - BVH-Petersburg, 2010. - 304 p. - ISBN 978-5-9775-0585-7 .
  10. Anisimov V.V. Protocolos de las dos agencias Fujioka-Okamoto-Ohta y Sensus . Métodos criptográficos de protección de la información .

Literatura

  • Schneier, B. Criptografía aplicada. 2ª edición. Protocolos, algoritmos y textos fuente en lenguaje C - "Triumph", 2002
  • Klyuzhev A. Votación electrónica, 2003
  • Shangin, V. F. , Sokolov, A. V. Seguridad de la información en redes y sistemas corporativos distribuidos - "DMK", 2002
  • Chaum, D. Firmas ciegas para pagos imposibles de rastrear - Springer-Verlnag, 1998
  • Moldovyan N. A. Taller sobre criptosistemas de clave pública, 2007
  • Moldovyan N. A. Mínimos teóricos y fundamentos de la firma digital, 2010