(2019-10-01 14:27:20 отредактировано yazero)

Gnupg openpgp rutoken (РЕШЕНА)

Есть идя подписывать пакеты  rpmsign --addsing *.rpm сгенерированным ключем  gpg --gen-key .
Но хранить данные ключи на устройстве rutoken  подписанным  самоподписным сертификатом , который храниться на токене. 

gpg --gen-key
gpg --export -a 'mykey' > KEY
rpm --impor KEY
rpmsign --addsing *.rpm   (или через .rpmmacros)

А может иду не тем путем .

p.s.  тут был
https://dev.rutoken.ru/pages/viewpage.a … Id=2228266

(2019-09-26 16:55:55 отредактировано yazero)

Re: Gnupg openpgp rutoken (РЕШЕНА)

rsa это механизм создания пару ключей pub/private

Но формат данных это не механизм.

на рутокен  rsa   в своем формате

на openpgp
rsa pgppublickey/pgpsecretkey


Даже если сгенерировать rsa на токене, то данная пара является не извлекаемой.


https://craftware.xyz/securitybricks/20 … h-pgp.html
Но как здесь происходит магия не понятно.  etoken тоже не входит в список поддерживаемых устройств openpgp

сам утилита opensc-tool  может работать с этими ключами.

$ gnupg-pkcs11-scd --daemon
$ gpg-agent --daemon
$ gpg-agent --server

gpg --card-edit не видит  ее.

gpg --card-edit

gpg: WARNING: server 'scdaemon' is older than us (0.9.2 < 2.2.12)
gpg: Note: Outdated servers may lack important security fixes.
gpg: Note: Use the command "gpgconf --kill all" to restart them.
Reader ...........: [none]
Application ID ...: D27600012401115031310E1ECC471111
Version ..........: 11.50
Manufacturer .....: unknown
Serial number ....: 0E1ECC47
Name of cardholder: [not set]
Language prefs ...: [not set]
Sex ..............: unspecified
URL of public key : [not set]
Login data .......: [not set]
Signature PIN ....: forced
Key attributes ...: rsa48 rsa48 rsa48
Max. PIN lengths .: 0 0 0
PIN retry counter : 0 0 0
Signature counter : 0
Signature key ....: [none]
Encryption key....: [none]
Authentication key: [none]
General key info..: [none]

opensc-tool --list-drivers
Configured card drivers:
  cardos           Siemens CardOS
  flex             Schlumberger Multiflex/Cryptoflex
  cyberflex        Schlumberger Cyberflex
  gpk              Gemplus GPK
  gemsafeV1        Gemalto GemSafe V1 applet
  asepcos          Athena ASEPCOS
  starcos          STARCOS
  tcos             TCOS 3.0
  oberthur         Oberthur AuthentIC.v2/CosmopolIC.v4
  authentic        Oberthur AuthentIC v3.1
  iasecc           IAS-ECC
  belpic           Belpic cards
  incrypto34       Incard Incripto34
  acos5            ACS ACOS5 card
  akis             TUBITAK UEKAE AKIS
  entersafe        entersafe
  epass2003        epass2003
  rutoken          Rutoken driver
  rutoken_ecp      Rutoken ECP driver
  myeid            MyEID cards with PKCS#15 applet
  dnie             DNIe: Spanish eID card
  MaskTech         MaskTech Smart Card
  atrust-acos      A-Trust ACOS cards
  westcos          WESTCOS compatible cards
  muscle           MuscleApplet
  sc-hsm           SmartCard-HSM
  mcrd             MICARDO 2.1 / EstEID 1.0 - 3.5
  setcos           Setec cards
  PIV-II           Personal Identity Verification Card
  cac              Common Access Card (CAC)
  itacns           Italian CNS
  isoApplet        Javacard with IsoApplet
  gids             GIDS Smart Card
  openpgp          OpenPGP card
  jpki             JPKI(Japanese Individual Number Cards)
  coolkey          COOLKEY
  npa              German ID card (neuer Personalausweis, nPA)
  default          Default driver for unknown cards

Re: Gnupg openpgp rutoken (РЕШЕНА)

yazero пишет:

Есть идя подписывать пакеты  rpmsign --addsing *.rpm сгенерированным ключем  gpg --gen-key .
Но хранить данные ключи на устройстве rutoken  подписанным  самоподписным сертификатом , который храниться на токене.

