Portál AbcLinuxu, 31. října 2025 07:36
scdaemon
tom@mike:~$ sudo apt-get install scdaemonNejdřív zkusíme zobrazit informace o kartě. Ve slotu mám Yubikey 5 (černý, s NFC)
tom@mike:~$ gpg --card-status Reader ...........: 1050:0407:X:0 Application ID ...: D2760001240103040006120368550000 Version ..........: 3.4 Manufacturer .....: Yubico Serial number ....: 12036855 Name of cardholder: [not set] Language prefs ...: [not set] Sex ..............: unspecified URL of public key : [not set] Login data .......: [not set] Signature PIN ....: not forced Key attributes ...: rsa2048 rsa2048 rsa2048 Max. PIN lengths .: 127 127 127 PIN retry counter : 3 0 3 Signature counter : 0 Signature key ....: [none] Encryption key....: [none] Authentication key: [none] General key info..: [none]Všimneme si, že na kartě můžou být informace o držiteli (pokud si je tam dá), pak si všimneme, že můžeme uložit Signature key, Encryption key a Authentication key. Po jednom od každého kousku. Kartě je vcelku jedno, jaké klíče tam uložíme (ve smyslu identity), pokud tedy mají příslušný typ (capability). Pokud chcete mít na jedné kartě více klíčů se stejným účelem (a různou identitou), musíte asi sáhnout po nějakém HSM (hardware security module). Od Yubica stojí 650 dolarů (a to asi bez DPH), odkaz: https://www.yubico.com/store/#yubihsm. Konkurence Nitrokey má v nabídce něco, čemu taky říká HSM a stojí jenom 69 eur (https://shop.nitrokey.com/shop/product/nk-hsm-2-nitrokey-hsm-2-7). Nemám doma ani jedno, takže to víc nepopíšu.
--edit-card. Zobrazí nám totéž, co předchozí příkaz a ještě čeká na další příkazy. Vypíšeme si nápovědu.
tom@mike:~$ gpg --edit-card Reader ...........: 1050:0407:X:0 Application ID ...: D2760001240103040006120368550000 Version ..........: 3.4 Manufacturer .....: Yubico Serial number ....: 12036855 Name of cardholder: [not set] Language prefs ...: [not set] Sex ..............: unspecified URL of public key : [not set] Login data .......: [not set] Signature PIN ....: not forced Key attributes ...: rsa2048 rsa2048 rsa2048 Max. PIN lengths .: 127 127 127 PIN retry counter : 3 0 3 Signature counter : 0 Signature key ....: [none] Encryption key....: [none] Authentication key: [none] General key info..: [none] gpg/card> help quit quit this menu admin show admin commands help show this help list list all available data fetch fetch the key specified in the card URL passwd menu to change or unblock the PIN verify verify the PIN and list all data unblock unblock the PIN using a Reset Code gpg/card>Význam zobrazených příkazů je vcelku jasný, ale nějak tam chybí něco, čím bychom mohli měnit data. Použijeme příkaz admin, abychom povolili a zobrazili všechny příkazy
gpg/card> admin Admin commands are allowed gpg/card> help quit quit this menu admin show admin commands help show this help list list all available data name change card holder's name url change URL to retrieve key fetch fetch the key specified in the card URL login change the login name lang change the language preferences sex change card holder's sex cafpr change a CA fingerprint forcesig toggle the signature force PIN flag generate generate new keys passwd menu to change or unblock the PIN verify verify the PIN and list all data unblock unblock the PIN using a Reset Code factory-reset destroy all keys and dataV tuto chvíli jenom zmíním příkaz
factory-reset, který uvede kartu do stavu, jak přišla z továrny (takže se nemusíte bát nejdřív si všechno vyzkoušet). Nenašel jsem nic, jak vynulovat jenom část údajů, musíte vždy smazat celou kartu.
gpg/card> name Cardholder's surname: Example Cardholder's given name: FirstZobrazí se dialog, který chce admin PIN, ve výpisu to není vidět. Dále nastavíme pohlaví a jazykové preference.
gpg/card> sex Sex ((M)ale, (F)emale or space): mJak vidíte, zde je svět v pořádku, člověk je buď muž, nebo žena. Ostatní případy se házejí pod položku "unspecified".
gpg/card> lang Language preferences: czJazykové preference musí být 2 malá písmena, cokoliv jiného odmítne. Na druhou stranu, asi přijme libovolná 2 malá písmena. Na závěr si znovu vypíšeme informace
gpg/card> list Reader ...........: 1050:0407:X:0 Application ID ...: D2760001240103040006120368550000 Version ..........: 3.4 Manufacturer .....: Yubico Serial number ....: 12036855 Name of cardholder: First Example Language prefs ...: cz Sex ..............: male URL of public key : [not set] Login data .......: [not set] Signature PIN ....: not forced Key attributes ...: rsa2048 rsa2048 rsa2048 Max. PIN lengths .: 127 127 127 PIN retry counter : 3 0 3 Signature counter : 0 Signature key ....: [none] Encryption key....: [none] Authentication key: [none] General key info..: [none]
.gnupg a nazveme ho .gnupg_orig.
Chceme přesouvat soukromé klíče, tak si je zobrazíme:
tom@mike:~$ gpg -K 
/home/tom/.gnupg/pubring.kbx
----------------------------
sec   rsa2048 2020-05-24 [SC] [expires: 2022-05-24]
      153130ED26CA404C8B29795B4703A5B671B96E4D
