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:
- Deje que A sea una ID de página pública única.
- Sea S una especie de llave maestra inmutable u otro secreto que poseo y no cedo.
- 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.
- 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.