Здравствуйте. Почему именно gpg? Чем не устраивает OpenSSL?

Re: Gnupg openpgp rutoken (РЕШЕНА)

Я тоже пока не могу найти. Если эта штука работает только с gpg, то нужен специальный токен или карта.
Такие токены или карты должны поддерживать спецификацию OpenPGP Card. Это как бы совсем отдельная история.
Существовал еще проект, позволявший использовать PKCS#11 токены или карты с gpg. Что с ним случилось, я лично не знаю. Страничка проекта http://alon.barlev.googlepages.com/gnupg-pkcs11 нынче в 404.
Видимо проект переехал сюда: https://github.com/alonbl/gnupg-pkcs11-scd. Нужно будет сконфигурировать под нашу библиотеку PKCS#11 и попробовать.
Из токенов тут лучше всего наверное подойдет Рутокен ЭЦП PKI, но Рутокен ЭЦП 2.0 тоже можно использовать.

Есть еще такое:
http://gnupg-pkcs11.sourceforge.net/

Re: Gnupg openpgp rutoken (РЕШЕНА)

yazero пишет:

всё поставил уже поставил, собрал, сконфигурил(без патчей).   
но на данный момент   сертификаты не видны в gpg --list-keys

хотя  видно  что сертификаты сгенеренные  на ключе есть.  но походу не те что нужно

А чем генерили ключи и сертификаты?

(2019-10-22 10:29:27 отредактировано yazero)

Re: Gnupg openpgp rutoken (РЕШЕНА)

openssl>engine dynamic -pre SO_PATH:/usr/lib/engines/engine_pkcs11.so -pre ID:pkcs11 -pre LIST_ADD:1 -pre LOAD -pre MODULE_PATH:libtoken.so

openssl>req -engine pkcs11 -new -key slot_0-id_01 -keyform engine -x509 -out my.pem -text

#pkcs11-tool --module /usr/lib/libtoken.so --login --write-object my.der --type cert --id 01 --label "john@snow.com"



после этого-го

gpg-agent --server
SCD LEARN

gnupg-pkcs11-scd[1093]: chan_0 -> S KEY-FRIEDNLY AB628AB5CFE5DB16EEC410B076C1F308B6082745 /C=RU/ST=msk/L=msk/O=pochta/OU=it/CN=1/emailAddress=yazero@yandex.ru on rutoken_test
gpg-agent[1092]: DBG: chan_5 <- S KEY-FRIEDNLY AB628AB5CFE5DB16EEC410B076C1F308B6082745 /C=RU/ST=1/L=1/O=pochta/OU=it/CN=1/emailAddress=yazero@yandex.ru on rutoken_test
gpg-agent[1092]: DBG: chan_3 -> S KEY-FRIEDNLY AB628AB5CFE5DB16EEC410B076C1F308B6082745 /C=RU/ST=1/L=saint peterburg/O=pochta/OU=it/CN=1/emailAddress=yazero@yandex.ru on rutoken_test
S KEY-FRIEDNLY AB628AB5CFE5DB16EEC410B076C1F308B6082745 /C=RU/ST=saint peterburg/L=saint peterburg/O=pochta/OU=it/CN=1.ru/emailAddress=yazero@yandex.ru on rutoken_test
gnupg-pkcs11-scd[1093]: chan_0 -> S CERTINFO 101 Aktiv\x20Co\x2E/Rutoken\x20ECP/333d7d35/rutoken_test/01
gpg-agent[1092]: DBG: chan_5 <- S CERTINFO 101 Aktiv\x20Co\x2E/Rutoken\x20ECP/333d7d35/rutoken_test/01
gpg-agent[1092]: DBG: chan_3 -> S CERTINFO 101 Aktiv\x20Co\x2E/Rutoken\x20ECP/333d7d35/rutoken_test/01
S CERTINFO 101 Aktiv\x20Co\x2E/Rutoken\x20ECP/333d7d35/rutoken_test/01
gnupg-pkcs11-scd[1093]: chan_0 -> S KEYPAIRINFO AB628AB5CFE5DB16EEC410B076C1F308B6082745 Aktiv\x20Co\x2E/Rutoken\x20ECP/333d7d35/rutoken_test/01
gpg-agent[1092]: DBG: chan_5 <- S KEYPAIRINFO AB628AB5CFE5DB16EEC410B076C1F308B6082745 Aktiv\x20Co\x2E/Rutoken\x20ECP/333d7d35/rutoken_test/01
gpg-agent[1092]: DBG: chan_3 -> S KEYPAIRINFO AB628AB5CFE5DB16EEC410B076C1F308B6082745 Aktiv\x20Co\x2E/Rutoken\x20ECP/333d7d35/rutoken_test/01
S KEYPAIRINFO AB628AB5CFE5DB16EEC410B076C1F308B6082745 Aktiv\x20Co\x2E/Rutoken\x20ECP/333d7d35/rutoken_test/01

