As chaves privadas nunca expiram. Somente chaves públicas fazem. Caso contrário, o mundo nunca perceberia a expiração, já que (esperançosamente) o mundo nunca vê as chaves privadas.
Para a parte importante, há apenas uma maneira, de modo que salva uma discussão sobre prós e contras.
Você precisa estender a validade da chave principal:
gpg --edit-key 0x12345678
gpg> expire
...
gpg> save
Você precisa tomar uma decisão sobre a extensão da validade vs. a substituição da (s) subchave (s). Substituí-los fornece segurança de encaminhamento limitada (limitada a prazos bastante grandes). Se isso for importante para você, você deve ter subchaves (separadas) para criptografia e assinatura (o padrão é apenas para criptografia).
gpg --edit-key 0x12345678
gpg> key 1
gpg> expire
...
gpg> key 1
gpg> key 2
gpg> expire
...
gpg> save
Você precisa key 1
duas vezes para selecionar e desmarcar, pois pode estender a validade de apenas uma chave por vez.
Você também pode decidir estender a validade, a menos que tenha algum motivo para supor que a chave foi comprometida. Não jogar fora todo o certificado em caso de comprometimento faz sentido apenas se você tiver uma chave principal offline (que IMHO é a única maneira razoável de usar o OpenPGP de qualquer maneira).
Os usuários do seu certificado precisam obter sua versão atualizada de qualquer maneira (para as novas assinaturas de chave ou para as novas chaves). A substituição torna a chave um pouco maior, mas isso não é um problema.
Se você usar cartões inteligentes (ou planeja fazer isso), ter mais chaves (criptografia) cria um certo inconveniente (um cartão com a nova chave não pode descriptografar dados antigos).
gpg> expire Need the secret key to do this.
Alguma idéia de como contornar isso?expire
comando realmente orienta você na definição do tempo de expiração de uma chave, então talvez você "renove" a chave apenas definindo o tempo de expiração ainda mais no futuro?