Esta es una pregunta potencialmente hipotética, ya que no se ha determinado si se nos pedirá que hagamos esto, pero creo que es una pregunta que surgirá con mayor frecuencia.
Fondo
Al implementar servicios RESTful el enfoque estándar es que el URI contiene la información necesaria para identificar el resource en cuestión. Si bien no soy un restafarian , este enfoque tiene muchas ventajas sobre las que deseamos aprovechar.
Problema
Estamos sujetos a los requisitos reglamentarios relacionados con la protección de ciertos tipos de información. Algunos de estos elementos protegidos terminarán en rutas de recursos si seguimos la fórmula REST básica.
TLS cubrirá la mayoría de las inquietudes acerca de porque las URL están cifradas. Sin embargo, hay algunos lugares donde se pueden almacenar a la vista. En particular, a menudo se escriben para acceder a los registros (lo cual es útil) de manera predeterminada y si las personas usan los navegadores para esto, se pueden almacenar de forma clara en su historial de navegación.
Enfoque
Suponiendo que esto es un problema y queremos utilizar un enfoque de este tipo, parece que hay un candidato principal para la solución, que es cifrar partes de la URI o toda la misma. El hash no parece ser una opción, ya que los datos son altamente predecibles y el cálculo de todo el conjunto de valores es fácil. El cifrado de la URI completa limitará muchas de las ventajas del enfoque. El cifrado simétrico requiere distribuir una clave secreta ampliamente y, por lo tanto, anula el propósito. La opción que parece mejor es cifrar los datos confidenciales con una clave pública.
Tal como lo entiendo, su salida cifrada debe ser al menos tan larga como el módulo . Entonces, si vamos con una clave de 2048 bits, cada uno de los datos deberá tener al menos 256 bytes. Esto dará como resultado algunos URI bastante largos, pero creo que eso debería estar bien por un tiempo de todos modos y ese límite puede no aplicarse a nuestra solución.
¿Este enfoque parece válido y / o hay algo más que me estoy perdiendo? ¿Sería válido usar el mismo par de claves que se usaría para TLS? Probablemente deba haber alguna otra información en la parte encriptada para evitar ataques de reproducción o asignar un valor encriptado a la clave dada, ¿correcto?
NOTA : Debo mencionar que para mi problema específico, solo las partes autenticadas podrían llamar. Esto no es algo que pretendemos exponer en la Internet pública, aunque pueden ocurrir errores. Todas las partes involucradas están legalmente obligadas a proteger los datos. Creo que vale la pena explorar un uso más general de dicha idea debido a la creciente popularidad de los servicios RESTful.