выполняю
#gpg2 --card-edit

в папке  появляется файл
/root/private-keys-v1.d/AB628AB5CFE5DB16EE~1F308B6082745.key

паблик он не видит. пробовал удалить  как тут написано
pkcs11-tool --module /usr/lib/libeToken.so --login --delete-object --type pubkey --id 1
https://craftware.xyz/securitybricks/20 … h-pgp.html

пробовал удалить все ключи с хоста. как тут доке написано
https://github.com/alonbl/gnupg-pkcs11- … /ChangeLog

ACTION REQUIRED
   in order to assign new card serial number to existing keys.
   backup your ~/.gnupg.
   delete all PKCS#11 secret keys using:
       gpg --delete-secret-keys $KEY then
   Then refresh keys using:
       gpg --card-edit
   In <gnupg-2.1.19 the keys should be re-generated using:
       admin
       generate
   Do not replace keys!
   gpg will learn the private keys of the new card and attach to
   the existing public keys.



пока застрял

Re: Gnupg openpgp rutoken (РЕШЕНА)

может нужно что то доделать
пока читаю  https://dev.rutoken.ru/pages/viewpage.a … d=18055179

Re: Gnupg openpgp rutoken (РЕШЕНА)

yazero, а как решили вопрос?

Re: Gnupg openpgp rutoken (РЕШЕНА)

Sammy, добрый день.

Приношу извинения за задержку с ответом.

Чтобы экспортировать ключ с токена, надо использовать

gpg --expert --full-generate-key

вместо

gpg —card-edit

Далее нужно будет выбрать 13ую опцию из предложенных (импорт существующего RSA ключа).
Затем потребуется указать хеш сертификата ключа, который можно узнать через

gpg-agent --server
SCD LEARN

В описанном случае это вероятно, AB628AB5CFE5DB16EEC410B076C1F308B6082745

Далее выбрать параметры ключей, что они 2048битные и их нужно записать на определенный username и email

(2019-12-03 13:38:27 отредактировано yazero)

Re: Gnupg openpgp rutoken (РЕШЕНА)

описание скрипта
https://github.com/ya-zero/ya-zero.gith … utoken.pdf

vagrant + скриты
https://github.com/ya-zero/ya-zero.gith … ds/rutoken


Один из важных моментов ( man gnupg-pkcs11-scd ) это как импортировать ключ.
в доке https://craftware.xyz/securitybricks/20 … h-pgp.html
(как написали выше)  нужно было использовать режим   gpg2 card-edit , то в новых версиях это поменялось(я пытался указать в конфиге ключи) и делается еще прощу.  в ubuntu 1904 работает из коробки. если возникают проблемы   к примеру по

gpg-agent --server
OK Pleased to meet you
SCD LEARN

нет id ключа. то у меня это было  из за старых версий пакетов.

 Signing, verification, etc. work as usual with gpg.

     Typical steps to set up a card for >=gpg-2.1.19 usage:

     1.   Refresh local key store:
                gpg --card-status

     2.   Acquire key ids:
                gpg-agent --server gpg-connect-agent
          Enter "SCD LEARN" and look for "KEY-FRIEDNLY" responses, the first field is the keygrip, the second is the
          subject name.

     3.   Create master key based on existing key using:
                gpg --expert --full-generate-key
          Select:
                (13) Existing key
          Enter keygrip to be used as primary key.

     4.   Continue as usual to setup your primary key, you should probably use signature for master key.

     5.   Add subkey using:
                gpg --expert --edit-key ${MASTER_KEY_ID}
                gpg> addkey
                (13) Existing key
          Enter keygrip to be used as subkey.

     6.   Continue as usual to setup your subkey.