uid           [ultimate] Example First <example.first@example.example>
ssb   rsa2048 2020-05-24 [E] [expires: 2022-05-24]
ssb   rsa4096 2020-05-24 [S]
sec   rsa4096 2020-05-24 [SC]
      E2066568A1FB5723B550410D942AFD64430801F7
uid           [ultimate] Example Second (Second) <example.second@example.example>
ssb   rsa4096 2020-05-24 [E]
sec   rsa4096 2020-05-24 [SC]
      40DB1E1705A9B52E3EFBB29EDD41A31BA28D0199
uid           [ultimate] Example Third (Third) <example.third@example.example>
ssb   elg4096 2020-05-24 [E] [expires: 2020-06-07]
sec   rsa4096 2020-05-24 [CA]
      46C4F15BF45B274B155F9E08E815C1EA446EE732
uid           [ultimate] Example Fourth (Authenticate) <example.fourth@example.example>
tom@mike:~$ gpg --edit-key 46C4F15BF45B274B155F9E08E815C1EA446EE732
gpg (GnuPG) 2.1.18; Copyright (C) 2017 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Secret key is available.
sec  rsa4096/E815C1EA446EE732
     created: 2020-05-24  expires: never       usage: CA  
     trust: ultimate      validity: ultimate
[ultimate] (1). Example Fourth (Authenticate) <example.fourth@example.example>
gpg> keytocard
Really move the primary key? (y/N) y
Please select where to store the key:
   (1) Signature key
   (3) Authentication key
Your selection? 3
sec  rsa4096/E815C1EA446EE732
     created: 2020-05-24  expires: never       usage: CA  
     trust: ultimate      validity: ultimate
[ultimate] (1). Example Fourth (Authenticate) <example.fourth@example.example>
gpg> save
Teď se podíváme, co nám to udělalo.
tom@mike:~$ gpg --card-status
Reader ...........: 1050:0407:X:0
Application ID ...: D2760001240103040006120368550000
Version ..........: 3.4
Manufacturer .....: Yubico
Serial number ....: 12036855
Name of cardholder: First Example
Language prefs ...: cz
Sex ..............: male
URL of public key : [not set]
Login data .......: [not set]
Signature PIN ....: not forced
Key attributes ...: rsa2048 rsa2048 rsa4096
Max. PIN lengths .: 127 127 127
PIN retry counter : 3 0 3
Signature counter : 0
Signature key ....: [none]
Encryption key....: [none]
Authentication key: 46C4 F15B F45B 274B 155F  9E08 E815 C1EA 446E E732
      created ....: 2020-05-24 21:10:10
General key info..: pub  rsa4096/E815C1EA446EE732 2020-05-24 Example Fourth (Authenticate) <example.fourth@example.example>
sec   rsa4096/E815C1EA446EE732  created: 2020-05-24  expires: never     
tom@mike:~$ gpg -K --with-keygrip
/home/tom/.gnupg/pubring.kbx
----------------------------
sec   rsa2048 2020-05-24 [SC] [expires: 2022-05-24]
      153130ED26CA404C8B29795B4703A5B671B96E4D
      Keygrip = 377C02935881630C7F4BA0807C8D753B6635CB90
