Para que o pino seja armazenado em cache, você precisa executar gpg-agent
e sua placa não deverá não ter o forcesig
definido.
AFAIK, por padrão, os cartões são enviados com o conjunto de bits forceig, que é mais seguro. Você pode ver isso usando gpg --card-edit command
e procurar a entrada PIN da assinatura. De acordo com o manual:
Signature PIN
When set to "forced", gpg requests the entry of a PIN for each signature operation. When set to "non forced", gpg may cache the PIN as long as the card has not been removed from the reader.
Você pode alterar o bit usando:
$ gpg --card-edit
....
gpg: detected reader 'MSI StarReader SMART [Smart Card Reader Interface]'
Version ..........: 2.0
Manufacturer .....: ZeitControl
Serial number ....: 0000201C
Name of cardholder: Anthony van der Neut
Language prefs ...: en
Sex ..............: please
URL of public key : http://anthon.home.xs4all.nl/publickey.asc
Login data .......: anthon
Private DO 1 .....: [not set]
Private DO 2 .....: [not set]
Signature PIN ....: forced <<<<< this is what should not be 'forced'
Key attributes ...: 2048R 2048R 2048R
Max. PIN lengths .: 32 32 32
PIN retry counter : 3 0 3
Signature counter : 2
....
gpg/card > admin
gpg/card > forcesig
(plug sem graça: para mais detalhes sobre a configuração segura de um cartão, consulte meu rant )