běžně se využívá služba (daemon, lokální či vzdálený), která ti klíče poskytuje, primitivní implementace je přes socket na daném stroji. Pro hosting je vhodné podobnou službu umístit na jiný dedikovaný stroj, nad kterým máš kontrolu.
Na server se dá na tohle poměrně dobře použít TMP čip či HSM modul. Ve větším nasazení existují speciální servery, který udržují klíče, každý větší výrobce HW takovéhle 1U krabičky dodává a používáme je třeba pro držení klíčů k jednotlivým uživatelům.
Bez monitoring a alertingu přístupu ke klíčům se ale neobejdeš a sebelepší systém záleží na tom jak důkladně ho pozoruješ, bezpečnostní chyby jsou a budou.
Pokud manipuluješ se symetrickými klíči, určitě se mrkni na PBKDF2 a nesnaž se vymýšlet svoje chujoviny. Na obyčejném php hosting to nejsi schopný zabezpečit a klidně měj heslo v php.ini. Levně je možné službu do hesla umístit na dedikovaný server, který máš pod kontrolou.
Pokud máš jedno statické heslo pro celou databázi, uložení v konfigu je přípustné a pokud se někdo dostane ke klíči, máš smůlu, na tom nic nezměníš. Řešením je mít pro každého uživatele vlastní klíč a jejich vydávání povolovat další aplikací (možná pro tebe vhodné řešení k nastudování je
https://www.hashicorp.com/products/vault/). Daná služba musí být chráněna proti vytěžování a mít určitý rate limiting.
Průmyslovější řešení je použití HSM modulu, který má klíče u sebe a nikdy je nevydává, naopak mu posíláš šifrovaný obsah a on ti vrací dešifrovaný, v řešení v pci-e karty to dává 1GiB/s jak nic.
Kvůli GDPR nic takového nepotřebuješ, tam stačí šifrovat a poté mít jasně dokumentované postupy kde je klíč a kdo k němu má přístup. Každopádně tohle ti musí určit zmocněnec, kterého musíš určit. Ne všechny "eshopy" budou muset šifrovat a za mě v tom nařízení jsou daleko důležitější a problematičtější věci.