uid           [ultimate] Example First <example.first@example.example>
ssb   rsa2048 2020-05-24 [E] [expires: 2022-05-24]
      Keygrip = 383B2ACADA9228E29820F89A1C4A4F4D18408562
ssb   rsa4096 2020-05-24 [S]
      Keygrip = E186137C42342AA7D3588183CC4B1FB6ED590E61
sec   rsa4096 2020-05-24 [SC]
      E2066568A1FB5723B550410D942AFD64430801F7
      Keygrip = 8590A9CA8F1385AD2984DD1ED501B1EDA947C90C
uid           [ultimate] Example Second (Second) <example.second@example.example>
ssb   rsa4096 2020-05-24 [E]
      Keygrip = 541540C36217BEED3F9147261B050026CB93166B
sec   rsa4096 2020-05-24 [SC]
      40DB1E1705A9B52E3EFBB29EDD41A31BA28D0199
      Keygrip = D6C7F494928F6EA71BE53DA60BDEBFA0FCBC6DB2
uid           [ultimate] Example Third (Third) <example.third@example.example>
ssb   elg4096 2020-05-24 [E] [expires: 2020-06-07]
      Keygrip = 1E810267D620D288961DEA34A08CE42932ACEE10
sec>  rsa4096 2020-05-24 [CA]
      46C4F15BF45B274B155F9E08E815C1EA446EE732
      Keygrip = C4EE06A7E2208178B43659AB57774A0642418A27
      Card serial no. = 0006 12036855
