Per aggiungere alla risposta di Philipp:
Non è né sicuro, né può essere reso sicuro, indipendentemente da quanto impegno ci metti.
Ma puoi rendere più facile affrontare i problemi. Se la chiave viene archiviata in un file esterno invece che nel codice del programma, è molto più semplice da modificare. Pertanto, mentre non è possibile proteggere la chiave dall'essere rubata e i dati da decrittografare, è possibile semplificare la sostituzione periodica della chiave, in modo che un utente malintenzionato debba periodicamente recuperare l'accesso alla chiave se desidera continuare a leggere i dati crittografati . Ciò aumenta le possibilità di essere scoperto (potrebbe inciampare prima o poi in qualche tipo di sistema di rilevamento delle intrusioni, o fare uno stupido errore)
Separare chiave e applicazione facilita anche la protezione della chiave: ora è sufficiente proteggere un file di piccole dimensioni senza doversi preoccupare di dove possono essere archiviati il binario dell'applicazione e il codice sorgente (si pensi ai sistemi di controllo della versione, pacchetto manager, ambienti di build automatizzati, backup, ecc.)
Mantenere la chiave in un file esterno è anche una buona idea perché, a seconda della piattaforma su cui si sta eseguendo, l'applicazione può iniziare con autorizzazioni elevate che gli consentono di leggere la chiave e quindi rilasciare queste autorizzazioni in modo che, mentre è in esecuzione, non avrà più accesso alla chiave memorizzata. Ciò impedirà alcuni tipi di attacchi, anche se un attaccante sofisticato può sempre estrarre la chiave dalla memoria dell'applicazione.
A seconda di ciò che fa l'applicazione, potrebbe anche essere possibile ridurre in modo significativo la superficie di attacco. Se una parte dell'applicazione scrive sempre solo dati segreti, è possibile suddividere l'applicazione in due parti e utilizzare la crittografia a chiave pubblica per evitare di doversi preoccupare della prima applicazione, quella che deve solo scrivere i dati, ma non leggerla di nuovo. In tal caso, si fornisce alla prima applicazione una chiave pubblica per crittografare una chiave di sessione, che si utilizza per scrivere i dati segreti. Ora devi solo proteggere la seconda applicazione, che legge i dati indietro, o meglio, la chiave privata a cui questa applicazione ha accesso.