Veja como acabei resolvendo o problema.
Primeiro, criei um servidor de chaves separado que é iniciado ao mesmo tempo que o servidor principal. Seu único objetivo é distribuir chaves para processos autorizados. Ele faz isso executando um md5sum no binário de chamada, depois vendo quais chaves esse binário tem permissão para acessar. O binário de chamada (neste caso, o script, que foi compilado para um executável) solicita as chaves deste servidor e, em seguida, continua normalmente.
O servidor principal é executado o tempo todo e mantém uma senha de chaveiro em sua própria memória. Na inicialização, ele não tem a senha do conjunto de chaves e, portanto, não pode responder a solicitações de chaves. Portanto, antes de poder fazer isso, é necessário que a senha do conjunto de chaves seja definida. Isso pode ser feito através de uma interface web ou da linha de comando e requer interação do usuário. Isso protege o sistema exigindo que alguém digite fisicamente a senha correta. Isso geralmente só precisa ser feito uma vez por reinicialização, já que o servidor principal nunca termina.