- Firma digital ciega
-
Firma digital ciega
La firma digital ciega es un protocolo de firma digital creado por David Chaum que permite a una persona obtener un mensaje firmado por otra entidad, sin revelarle información del contenido del mensaje.
La principal motivación que tuvo su creador fue que cada vez que se llama por teléfono, se compra un producto usando una tarjeta de crédito, se suscribe a una revista o paga algún impuesto, esa información va a parar a una base de datos en algún lugar, lo que trasgrede nuestro derecho a privacidad.
Contenido
Concepto Básico
Para entender este concepto utilizaremos el ejemplo de voto con papeleta en el cual los votantes no pueden acudir al lugar de votación.
Cada votante desea asegurarse de que su voto sea secreto, además de poder verificar que éste fue contado.
- El votante toma su papeleta de votación (en blanco) y la envuelve en papel calco, para luego enviarlo en un sobre con su remitente al comisario.
- El comisario abre el sobre, para firmar sobre el papel calco (sin ver que hay en el interior), y devuelve el paquete en otro sobre. Esta acción permitirá asegurar que el votante se encuentra autorizado para votar.
- Para el día de las elecciones, cada votante manda su papeleta con su voto marcado al comisario en un sobre sin remitente.
Luego, estos sobres pueden ser abiertos y contados públicamente. Si cada votante recuerda algún elemento característico de su papeleta, como el patrón en las fibras del papel, podrá reconocer su voto en el conteo.
Por otra parte, como el comisario nunca vio el voto que firmó, y uso la misma firma para todos, no podrá identificar el voto de cada votante.
Formalización
Para implementar el protocolo de firma digital ciega se requiere lo siguiente:
- Una función de Firma S' conocida solo por la autoridad (Banco) y la correspondiente función publica S que datisfaga que S(S'(x)) = x y que S no revele información acerca de S'.
- Una función conmutativa C y su inversa C' ambas conocidas solo por el emisor (cliente del Banco) que satisfaga C'(S'(C(x))) = S'(x). Además, ni S' ni C(x) deben dar pista de x.
- Se debe contar con una función r(x) que valide que x es suficientemente redundante de manera de hacer la búsqueda de firmas validas imprácticas.
Luego se define el siguiente protocolo:
- El emisor genera un x al azar tal que satisfaga r(x), y calcula C(x) enviándolo a la autoridad.
- La autoridad firma C(x) aplicando S', para luego retornar S'(C(x)) al emisor.
- El emisor obtiene S'(x) aplicando la función C' a lo retornado por la autoridad, es decir, S'(X) = C'(S'(C(x))).
- Cualquier entidad podrá comprobar que S'(x) es válido mediante la función pública S y el validador r mediante r(S(S'(x))).
Firma digital ciega para dinero electrónico
El protocolo de firma digital ciega para dinero electrónico se plantea como objetivos garantizar los siguientes puntos:
- Inhabilidad de terceros para determinar el/los beneficiarios, montos o momentos de pagos realizados por un individuo.
- Permitir a individuos tener comprobantes de pago, o de determinar la identidad del beneficiario bajo circunstancias excepcionales.
- Suspender la validez de medios de pago que se hayan reportados como robados.
Ejemplo de uso
Para el siguiente ejemplo, usaremos a Manuel (cliente emisor), el Banco (entidad que queremos que nos firme un documento sin conocer la información) y un vendedor.
Para este caso podemos pensar que tenemos monedas de un solo valor, digamos $100 y que el banco las firmará todas utilizando una misma llave privada S'. La llave pública del banco es S.
Manuel desea crear una moneda electrónica (de $100), para eso escoge un número de serie aleatorio x suficientemente grande para evitar coincidencias, es decir, que satisfaga r(x). Hace entonces un documento con:
- la declaración de solicitud de su moneda de $100
- el número de serie, multiplicado por un factor ciego, es decir, aplicando C(x)
- firma del documento
Este documento lo envía al Banco. El banco realiza lo siguiente:
- verifica la firma de Manuel
- descuenta $100 de la cuenta de Manuel
- entrega un nuevo número de serie
- firma el documento con una firma especial para monedas de $100 y se lo envía de vuelta a Manuel. Es decir, envía de vuelta S'(C(x)))
Con esta respuesta, Manuel:
- verifica la firma del Banco, con la llave pública: S(S'(x)) = x
- divide la firma por su factor ciego y obtiene un número de serie válido para su moneda. Es decir, obtiene S'(x) aplicando la función C' al documento que le envió el banco, pues C'(S'(C(x))) = S'(x)
- En algún instante posterior, Manuel entrega la moneda electrónica S'(x) a algún vendedor.
- El vendedor debe acudir al Banco para cobrar la moneda. Este verifica que el número de serie sea válido y que S(x) no se encuentre en la lista de revocación. Si se satisface lo anterior, entrega los $100 al vendedor e incorpora S(x) a la lista de revocación.
El Banco no tiene manera de saber de quién es esa moneda, sólo pudo verificar que es una moneda válidamente emitida.
Problemas
Uno de los problemas de este sistema es la existencia de la lista de revocación que crece de manera no acotada. Si se emiten monedas electrónicas de manera masiva, esta lista puede adquirir un tamaño inmanejable en poco tiempo. Otro problema es que a diferencia de las monedas físicas, las monedas electrónicas requieren ser validadas por el banco que las emitió para ser convertidas en circulante, por lo que el proceso no es todo lo rápido que se quisiera.
Referencias
[ejemplo de eCash] [Scientific American (1992), publicación del protocolo]
Enlaces externos
Categorías: Criptografía | Derecho informático
Wikimedia foundation. 2010.