El secreto que no puede serlo
Una clave de tu servicio dentro de un binario distribuido no es un secreto, y ninguna técnica lo arregla. Qué hacer en su lugar, que es rediseñar y no esconder mejor.
El argumento, entero
Es corto y no tiene grietas:
Tu programa tiene que poder usar la clave sin ayuda de nadie. Si necesitara que el usuario aportara algo, no sería tu clave: sería suya.
Luego la clave está en el paquete que distribuyes, de una forma u otra: literal, cifrada, troceada, calculada, descargada al arrancar con otra clave que sí está.
Luego cualquiera que tenga el paquete puede obtenerla, porque tiene exactamente lo mismo que tu programa. Solo cambia cuánto tarda.
Y una consecuencia que decide qué hacer: cuando alguien la obtiene, la tiene para todos tus usuarios a la vez, porque es la misma clave en todas las copias. No es un incidente de un usuario; es un incidente de tu servicio.
Las tres variantes
La tercera fila tiene una salida limpia y estandarizada —hay un modo de autenticación diseñado precisamente para clientes que no pueden guardar secretos, y una aplicación de escritorio lo es— y por eso la fase le dedica un nivel entero. Las dos primeras se resuelven con arquitectura.
Las cuatro salidas
La cuarta no es una solución y merece decirlo claro. Es lo que se hace cuando el servicio de terceros no ofrece nada mejor y la aplicación tiene que salir. La diferencia entre hacerlo así y hacerlo mal es que sabes que está expuesta: la tratas como pública, le das los permisos mínimos, le pones un límite, y tienes escrito cómo cambiarla el día que aparezca en un repositorio ajeno.
Qué sí se puede repartir
Para no acabar con la impresión de que nada puede ir en el binario:
- Claves públicas. La que verifica la firma de tus actualizaciones —fase XI— va en el binario por diseño: es pública, ése es el punto.
- Identificadores no secretos. El identificador de cliente de un flujo de autenticación, el de tu aplicación en una tienda. Son nombres, no llaves.
- Puntos de acceso y configuración. La URL de tu servicio no es un secreto. Ocultarla no aporta nada y complica la depuración.
La distinción es qué pasa si se publica. Si la respuesta es «nada», va en el binario sin darle vueltas. Si es «alguien podría hacer algo en mi nombre», no puede ir.