En criptografía , una firma de anillo es un tipo de firma digital que puede realizar cualquier miembro de un conjunto de usuarios que tengan claves . Por lo tanto, un mensaje firmado con una firma de anillo está respaldado por alguien de un grupo particular de personas. Una de las propiedades de seguridad de una firma en anillo es que debería ser computacionalmente inviable determinar cuál de las claves de los miembros del conjunto se utilizó para producir la firma. Las firmas en anillo son similares a las firmas grupales, pero difieren en dos aspectos clave: primero, no hay forma de revocar el anonimato de una firma individual y, segundo, cualquier conjunto de usuarios se puede usar como conjunto de firmas sin configuración adicional.
Las firmas en anillo fueron inventadas por Ron Rivest , Adi Shamir y Yael Tauman Kalai , y se introdujeron en ASIACRYPT en 2001. [1] El nombre, firma en anillo , proviene de la estructura anular del algoritmo de firma .
Definición
Supongamos que un conjunto de entidades tiene pares de claves pública / privada, ( P 1 , S 1 ), ( P 2 , S 2 ), ..., ( P n , S n ). La parte i puede calcular una firma de anillo σ en un mensaje m , en la entrada ( m , S i , P 1 , ..., P n ). Cualquiera puede comprobar la validez de una firma de anillo dado σ, my las claves públicas implicadas, P 1 , ..., P n . Si una firma de anillo se calcula correctamente, debe pasar la verificación. Por otro lado, debería ser difícil para cualquiera crear una firma de anillo válida en cualquier mensaje para cualquier conjunto sin conocer ninguna de las claves privadas de ese conjunto. [2]
Aplicaciones y modificaciones
En el artículo original, Rivest, Shamir y Tauman describieron las firmas de anillos como una forma de filtrar un secreto. Por ejemplo, una firma de anillo podría usarse para proporcionar una firma anónima de "un funcionario de alto rango de la Casa Blanca ", sin revelar qué funcionario firmó el mensaje. Las firmas de anillo son adecuadas para esta aplicación porque el anonimato de una firma de anillo no se puede revocar y porque el grupo de una firma de anillo se puede improvisar.
Otra aplicación, también descrita en el documento original, es para firmas negables . Aquí, el remitente y el destinatario de un mensaje forman un grupo para la firma del anillo, luego la firma es válida para el destinatario, pero nadie más no estará seguro de si el destinatario o el remitente fue el firmante real. Por lo tanto, dicha firma es convincente, pero no se puede transferir más allá de su destinatario previsto.
Hubo varios trabajos, introduciendo nuevas funcionalidades y basados en diferentes supuestos:
- Firmas de anillo de umbral
- [3] A diferencia de la firma de umbral estándar " t -out-of- n " , donde t de n usuarios deberían colaborar para descifrar un mensaje, esta variante de una firma en anillo requiere que t usuarios cooperen en el protocolo de firma . Es decir, t partes ( i 1 , i 2 , ..., i t ) pueden calcular unafirma de anillo( t , n ), σ, en un mensaje, m , en la entrada ( m , S i 1 , S i 2 , ..., S i t , P 1 , ..., P n ).
- Firmas de anillo enlazables
- [4] La propiedad de enlazabilidad permite determinar si dos firmas cualesquiera han sido producidas por el mismo miembro (bajo la misma clave privada). No obstante, se conserva la identidad del firmante. Una de las posibles aplicaciones puede ser un sistema de efectivo electrónico fuera de línea .
- Firma de anillo rastreable
- [5] Además del esquema anterior se revela la clave pública del firmante (si emite más de una firma bajo la misma clave privada). Se puede implementar un sistema de votación electrónica utilizando este protocolo.
Eficiencia
La mayoría de los algoritmos propuestos tienen un tamaño de salida asintótico; es decir, el tamaño de la firma resultante aumenta linealmente con el tamaño de la entrada (número de claves públicas). Eso significa que tales esquemas son impracticables para casos de uso reales con suficiente(por ejemplo, una votación electrónica con millones de participantes). Pero para algunas aplicaciones con un tamaño de entrada medio relativamente pequeño, tal estimación puede ser aceptable. Implementa CryptoNoteesquema de firma de anillo de Fujisaki y Suzuki [5] en pagos p2p para lograr la imposibilidad de rastrear al remitente.
Recientemente han aparecido algoritmos más eficientes. Existen esquemas con el tamaño sublineal de la firma, [6] así como con tamaño constante. [7]
Implementación
Esquema original
El documento original describe un esquema de firma de anillo basado en RSA , así como uno basado en firmas de Rabin . Definen una "función de combinación" con clave que lleva una llave , un valor de inicialización y una lista de valores arbitrarios . Produce un solo valor. La ecuacion se puede resolver para una sola entrada, pero no es factible de resolver por si el adversario no puede invertir ninguna de las funciones de trampilla (aquí basadas en RSA). La funciónse llama ecuación de anillo y se define a continuación. La ecuación se basa en una función de encriptación simétrica :
En el esquema de firma de anillo, la salida es lo mismo que la entrada. Esta función es trivialmente invertible dado parámetros.
Generación de firmas
Generar una firma de anillo implica seis pasos. El texto llano está representado por, las claves públicas del anillo por .
- Calcular la clave , utilizando una función hash criptográfica . Este paso asume un oráculo aleatorio para, desde se utilizará como clave para .
- Elija un valor de pegamento al azar .
- Elige al azar para todos los miembros del anillo menos para tise calcula utilizando el s clave privada del igner), y calcular correspondientes.
- Resuelve la ecuación del anillo para
- Calcular usando la clave privada del firmante:
- La firma del anillo ahora es la -tupla
Verificación de firma
La verificación de la firma consta de tres pasos.
- Aplique la trampilla de clave pública en todos : .
- Calcular la clave simétrica .
- Verifique que la ecuación del anillo se mantenga .
Implementación de Python
Aquí hay una implementación de Python del artículo original usando RSA .
importación OS , hashlib , al azar , Crypto.PublicKey.RSAclass Ring : "" "Implementación RSA." "" def __init__ ( self , k , L : int = 1024 ) -> None : self . k = k uno mismo . l = L yo mismo . n = len ( k ) yo . q = 1 << ( L - 1 ) def sign ( self , m : str , z : int ): "" "Firmar un mensaje." "" self . _permut ( m ) s = [ Ninguno ] * self . n u = aleatorio . randint ( 0 , self . q ) c = v = self . _E ( u ) para i en rango ( z + 1 , self . N ) + rango ( z ): s [ i ] = aleatorio . randint ( 0 , self . q ) e = self . _g ( s [ i ], self . k [ i ] . e , self . k [ i ] . n ) v = self . _E ( v ^ e ) si ( i + 1 ) % self . n == 0 : c = v s [ z ] = yo . _g ( v ^ u , self . k [ z ] . d , self . k [ z ] . n ) return [ c ] + s def verify ( self , m : str , X ) -> bool : "" "Verifica un mensaje." "" self . _permut ( m ) def _f ( i ): return self . _g ( X [ i + 1 ], self . k [ i ] . e , self . k [ i ] . n ) y = map ( _f , range ( len ( X ) - 1 )) def _g ( x , i ) : volver a sí mismo . _E ( x ^ y [ i ]) r = reducir ( _g , rango ( self . N ), X [ 0 ]) return r == X [ 0 ] def _permut ( self , m ): self . p = int ( hashlib . sha1 ( " % s " % m ) . hexdigest (), 16 ) def _E ( self , x ): msg = " % s% s " % ( x , self . p ) return int ( hashlib . sha1 ( msg ) . hexdigest (), 16 ) def _g ( self , x , e , n ): q , r = divmod ( x , n ) if (( q + 1 ) * n ) <= (( 1 << self . l ) - 1 ): resultado = q * n + pow ( r , e , n ) else : resultado = x devuelve resultado
Para firmar y verificar 2 mensajes en un anillo de 4 usuarios:
size = 4 msg1 , msg2 = "hola" , "mundo!"def _rn ( _ ): devuelve Crypto . PublicKey . RSA . generar ( 1024 , os . urandom )key = map ( _rn , range ( size )) r = Ring ( key ) for i in range ( size ): s1 = r . signo ( msg1 , i ) s2 = r . sign ( msg2 , i ) afirmar r . verificar ( msg1 , s1 ) y r . verificar ( msg2 , s2 ) y no r . verificar ( msg1 , s2 )
CRIPTOMONEDAS
La tecnología CryptoNote utiliza firmas de anillo. [8] Fue implementado por primera vez por Bytecoin.
ShadowCash
La criptomoneda ShadowCash utiliza una firma de anillo rastreable para anonimizar al remitente de una transacción. [9] Sin embargo, estos se implementaron originalmente de manera incorrecta, lo que resultó en una anonimización parcial de ShadowCash desde su primera implementación hasta febrero de 2016 por el investigador de Monero Research Labs, Shen Noether. [10] Afortunadamente, solo el 20% de todas las claves de un solo uso en el sistema se vieron afectadas por este error, el anonimato del remitente se vio comprometido pero el anonimato del receptor permaneció intacto. Se envió un parche de manera oportuna para resolver el error. [11]
Monero
Entre el 10 de enero de 2017 y el 18 de octubre de 2018, Monero utilizó la tecnología Ring Confidential Transaction para ofuscar los montos de las transacciones en la cadena de bloques. Esto permitió que solo el remitente y el destinatario de los fondos supieran la cantidad real que se estaba enviando. [12] Desde entonces, la moneda ha cambiado a Bulletproofs. [13]
Referencias
- ^ Cómo filtrar un secreto , Ron Rivest , Adi Shamir y Yael Tauman Kalai , ASIACRYPT 2001. Volumen 2248 de Lecture Notes in Computer Science, páginas 552–565.
- ^ Debnath, Ashmita; Singaravelu, Pradheepkumar; Verma, Shekhar (19 de diciembre de 2012). "Esquema de preservación de la privacidad espacial eficiente para la red de sensores". Revista Centroeuropea de Ingeniería . 3 (1): 1–10. doi : 10.2478 / s13531-012-0048-7 . S2CID 137248994 .
- ^ E. Bresson; J. Stern; M. Szyd lo (2002). "Firmas de anillo de umbral y aplicaciones para grupos ad-hoc" (PDF) . Avances en criptología: Crypto 2002 . Apuntes de conferencias en Ciencias de la Computación. 2442 : 465–480. doi : 10.1007 / 3-540-45708-9_30 . ISBN 978-3-540-44050-5.
- ^ Liu, Joseph K .; Wong, Duncan S. (2005). Firmas de anillo enlazables: modelos de seguridad y nuevos esquemas . ICCSA . Apuntes de conferencias en Ciencias de la Computación. 2 . págs. 614–623. doi : 10.1007 / 11424826_65 . ISBN 978-3-540-25861-2.
- ^ a b Fujisaki, Eiichiro; Suzuki, Koutarou (2007). "Firma de anillo rastreable". Criptografía de clave pública : 181-200.
- ^ Fujisaki, Eiichiro (2011). "Firmas de anillo rastreables de tamaño sub-lineal sin oráculos aleatorios". CTRSA . 95 (1): 393–415. Código bibliográfico : 2012IEITF..95..151F . doi : 10.1587 / transfun.E95.A.151 .
- ^ Au, Man Ho; Liu, Joseph K .; Susilo, Willy; Yuen, Tsz Hon (2006). Firma de anillo vinculable y revocable iff-vinculada de tamaño constante basada en ID . Apuntes de conferencias en informática . 4329 . págs. 364–378. doi : 10.1007 / 11941378_26 . ISBN 978-3-540-49767-7.
- ^ Tecnología CryptoNote - Pagos imposibles de rastrear
- ^ Shadow - Efectivo electrónico distribuido anónimo de conocimiento cero a través de firmas de anillo rastreables
- ^ Cripto roto en Shadowcash Archivado el 27 de septiembre de 2016 en la Wayback Machine.
- ^ https://blog.shadowproject.io/2016/03/07/development-update-march-phoenix/
- ^ "Una explicación de bajo nivel de la mecánica de Monero vs Bitcoin en un lenguaje sencillo" .
- ^ Bunz, Benedikt (1 de noviembre de 2017). "Bulletproofs: pruebas breves para transacciones confidenciales y más" . iarc.org . Consultado el 14 de febrero de 2019 .