¿Hay alguna manera de entregar boletos seguros sin almacenarlos?

0

Estoy creando un sitio web en el que quiero que a los usuarios les resulte muy fácil crear páginas de forma anónima y luego poder regresar y editar esas páginas. Una forma de hacerlo es entregar tickets confidenciales que se derivan de la ID de la página a esos usuarios cuando crean la página. Más tarde, podré obtener el ID de página del ticket y permitir que un usuario en posesión del ticket edite esa página.

Por supuesto, esto debe ser seguro, por lo que : 1) los terceros no deberían poder obtener el ID de página de un ticket determinado, y lo que es más importante aún: 2) los terceros no deberían poder predecir el ticket para una ID de página determinada.

Por supuesto, podría hacerlo fácilmente generando los tickets al azar y almacenándolos en una base de datos, sin embargo, me gustaría intentarlo sin tener que almacenar los tickets.

En otras palabras, estoy buscando algo como esto:

  1. Deje que A sea una ID de página pública única.
  2. Sea S una especie de llave maestra inmutable u otro secreto que poseo y no cedo.
  3. Usando S, transforme de A a B, de manera que luego pueda transformar B de nuevo a A, pero alguien que no esté en posesión de S no puede hacerlo.
  4. No debería ser posible, o ser muy difícil, derivar S incluso si tiene una gran colección de pares A-B.

¿Existe tal proceso? Una cosa en la que pensé es un XOR simple, sin embargo, sería fácil de descifrar con solo algunos ejemplos de pares A-B. No puedo usar un hash, porque son intencionalmente irreversibles; No puedo derivar A de B si B es un hash de A.

    
pregunta Pepijn Schmitz 10.06.2015 - 17:03
fuente

2 respuestas

3

Esto suena como el uso perfecto de un HMAC . Se crea un secreto aleatorio seguro S . Entonces el ticket para cada página será ID + HMAC(S, ID) . Cuando obtiene un ticket, extrae el ID , rehaga el HMAC y luego compare su resultado con el del ticket.

Si bien es probable que esto sea más simple y más rápido que una solución de cifrado, solo funcionará si no le importa que ID esté en texto sin cifrar en el ticket.

    
respondido por el Neil Smithline 10.06.2015 - 18:01
fuente
1

Me parece que el criptografía de clave pública estándar debería funcionar. Por ejemplo, utilizando RSA (con la clave pública N = p * q y e, clave privada d):

  • S sería tu clave privada d.
  • Transformando: B = A ^ e mod N.
  • Transformación atrás: B ^ d = B mod N.

Sus requisitos parecen ajustarse naturalmente a los supuestos de seguridad de RSA. El único obstáculo aquí es que cualquiera puede calcular B a partir de una A dada (lo que viola su declaración original, pero no los requisitos formales que se detallan a continuación). Creo que esto se puede solucionar manteniendo e privado también (y suficientemente grande y aleatorio), pero eso requeriría un análisis más cuidadoso.

    
respondido por el Ari Trachtenberg 10.06.2015 - 17:51
fuente

Lea otras preguntas en las etiquetas