¿Es mi enfoque sugerido criptográficamente seguro?
De hecho, un atacante observará su implementación y explotará el hecho de que está confiando en un PRF al que el atacante puede acceder. Al menos necesitarías separar el PRF del resto para estar seguro. Especialmente, ya que declara que enviaría un ID de usuario único a la PRF durante su "proceso de autorización" (llamémoslo). Si asumimos que la clave única no cambia, también estamos cambiando un poco hacia un problema de reutilización de la clave, lo que abre vectores de ataque adicionales; especialmente con su ejemplo de implementación. Pero no voy a entrar en demasiados detalles, ya que rápidamente se volvería demasiado amplio. La historia corta es: usted es correcto: su implementación descrita no es segura ... en absoluto.
¿Qué otros enfoques, mejores o más simples puedo tomar para resolver este problema?
Las posibles soluciones podrían encontrarse fácilmente en criptografía de clave pública . O bien, podría intentar confiar en un intercambio de datos autorizado con un servidor web utilizando una conexión HTTPS segura para que el servidor proporcione la funcionalidad PRF, pero eso es menos seguro y no estoy realmente seguro de si realmente satisfaría todas sus necesidades criptográficas .
Personalmente, recomendaría ir a public-key crypto cuando se trata de una aplicación de comunicación como la describe en su pregunta, porque es la forma habitual de manejar la situación / funcionalidad que describe. Puede sonar un poco aburrido, pero no hay necesidad de reinventar la rueda mientras haya opciones bien verificadas disponibles. Especialmente, si su conocimiento criptográfico no es (al menos) a nivel profesional. Y aún así, los profesionales tienden a ir a implementaciones criptográficas probadas en lugar de intentar crear su propia solución criptográfica. Las posibilidades de que arruines las cosas (como el PRF del que estás confiando se compartiría con los atacantes) son demasiado grandes para tomarlas ... un pequeño defecto en tu criptografía puede convertirse rápidamente en una aplicación 100% insegura.
Ahora, no mencionó ningún lenguaje de programación, así que no puedo señalarle ninguna dirección específica, pero las soluciones de clave pública (bibliotecas, etc.) están disponibles para casi cualquier lenguaje de programación. Debe ser fácil encontrar algo apropiado para sus propósitos. Y si alguna pregunta relacionada con la clave pública crypto surge en el camino, siéntase invitado a publicar otra pregunta aquí como Crypto.SE.