cuya implementación queremos mantener en secreto
Esto suele ser un indicador de que su esquema es inseguro. La implementación en sí no debería ser secreta. El secreto debe ser material clave, no el algoritmo o la implementación en sí. Todo esto cae bajo el principio de Kerckhoffs .
Ahora la pregunta es, ¿podemos esperar de manera realista evitar que un atacante obtenga acceso a la clave?
Absolutamente no. Puedo pensar en al menos cinco ataques desde la parte superior de mi cabeza que romperían esto, empezando por descargar toda la memoria a través de PCI-e DMA.
Como ejemplo de lo absolutamente imposible que es mantener las teclas ocultas cuando un atacante tiene acceso físico, observe la escena de la consola de juegos homebrew. La Xbox 360 y la PS3 tenían una amplia gama de controles de seguridad integrados en el silicio de la CPU, con almacenamiento de claves secretas en el troquel, RAM aislada para unidades de ejecución seguras, cadena de confianza criptográfica desde el cargador de arranque hasta las aplicaciones ( juegos), y todo tipo de otros controles inteligentes ... y solo tomó 12 meses para que las personas rompan cada plataforma (en el caso de la PS3, fue 12 meses después de que Sony eliminara el soporte de Linux). El acceso físico significa que el atacante finalmente lo hará hacer lo que desee y obtendrá acceso a cada bit de datos en el dispositivo.
Estoy diciendo que para asegurar este sistema, A o B deben estar conectados de alguna manera a una fuente de validación externa C, a la que el atacante NO tiene acceso de phyiscal. ¿Esto es correcto?
No estoy seguro de cómo se aplica la "validación" aquí, pero básicamente necesita evitar que f(x)
se filtre, por lo que debe almacenarse y ejecutarse en un sistema que el usuario (o un atacante) no tiene acceso a.
También deberás considerar los efectos de un atacante que emplee tu servicio remoto como un oráculo, que es esencialmente. A modo de ejemplo, el disco duro de la PS3 estaba encriptado y nadie podía acceder a las claves de descifrado (estas estaban en la matriz y solo se podía acceder desde una unidad de ejecución aislada) pero, debido a una falla en el proceso de encriptación, utilizaron la misma clave y para cada sector: puede tomar una instantánea del disco, cargar una película en la PS3, buscar el gran bloque de sectores que cambió, y luego sobrescribir esos sectores con otros del disco (por ejemplo, el propio sistema operativo), arranque la copia de seguridad de PS3, vuelva a descargar la película, y el sistema descifra los sectores del disco (¡sin que sepa nunca cuál fue la clave!) y le devuelve el texto sin formato original. Los desarrolladores de Homebrew utilizaron este ataque de oráculo para descifrar datos sin necesidad de saber cuál era la clave. Deberías considerar ataques similares contra tu sistema.