uid           [ultimate] Example Fourth (Authenticate) <example.fourth@example.example>
Podle řádku "Card serial no. = 0006 12036855" můžeme usoudit, že klíč čtvrtý klíč je přesunutý na kartu. Jinak bychom to také poznali podle skromného indikátoru v podově znaku ">".
A podíváme se i na soubory.
tom@mike:~$ diff .gnupg/private-keys-v1.d/ .gnupg_orig/private-keys-v1.d/ Binary files .gnupg/private-keys-v1.d/C4EE06A7E2208178B43659AB57774A0642418A27.key and .gnupg_orig/private-keys-v1.d/C4EE06A7E2208178B43659AB57774A0642418A27.key differVelikost souboru se změnila z 1.9kB na 615 B. Soubor je sice binární, ale na začátku jsou nějaká písmenka. Zatímco původní soubor začíná řetězcem
(11:private-key(3:rsa(1:n513:Tak po přesunu klíče máme
(20:shadowed-private-key(3:rsa(1:n513:
key 1)
tom@mike:~$ gpg --edit-key E2066568A1FB5723B550410D942AFD64430801F7
gpg (GnuPG) 2.1.18; Copyright (C) 2017 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Secret key is available.
sec  rsa4096/942AFD64430801F7
     created: 2020-05-24  expires: never       usage: SC  
     trust: ultimate      validity: ultimate
ssb  rsa4096/8805963B89C93FE1
     created: 2020-05-24  expires: never       usage: E   
[ultimate] (1). Example Second (Second) <example.second@example.example>
gpg> key 1
sec  rsa4096/942AFD64430801F7
     created: 2020-05-24  expires: never       usage: SC  
     trust: ultimate      validity: ultimate
ssb* rsa4096/8805963B89C93FE1
     created: 2020-05-24  expires: never       usage: E   
[ultimate] (1). Example Second (Second) <example.second@example.example>
gpg> keytocard
Please select where to store the key:
   (2) Encryption key
Your selection? 2
sec  rsa4096/942AFD64430801F7
     created: 2020-05-24  expires: never       usage: SC  
     trust: ultimate      validity: ultimate
ssb* rsa4096/8805963B89C93FE1
     created: 2020-05-24  expires: never       usage: E   
[ultimate] (1). Example Second (Second) <example.second@example.example>
Opět si proklepneme výpisy. Je dobré doplnit přepínač --with-subkey-fingerprint, abychom mohli spárovat (pod)klíče s daty na kartě.
tom@mike:~$ gpg -K --with-keygrip --with-subkey-fingerprint
/home/tom/.gnupg/pubring.kbx
----------------------------
sec   rsa2048 2020-05-24 [SC] [expires: 2022-05-24]
      153130ED26CA404C8B29795B4703A5B671B96E4D
      Keygrip = 377C02935881630C7F4BA0807C8D753B6635CB90
uid           [ultimate] Example First <example.first@example.example>
ssb   rsa2048 2020-05-24 [E] [expires: 2022-05-24]
      AE19DF502047AAED7EDD98B3F1C6AE6DAF3AE8BF
      Keygrip = 383B2ACADA9228E29820F89A1C4A4F4D18408562
ssb   rsa4096 2020-05-24 [S]
      5ABA0105F9EEDE9BD0021DC08F2D5825D5689DE1
      Keygrip = E186137C42342AA7D3588183CC4B1FB6ED590E61
sec   rsa4096 2020-05-24 [SC]
      E2066568A1FB5723B550410D942AFD64430801F7
      Keygrip = 8590A9CA8F1385AD2984DD1ED501B1EDA947C90C
uid           [ultimate] Example Second (Second) <example.second@example.example>
ssb>  rsa4096 2020-05-24 [E]
      056841E37C4B42D1872BC8B78805963B89C93FE1
      Card serial no. = 0006 12036855
      Keygrip = 541540C36217BEED3F9147261B050026CB93166B
sec   rsa4096 2020-05-24 [SC]
      40DB1E1705A9B52E3EFBB29EDD41A31BA28D0199
      Keygrip = D6C7F494928F6EA71BE53DA60BDEBFA0FCBC6DB2
uid           [ultimate] Example Third (Third) <example.third@example.example>
sec>  rsa4096 2020-05-24 [CA]
      46C4F15BF45B274B155F9E08E815C1EA446EE732
      Keygrip = C4EE06A7E2208178B43659AB57774A0642418A27
      Card serial no. = 0006 12036855
uid           [ultimate] Example Fourth (Authenticate) <example.fourth@example.example>
Indikace, že (pod)klíč je na kartě, je opět provedena jenom skromným znaménkem ">" a ani nemáme informaci o seriovém čísle karty.
tom@mike:~$ gpg --card-status
Reader ...........: 1050:0407:X:0
Application ID ...: D2760001240103040006120368550000
Version ..........: 3.4
Manufacturer .....: Yubico
Serial number ....: 12036855
Name of cardholder: First Example
Language prefs ...: cz
Sex ..............: male
URL of public key : [not set]
Login data .......: [not set]
Signature PIN ....: not forced
Key attributes ...: rsa2048 rsa4096 rsa4096
Max. PIN lengths .: 127 127 127
PIN retry counter : 3 0 3
Signature counter : 0
Signature key ....: [none]
Encryption key....: 0568 41E3 7C4B 42D1 872B  C8B7 8805 963B 89C9 3FE1
      created ....: 2020-05-24 20:22:25
Authentication key: 46C4 F15B F45B 274B 155F  9E08 E815 C1EA 446E E732
      created ....: 2020-05-24 21:10:10
General key info..: sub  rsa4096/8805963B89C93FE1 2020-05-24 Example Second (Second) <example.second@example.example>
sec   rsa4096/942AFD64430801F7  created: 2020-05-24  expires: never     
ssb>  rsa4096/8805963B89C93FE1  created: 2020-05-24  expires: never     
                                card-no: 0006 12036855
A ještě filesystém:
tom@mike:~$ diff .gnupg/private-keys-v1.d/ .gnupg_orig/private-keys-v1.d/ Binary files .gnupg/private-keys-v1.d/541540C36217BEED3F9147261B050026CB93166B.key and .gnupg_orig/private-keys-v1.d/541540C36217BEED3F9147261B050026CB93166B.key differ Binary files .gnupg/private-keys-v1.d/C4EE06A7E2208178B43659AB57774A0642418A27.key and .gnupg_orig/private-keys-v1.d/C4EE06A7E2208178B43659AB57774A0642418A27.key differZměna souboru (velikost + úvodní text) je stejná jako v prvním případě.
tom@mike:~$ gpg --edit-key 153130ED26CA404C8B29795B4703A5B671B96E4D
gpg (GnuPG) 2.1.18; Copyright (C) 2017 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Secret key is available.
sec  rsa2048/4703A5B671B96E4D
     created: 2020-05-24  expires: 2022-05-24  usage: SC  
     trust: ultimate      validity: ultimate
ssb  rsa2048/F1C6AE6DAF3AE8BF
     created: 2020-05-24  expires: 2022-05-24  usage: E   
ssb  rsa4096/8F2D5825D5689DE1
     created: 2020-05-24  expires: never       usage: S   
[ultimate] (1). Example First <example.first@example.example>
gpg> key 2
sec  rsa2048/4703A5B671B96E4D
     created: 2020-05-24  expires: 2022-05-24  usage: SC  
     trust: ultimate      validity: ultimate
ssb  rsa2048/F1C6AE6DAF3AE8BF
     created: 2020-05-24  expires: 2022-05-24  usage: E   
ssb* rsa4096/8F2D5825D5689DE1
     created: 2020-05-24  expires: never       usage: S   
[ultimate] (1). Example First <example.first@example.example>
gpg> keytocard
Please select where to store the key:
   (1) Signature key
   (3) Authentication key
Your selection? 1
sec  rsa2048/4703A5B671B96E4D
     created: 2020-05-24  expires: 2022-05-24  usage: SC  
     trust: ultimate      validity: ultimate
ssb  rsa2048/F1C6AE6DAF3AE8BF
     created: 2020-05-24  expires: 2022-05-24  usage: E   
ssb* rsa4096/8F2D5825D5689DE1
     created: 2020-05-24  expires: never       usage: S   
[ultimate] (1). Example First <example.first@example.example>
A obligátní výpisy
tom@mike:~$ gpg -K --with-keygrip --with-subkey-fingerprint
/home/tom/.gnupg/pubring.kbx
----------------------------
sec   rsa2048 2020-05-24 [SC] [expires: 2022-05-24]
      153130ED26CA404C8B29795B4703A5B671B96E4D
      Keygrip = 377C02935881630C7F4BA0807C8D753B6635CB90
uid           [ultimate] Example First <example.first@example.example>
ssb   rsa2048 2020-05-24 [E] [expires: 2022-05-24]
      AE19DF502047AAED7EDD98B3F1C6AE6DAF3AE8BF
      Keygrip = 383B2ACADA9228E29820F89A1C4A4F4D18408562
ssb>  rsa4096 2020-05-24 [S]
      5ABA0105F9EEDE9BD0021DC08F2D5825D5689DE1
      Card serial no. = 0006 12036855
      Keygrip = E186137C42342AA7D3588183CC4B1FB6ED590E61
sec   rsa4096 2020-05-24 [SC]
      E2066568A1FB5723B550410D942AFD64430801F7
      Keygrip = 8590A9CA8F1385AD2984DD1ED501B1EDA947C90C
uid           [ultimate] Example Second (Second) <example.second@example.example>
ssb>  rsa4096 2020-05-24 [E]
      056841E37C4B42D1872BC8B78805963B89C93FE1
      Card serial no. = 0006 12036855
      Keygrip = 541540C36217BEED3F9147261B050026CB93166B
sec   rsa4096 2020-05-24 [SC]
      40DB1E1705A9B52E3EFBB29EDD41A31BA28D0199
      Keygrip = D6C7F494928F6EA71BE53DA60BDEBFA0FCBC6DB2
uid           [ultimate] Example Third (Third) <example.third@example.example>
sec>  rsa4096 2020-05-24 [CA]
      46C4F15BF45B274B155F9E08E815C1EA446EE732
      Keygrip = C4EE06A7E2208178B43659AB57774A0642418A27
      Card serial no. = 0006 12036855
uid           [ultimate] Example Fourth (Authenticate) <example.fourth@example.example>
tom@mike:~$ diff .gnupg/private-keys-v1.d/ .gnupg_orig/private-keys-v1.d/
Binary files .gnupg/private-keys-v1.d/541540C36217BEED3F9147261B050026CB93166B.key and .gnupg_orig/private-keys-v1.d/541540C36217BEED3F9147261B050026CB93166B.key differ
Binary files .gnupg/private-keys-v1.d/C4EE06A7E2208178B43659AB57774A0642418A27.key and .gnupg_orig/private-keys-v1.d/C4EE06A7E2208178B43659AB57774A0642418A27.key differ
Binary files .gnupg/private-keys-v1.d/E186137C42342AA7D3588183CC4B1FB6ED590E61.key and .gnupg_orig/private-keys-v1.d/E186137C42342AA7D3588183CC4B1FB6ED590E61.key differ
Soubor se změnil jako v předchozích případech.
Teď zkusíme něco podepsat. Mám na flashce nějaké staré verze textu minulého dílu:
tom@mike:~$ gpg --detach-sign -a /media/tom/DTEG2_64GB/clanky/sifrovani.odtvytvoří se soubor /media/tom/DTEG2_64GB/clanky/sifrovani.odt.asc, jehož obsah vypadá nějak takto:
-----BEGIN PGP SIGNATURE----- iQIzBAABCAAdFiEEWroBBfnu3pvQAh3Ajy1YJdVoneEFAl7ehucACgkQjy1YJdVo neGZWw/+LiDDbtv42nooVfcTAFy0rMcwepn0aszCxfTlLMkBDHgVHHbBVrA+GWPF l7iki+dd7WhzcRC2ddnevRK3PACq8XaKTWMRKrC+khbd/K/K7GDKISagyZZEfGHg osVgB9kFpd0PBr6pPjanGSa+Hc4+4LhXRafSOtpWHIBY7JgQRvRSsq561sG/U1UV 1sCo0YYAqJW7doPLRBIYdPRpW1osoGenIJDFP2uV3AN78Jt3XteECu798b/Rlg4O 5xPl/vPkGKZLDfS5hA+8GUSvWr7Vr7e/GuxN3qrp9I49hrDTFDr2WsJxl5Fi4bx5 jk74FgT0A8Fs2NJjCJNx+qmeNCU3iX3h4geDFMHtc8cCzRMX30E09RB6LP6q6dzJ iVKbltalZFqi1+yR232YpKeM7D9EY48JtVzh2s9MoPCxdbCKdD5nQsyX0b2pvB/W MO8emi1vWMX4UlZphSb84FVvCBRDiwp8fTZ9jpoaQVrUvm0/9CvUNZo62MVL5mNx sPnpe06xvQXqN+fDGR1cN00KbtheY5nSdpl3mNHDkhbLTQbjXeiq6fCzTOzoIoaa xC4oeLUhGrbU6bAAT/EiDWTVfotYc6FQWZgwWFQSo+yw8+SNc3Nb8TveQ3pu0/3C tBKOJ6aggNYlaIqPH6cMNq4tmhrLQTJ0HI7jNRdsSUjlpvfsxdY= =uUz/ -----END PGP SIGNATURE-----Všiml jsem si, že se soubor podepsal hned a nečekal na ťuknutí prstem. K tomu se vrátím později. Vytáhneme Yubikey5 a zkusíme podepsat znovu.
tom@mike:~$ gpg --detach-sign -a /media/tom/DTEG2_64GB/clanky/sifrovani.odtVyskočí na nás velmi otravné okno s textem
Please insert the card with serial number: "D2760001240103040006120368550000"To číslo jsme už viděli na začátku, jenom se mu říkalo
Application ID.
~/bin/yubitouch.sh sig on 12345678To číslo na konci je Admin PIN. Když ho nezadáte, tak se zeptá. Je v tom nějaká alchymie, protože mi to několikrát zahlásilo
Verification failed, wrong pin?Nakonec to ale prošlo. O nastavení se můžeme převědčit pomocí příkazu:
tom@mike:~$ ~/bin/yubitouch.sh sig get Current sig touch setting: onKdyž se znovu pokusíme něco podepsat, Yubikey se na nás rozbliká na znamení, že čeká na naší reakci. Je potřeba držet prst trošku déle, dokud neuvidíte, že GPG doběhlo. Může to být i několik sekund. Stejně si nastavíme, že vyžadujeme dotyk i pro ostatní akce
tom@mike:~$ ~/bin/yubitouch.sh aut on 12345678 All done! tom@mike:~$ ~/bin/yubitouch.sh dec on 12345678 All done!Podrobné informace o možných akcích najdete na výše zmíněné stránce.
tom@mike:~$ gpg --card-status Reader ...........: 1050:0407:X:0 Application ID ...: D2760001240103040006105300770000 Version ..........: 3.4 Manufacturer .....: Yubico Serial number ....: 10530077 Name of cardholder: [not set] Language prefs ...: [not set] Sex ..............: unspecified URL of public key : [not set] Login data .......: [not set] Signature PIN ....: not forced Key attributes ...: rsa2048 rsa2048 rsa2048 Max. PIN lengths .: 127 127 127 PIN retry counter : 3 0 3 Signature counter : 0 Signature key ....: [none] Encryption key....: [none] Authentication key: [none] General key info..: [none]Jak vidíme, Application ID i Serial number se liší. Teď zkusíme přeunout na kartu již přesunutý klíč. Samozřejmě očekávám, že to skončí chybou.
tom@mike:~$ gpg --edit-key 46C4F15BF45B274B155F9E08E815C1EA446EE732
gpg (GnuPG) 2.1.18; Copyright (C) 2017 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Secret key is available.
sec  rsa4096/E815C1EA446EE732
     created: 2020-05-24  expires: never       usage: CA  
     card-no: 0006 12036855
     trust: ultimate      validity: ultimate
[ultimate] (1). Example Fourth (Authenticate) <example.fourth@example.example>
gpg> keytocard
Really move the primary key? (y/N) y
Please select where to store the key:
   (1) Signature key
   (3) Authentication key
Your selection? 3
gpg: KEYTOCARD failed: Unusable secret key
Přiznám se, že kdybych něvěděl, co jsem tropil, tak bych z hlášky nepochopil, v čem je problém.
Teď ze zálohy obnovím adresář .gnupg a zkusím znovu přesunout stejný klíč.
tom@mike:~$ gpg --edit-key 46C4F15BF45B274B155F9E08E815C1EA446EE732
gpg (GnuPG) 2.1.18; Copyright (C) 2017 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Secret key is available.
sec  rsa4096/E815C1EA446EE732
     created: 2020-05-24  expires: never       usage: CA  
     trust: ultimate      validity: ultimate
[ultimate] (1). Example Fourth (Authenticate) <example.fourth@example.example>
gpg> keytocard
Really move the primary key? (y/N) y
Please select where to store the key:
   (1) Signature key
   (3) Authentication key
Your selection? 3
sec  rsa4096/E815C1EA446EE732
     created: 2020-05-24  expires: never       usage: CA  
     trust: ultimate      validity: ultimate
[ultimate] (1). Example Fourth (Authenticate) <example.fourth@example.example>
tom@mike:~$ gpg -K --with-keygrip
/home/tom/.gnupg/pubring.kbx
----------------------------
sec   rsa2048 2020-05-24 [SC] [expires: 2022-05-24]
      153130ED26CA404C8B29795B4703A5B671B96E4D
      Keygrip = 377C02935881630C7F4BA0807C8D753B6635CB90
uid           [ultimate] Example First <example.first@example.example>
ssb   rsa2048 2020-05-24 [E] [expires: 2022-05-24]
      Keygrip = 383B2ACADA9228E29820F89A1C4A4F4D18408562
ssb   rsa4096 2020-05-24 [S]
      Keygrip = E186137C42342AA7D3588183CC4B1FB6ED590E61
sec   rsa4096 2020-05-24 [SC]
      E2066568A1FB5723B550410D942AFD64430801F7
      Keygrip = 8590A9CA8F1385AD2984DD1ED501B1EDA947C90C
uid           [ultimate] Example Second (Second) <example.second@example.example>
ssb   rsa4096 2020-05-24 [E]
      Keygrip = 541540C36217BEED3F9147261B050026CB93166B
sec   rsa4096 2020-05-24 [SC]
      40DB1E1705A9B52E3EFBB29EDD41A31BA28D0199
      Keygrip = D6C7F494928F6EA71BE53DA60BDEBFA0FCBC6DB2
uid           [ultimate] Example Third (Third) <example.third@example.example>
sec>  rsa4096 2020-05-24 [CA]
      46C4F15BF45B274B155F9E08E815C1EA446EE732
      Keygrip = C4EE06A7E2208178B43659AB57774A0642418A27
      Card serial no. = 0006 10530077
uid           [ultimate] Example Fourth (Authenticate) <example.fourth@example.example>
Jak se dalo čekat, teď už to dopadlo dobře. GPG má poznamenáno, že klíč je na druhé kartě.
A nakonec si ukážeme factory reset.
tom@mike:~$ gpg --edit-card
Reader ...........: 1050:0407:X:0
Application ID ...: D2760001240103040006105300770000
Version ..........: 3.4
Manufacturer .....: Yubico
Serial number ....: 10530077
Name of cardholder: [not set]
Language prefs ...: [not set]
Sex ..............: unspecified
URL of public key : [not set]
Login data .......: [not set]
Signature PIN ....: not forced
Key attributes ...: rsa2048 rsa2048 rsa4096
Max. PIN lengths .: 127 127 127
PIN retry counter : 3 0 3
Signature counter : 0
Signature key ....: [none]
Encryption key....: [none]
Authentication key: 46C4 F15B F45B 274B 155F  9E08 E815 C1EA 446E E732
      created ....: 2020-05-24 21:10:10
General key info..: pub  rsa4096/E815C1EA446EE732 2020-05-24 Example Fourth (Authenticate) <example.fourth@example.example>
sec>  rsa4096/E815C1EA446EE732  created: 2020-05-24  expires: never     
                                card-no: 0006 10530077
gpg/card> help
quit           quit this menu
admin          show admin commands
help           show this help
list           list all available data
fetch          fetch the key specified in the card URL
passwd         menu to change or unblock the PIN
verify         verify the PIN and list all data
unblock        unblock the PIN using a Reset Code
gpg/card> admin
Admin commands are allowed
gpg/card> help
quit           quit this menu
admin          show admin commands
help           show this help
list           list all available data
name           change card holder's name
url            change URL to retrieve key
fetch          fetch the key specified in the card URL
login          change the login name
lang           change the language preferences
sex            change card holder's sex
cafpr          change a CA fingerprint
forcesig       toggle the signature force PIN flag
generate       generate new keys
passwd         menu to change or unblock the PIN
verify         verify the PIN and list all data
unblock        unblock the PIN using a Reset Code
factory-reset  destroy all keys and data
gpg/card> factory-reset
gpg: OpenPGP card no. D2760001240103040006105300770000 detected
gpg: Note: This command destroys all keys stored on the card!
Continue? (y/N) y
Really do a factory reset? (enter "yes") yes
Celá operace nechtěla PIN. Takže myslete na to, že kdokoliv, komu dáte token do ruky, vám může smazat celou kartu.
        Tiskni
            
                Sdílej:
                 
                 
                 
                 
                 
                 
            
    
autentizační klíč. Podle dokumentace (https://www.gnupg.org/howtos/card-howto/en/ch03.html) ho sice GPG nepoužívá
Může ho používat např. gpg-agent pro ssh autentizaci. Není to sice přímo příkaz gpg, ale je součástí stejného projektu a obvykle i stejného balíčku.
Ještě jsem zkusil zasunout 2 tokeny najednou a vypsat informace. Zkoušel jsem různé pořadí zasunutí a vždy se vypsal informace ke stejnému tokenu (v mém případě Yubikey nano). Nenašel jsem postup, jak vypsat všechny karty, případně zvolit kartu.
Tak zrovna s tímhle jsem si dneska naběhl. Token, který mi na hlavním počítači bezproblémově fungoval, jsem chtěl vyzkoušet v notebooku a nedokázal jsem ho donutit ke spolupráci, pořád mi to tvrdilo, že "Takové zařízení neexistuje". Po asi půlhodině usilovného debugování (během které jsem se od gpg přes gpg-agent dostal až k scdaemon) mi došlo, že "Broadcom Corp 5880 [Contacted SmartCard]" je čtečka smart karet vestavěná v tom notebooku, kterou jsem nikdy k ničemu praktickému nepoužil a tudíž jsem zapomněl, že tam vůbec je. Ten scdaemon si ji automaticky vybral a protože v ní žádná karta nebyla, skončilo to chybou.
Pak ještě následovalo hledání v dokumentaci a experimentování se správnou syntaxí. Nakonec jsem skončil se souborem ~/.gnupg/scdaemon.conf obsahujícím řádek
reader-port Nitrokey Nitrokey Pro (000000000000000000007F04) 01 00
S tím už všechno funguje jak má.
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.