Para agregar a la respuesta de Philipp:
No es seguro, ni puede hacerse seguro, sin importar cuánto esfuerzo le pongas.
Pero puede hacer que sea más fácil lidiar con los problemas. Si almacena la clave en un archivo externo en lugar de en algún lugar del código de su programa, es mucho más fácil cambiarlo. Por lo tanto, si bien no puede evitar que la clave sea robada y que no se descifren los datos, puede facilitar el cambio regular de la clave, de modo que un atacante debe recuperar periódicamente el acceso a la clave si desea seguir leyendo los datos cifrados. . Esto aumenta las posibilidades de que lo detecten (podría tropezar con algún tipo de sistema de detección de intrusos tarde o temprano, o cometer un error estúpido)
Separar la clave y la aplicación también facilita la protección de la clave: ahora solo tiene que proteger un archivo pequeño y no tiene que preocuparse por dónde se almacenan el código fuente y el código binario de la aplicación (piense en los sistemas de control de versiones, paquetes administradores, entornos de compilación automatizados, copias de seguridad, etc.).
Mantener la clave en un archivo externo también es una buena idea, ya que dependiendo de la plataforma en la que esté ejecutando, su aplicación puede comenzar con permisos elevados que le permiten leer la clave, y luego eliminar estos permisos para que en ejecución, ya no tendrá acceso a la clave almacenada. Esto evitará algunos tipos de ataques, aunque, por supuesto, un atacante sofisticado siempre puede extraer la clave de la memoria de la aplicación.
Dependiendo de lo que haga su aplicación, también podría ser posible reducir significativamente la superficie de ataque. Si una parte de la aplicación solo escribe datos secretos, puede dividir la aplicación en dos partes y usar la criptografía de clave pública para no tener que preocuparse por la primera aplicación, la que solo necesita escribir datos, pero no volver a leerlos. En ese caso, le das a la primera aplicación una clave pública para cifrar una clave de sesión, que usas para escribir los datos secretos. Ahora solo tiene que proteger la segunda aplicación, que lee los datos, o más bien, la clave privada a la que tiene acceso esta aplicación.