Управление на обекти в RIPE DB чрез OpenPGP идентификация

Версия 1.4.1, 18 юни 2008

Веселин Колев, Софийски Университет "Св. Климент Охридски"

Адрес за кореспонденция: vesso AT vesselin.org

Първоизточник: http://www.vesselin.org

Лиценз на документа: CC Attribution-ShareAlike

 

Съдържание:

  1. Създаване на mntner обект за защита на обекта за OpenPGP сертификата

  2. Създаване на key-cert обект за OpenPGP сертификат

  3. Промяна на метода за удостоверяване, зададен в mntner обекта защитаващ key-cert обекта

  4. Създаване и електронно подписване на шаблони за управление на обекти и изпращането им като заявка към RIPE DB

  5. Предишни версии на публикацията

 

Забележка. Създаването на mntner и key-cert обектите става чрез услугата syncupdate-minimal на RIPE, която е достъпна на адрес:
https://www.ripe.net/db/syncupdates/syncupdate-minimal.html
Особеност на тази услуга е, че съобщава статуса на изпращаната към базата данни на RIPE промяна, веднага след изпращането на заявката.

 

1. Създаване на mntner обект за защита на обекта за OpenPGP сертификата

Когато в RIPE DB се създава обект key-cert, той трябва да има попълнено поле mnt-by, за да може да бъде защитен от евентуална промяна от страна на произволен потребител на базата. Следователно хронологично първо трябва да се създаде mntner обект за защита на обекта от тип key-cert и след това последния да бъде създаден. Така още от създаването си обектът ще бъде заключен за несанкционирани промени.

Първоначално mntner обекта ще бъде защитен с парола, за която трябва да бъде пресметнат MD5 хеш, във формата, в който този хеш се използва в системата за удостоверяване на потребителите в UNIX (в Linux така се хешират паролите в /etc/shadow). Това може да стане по два начина:

 

 

За примера по-долу ще се предполага, че пресметнатия и форматиран хеш има стойността:

$1$dLtHNram$MWTlIjg7PPdfVCOv3AL1g0

След като бъде изчислен хеша на паролата, в текстовото поле за въвеждане на информация на услугата syncupdate-minimal , се съставя шаблона за изграждане на mntner обекта:

Въвеждане на шаблона за изграждане на mntner обекта

За да се изпрати заявката към базата данни, се натиска бутона "Submit Query". Съобщението за успешно изпълнена заявка за изграждане на mntner обект има вида:

 - From-Host: 62.44.127.1
 - Date/Time: Wed Sep  6 18:13:35 2006


SUMMARY OF UPDATE:

Number of objects found:                   1
Number of objects processed successfully:  1
  Create:         1
  Modify:         0
  Delete:         0
  No Operation:   0
Number of objects processed with errors:   0
  Create:         0
  Modify:         0
  Delete:         0
  Syntax Errors:  0


DETAILED EXPLANATION:
      
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
The following object(s) were processed SUCCESSFULLY:
      

---
Create SUCCEEDED: [mntner] OPENPGP_A038775B-MNT

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    

For assistance or clarification please contact:
RIPE Database Administration <ripe-dbm@ripe.net>

 

2. Създаване на key-cert обект за OpenPGP сертификат

За примерите по-долу ще се приема, че в базта на RIPE ще се поставя сертификат с шестнадесетичен идентификатор на публичния ключ A038775B.

Копие на OpenPGP сертификата се изтегля от базата със сертификати на gnupg и се запазва в ASCII форматиран файл:

$ gpg -a --export A038775B > A038775B.asc

Чрез този команден ред във файла A038775B.asc (намиращ се в текущата за изпълнение на командния ред директория), ще бъде записано копие от OpenPGP сертификата със шестнадесетично ID A038775B. Разбира се, всеки може да кръсти файла с произволно име и не е задължително то да включва шестнадесетичния идентификатор на публичния ключ на OpenPGP сертификата. Горното наименоване просто отразява една възможна добра практика.

За да може копирания във файла сертификат да се изпрати за запис в базата на RIPE, трябва съдържанието на файла да се форматира. Формарирането засяга всеки ред на файла и се състои в поставянето на символния низ certif: в началото на всеки ред. Ето един кратък команден ред (bash скрипт), който чете файла A038775B.asc, прибавя "certif: " в началото на всеки ред и резултата записва във файла A038775B.asc.ripe:

$ while read line; do echo "certif: ${line}" >> A038775B.asc.ripe; done < A038775B.asc

След това файлът A038775B.asc.ripe се отваря с текстов редактор и в началото на файла се добавя ред, който съдържа специално форматиран низ:

key-cert: PGPKEY-A038775B

Уникалното в този низ е шестнадесетичния идентификатор на публичния ключ в основата на OpenPGP сертификата (за примера това е A038775B).

В края на файла трябва да се прибавят останалите записи, необходими за да може цялото му съдържание да бъде изпратено за запис в базата данни на RIPE:

mnt-by:  OPENPGP_A038775B-MNT
changed: certadmin@certs.lcpe.uni-sofia.bg 20060908
password: паролата_от_която_е_получен_MD5_хеша
source:  RIPE

След успешното извършване на тези стъпки, във файла A038775B.asc.ripe ще се намира шаблона за създаването на key-cert обекта PGPKEY-A038775B. Този шаблон се копира в текстовото поле за въвеждане на информация на услугата syncupdate-minimal :

Въвеждане на шаблона за изграждане на key-cert обекта

За да се изпрати заявката към базата данни, се натиска бутона "Submit Query". Съобщението за успешно изпълнена заявка за изграждане на key-cert обект ще има вида:

 - From-Host: 62.44.127.1
 - Date/Time: Wed Sep  6 18:18:06 2006


SUMMARY OF UPDATE:

Number of objects found:                   1
Number of objects processed successfully:  1
  Create:         1
  Modify:         0
  Delete:         0
  No Operation:   0
Number of objects processed with errors:   0
  Create:         0
  Modify:         0
  Delete:         0
  Syntax Errors:  0


DETAILED EXPLANATION:
      
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
The following object(s) were processed SUCCESSFULLY:
      

---
Create SUCCEEDED: [key-cert] PGPKEY-A038775B

***Info: Authorisation for  [mntner] OPENPGP_A038775B-MNT
         using mnt-by:
         authenticated by: OPENPGP_A038775B-MNT

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

 

3. Промяна на метода за удостоверяване, зададен в mntner обекта защитаващ key-cert обекта

След като key-cert обекта е създаден, защитата на mntner обекта, полето

auth: MD5-PW $1$dLtHNram$MWTlIjg7PPdfVCOv3AL1g0

може да се замени с

auth: PGPKEY-A038775B

Възможно е задаването на повече от един ред за "auth" и следователно указването на повече от един OpenPGP сертификат за управление на обекта.

Актуализираният шаблон се въвежда в полето на услугата syncupdate-minimal :

Въвеждане на шаблона за промяна на mntner обекта

За да се изпрати заявката към базата данни, се натиска бутона "Submit Query". Съобщението за успешно изпълнена заявка за промяна на mntner обекта ще има вида:

 - From-Host: 62.44.127.1
 - Date/Time: Wed Sep  6 18:21:41 2006


SUMMARY OF UPDATE:

Number of objects found:                   1
Number of objects processed successfully:  1
  Create:         1
  Modify:         0
  Delete:         0
  No Operation:   0
Number of objects processed with errors:   0
  Create:         0
  Modify:         0
  Delete:         0
  Syntax Errors:  0


DETAILED EXPLANATION:
      
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
The following object(s) were processed SUCCESSFULLY:
      

---
Modify SUCCEEDED: [mntner] OPENPGP_A038775B-MNT

***Info: Authorisation for  [mntner] OPENPGP_A038775B-MNT
         using mnt-by:
         authenticated by: OPENPGP_A038775B-MNT

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

След тази промяна, самият обект и всички обекти, които са подчинени само от този mntner обект, могат да бъдат модифицирани (и изтривани) само чрез електронно подписване на подавания като заявка към базата на RIPE шаблон.

 

4. Създаване и електронно подписване на шаблони за управление на обекти и изпращането им като заявка към RIPE DB

След като mntner обекта и подчинените му се управляват само и единствено чрез заявки към базата данни на RIPE, които представляват електронно подписани шаблони, то следва да се уточни формата на подписаните заявки.

Електронно подписаните чрез OpenPGP сертификат заявки към базата данни на RIPE, следват т.нар. "inline" формат. Той може да се реализира много лесно, ако шаблонът на заявката за модифициране на обект се опише в текстов файл и след края на записа този файл бъде подписан чрез инструментариума на пакета gnupg.

Ето примерен шаблон за модифициране на обекта OPENPGP_A038775B-MNT, който за примера ще се намира във текстовия файл с име object-mod.txt:

mntner:         OPENPGP_A038775B-MNT
descr:          mntner object for OpenPGP cert with ID 0xA038775B
admin-c:        VK1242-RIPE
tech-c:         VK1242-RIPE
upd-to:         certadmin@certs.lcpe.uni-sofia.bg
auth:           PGPKEY-A038775B
mnt-by:         OPENPGP_A038775B-MNT
refferal-by:    OPENPGP_A038775B-MNT
changed:        certadmin@certs.lcpe.uni-sofia.bg 20060906
changed:        certadmin@certs.lcpe.uni-sofia.bg 20060907
changed:        certadmin@certs.lcpe.uni-sofia.bg 20060908
source:         RIPE

Следва електронно подписване чрез инструмента gpg (разбира се, на системата, на която ще се извършва подписването, трябва да присъства частния ключ от двойката в основата на сертификата, чиито публичен ключ има ID A038775B):

$ gpg --default-key A038775B --digest-algo sha256 --clearsign object-mod.txt

You need a passphrase to unlock the secret key for
user: "Certificate Administrator (Default Key) <certadmin@certs.lcpe.uni-sofia.bg>"
4096-bit RSA key, ID A038775B, created 2004-07-23

Enter passphrase:

След успешното въвеждане на паролата за защита на частния ключ, подписването ще бъде извършено и подписаният шаблон за заявката ще се намира във файла object-mod.txt.asc. Неговото съдържание ще бъде подобно на това:

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256

mntner:         OPENPGP_A038775B-MNT
descr:          mntner object for OpenPGP cert with ID 0xA038775B
admin-c:        VK1242-RIPE
tech-c:         VK1242-RIPE
upd-to:         certadmin@certs.lcpe.uni-sofia.bg
auth:           PGPKEY-A038775B
mnt-by:         OPENPGP_A038775B-MNT
refferal-by:    OPENPGP_A038775B-MNT
changed:        certadmin@certs.lcpe.uni-sofia.bg 20060906
changed:        certadmin@certs.lcpe.uni-sofia.bg 20060907
changed:        certadmin@certs.lcpe.uni-sofia.bg 20060908
source:         RIPE

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.6 (GNU/Linux)

iQIVAwUBRbSl27afyWmgOHdbAQrmZQ//ZvjmYVEsN/LfWvhWXN+VKP0eiSQjtrw7
yyEqBMjpJCIr7JaHuvXUo/tULN9e2qNEi0RxSfexgyi62ckvFgp/fPaojBXt0Gwx
6tY6t9gFTGPpWKLVDYvXgLeyU9+e86f1/Z22HtK5ffIxYaEZ9IQJ6bGPzzLgA98d
ZfUIngX6yjGQWQtayVTRCCUaZebfrg7Esn8kgY5RkaPsvrogHvIlMRobRY+t6jhL
khDnDvY3Fy6S8YZ+5QDtKs4uuCclyfNN5HD4JMQxHA1ay4qsBFw8flBn8w22IWVU
9Pr3rAifqmWyxHB7jmfSoPZWTc24peV4FIMa7BiOCgjV5wWsWUP+V9wvj79LLYYd
ZVkzkzRVBGPlkionbgUKqW8fZpU78i6nxx2z4F0YQkLm9cx75LsjO04Ho0N+oKmx
HIWu8iW22pU1NH0SlKv5YEINFeWTabZwpjX+4QQ+Pk3fS4pEbR4gIlyCVhwBS+kg
J+cxtXOI5ItPcFDhUMHGJs8pR2/ceceu89DKLGr8J0mjrpIp+LCpanwzW9cn/4k6
guryUkNxCMq6d40sqHx/vQyykTYYxAt9OIYYycnGxOw6RttR+w6FjGpDjhXRht5R
vdfCNrbX3buCEqI7xhVcxZCbQvb3VkWjdTGUbNSQNMzhPqvM+t2LDsEaTlgma7dz
5uXhYycwHKs=
=YJ16
-----END PGP SIGNATURE-----

Съдържанието на файла object-mod.txt.asc не бива да се променя, защото ще се наруши валидността на електронния подпис. Ако трябва част от шаблона да се премодифицира, се модифицира съдържанието на файла object-mod.txt и след това пак чрез електронно подписване, като показаното по-горе, се генерира подписания шаблон във файла object-mod.txt.asc.

За да се изпрати към RIPE DB заявката за промяна на обекта, разглеждан в примерния шаблон по-горе, електронно подписаното съдържание на шаблона, се копира изцяло и без да се променя се поставя в текстовото поле за изпращане на заявки към базата данни на RIPE, което се предлага в рамките на услугата syncupdate-minimal :

Въвеждане на подписания шаблон за промяна на mntner обекта

За да се изпрати заявката към базата данни, се натиска бутона "Submit Query". Съобщението за успешно изпълнена заявка за промяна на mntner обекта ще има вида:

 - From-Host: 62.44.127.1
 - Date/Time: Fri Sep  8 22:12:37 2006


SUMMARY OF UPDATE:

Number of objects found:                   1
Number of objects processed successfully:  1
  Create:         1
  Modify:         0
  Delete:         0
  No Operation:   0
Number of objects processed with errors:   0
  Create:         0
  Modify:         0
  Delete:         0
  Syntax Errors:  0


DETAILED EXPLANATION:
      
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
The following object(s) were processed SUCCESSFULLY:
      

---
Modify SUCCEEDED: [mntner] OPENPGP_A038775B-MNT

***Info: Authorisation for  [mntner] OPENPGP_A038775B-MNT
         using mnt-by:
         authenticated by: OPENPGP_A038775B-MNT

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

 

ВНИМАНИЕ! Описаният по-долу метод е податлив на колизии и следва да не се използва! За повече информация относно механизма на колизии, виж "Колизии на електронно подписани заявки "без билет" (с примери за RIPE DB) ", 2007, Веселин Колев.

 

Друг, много удобен начин за изпращане на електронно подписаната заявка към базата данни на RIPE, е чрез пощенски клиент. Отваря се бланка за ново писмо, съдържанието на файла object-mod.txt.asc се копира в тялото на бланката и се изпраща на адрес auto-dbm@ripe.net. Автоматично генерираното съобщение за статуса на заявката към базата данни, се изпраща на електронния пощенски адрес, от чието име е изпратено писмото. Ако пощенският клиент поддържа OpenPGP, подписването може да стане и при съставянето на писмото. В този случай шаблонът може да се сглоби в бланката за писмото.

Изпращането на писмо може да се осъществи и без да се използва клиент за електронна поща, чрез "инжектиране" на писмото в опашката на Sendmail (не е задължително да има стартиран демон на локалната за изпращането на писмото машина - достатъчно е да може да се стартира "submit" процес). В този случай файлът object-mod.txt.asc може да се модифицира така. Преди

-----BEGIN PGP SIGNED MESSAGE-----

се поставят редове, който да придадат формат на писмото, за да може да бъде обработено от пощенския робот на RIPE:

From: Certificate Administrator <certadmin@certs.lcpe.uni-sofia.bg>
To: AUTO DBM <auto-dbm@ripe.net>
Subject: Update

така, че след промяната съдържанието на файла object-mod.txt.asc ще има вида:

From: Certificate Administrator <certadmin@certs.lcpe.uni-sofia.bg>
To: AUTO DBM <auto-dbm@ripe.net>
Subject: Update

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

mntner:         OPENPGP_A038775B-MNT
descr:          mntner object for OpenPGP cert with ID 0xA038775B
admin-c:        VK1242-RIPE
tech-c:         VK1242-RIPE
upd-to:         certadmin@certs.lcpe.uni-sofia.bg
auth:           PGPKEY-A038775B
mnt-by:         OPENPGP_A038775B-MNT
refferal-by:    OPENPGP_A038775B-MNT
changed:        certadmin@certs.lcpe.uni-sofia.bg 20060906
changed:        certadmin@certs.lcpe.uni-sofia.bg 20060907
changed:        certadmin@certs.lcpe.uni-sofia.bg 20060908
source:         RIPE

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.5 (GNU/Linux)

iQIVAwUBRQHHSLafyWmgOHdbAQLH4BAAgbdFrHou/Pi5ouJx6iJKvR0Esfqq2gYw
e+piCcafcfPQSRRW8wHO1j6lBFrq58kOK9OqXRsGt2a/OzI5f9poN2iGyL+CxVZM
4eTz7TYQAbh1jwGvj+NO66GNxzixCBuLvq5OrYyZLJ2grbhkXNdeVDF54vYe5bQ4
2zgtDQ1v67O+Y+kTUkgjlbMMMdNikAEVYs/SK06drYzF18UDFP/idwHB4Ku5Vuvi
ugEn9K/xk0LrMWRzU6oRm5XZBG2fffMi+EOfj9hbzLcHPBaaAlzVt3CYXMUUebMR
1lVYb8ZppZEFSjj6EWScswf9p3m6dt+kS7VGhTdlCGhlCQHPrdFIgoHnfOz70lAJ
7sPV3vOsGiBsJqIFSX/U+UvTE+IsBIvkz0Sp6LdJIVFhINAGKYeWHTs1HZbXeve1
baZDVSfcNm876rLpXsWp3swrltWdKiDmRJ6+8DPTtr6PMOsDAwcDkyb/tLBOYq0q
BDSX5tbD/mYuCg7YaMEFr41JzonBupcljA340kLKAOL4HvLnXGFjzkfUSnscVeiY
ukfRucuX9xERox0iTkkkWKDd53fr0o50nHYVOQ57WGjxdNPDPtdfyShepycIuTbg
kJMEHzYUiZzT4wTtX2wab4qiTXi9/13/adUcmYvjCkC8LFsW04npDsX9PbmAGn25
U5g3+zxf2uc=
=TQzX
-----END PGP SIGNATURE-----

Самото изпращане на електронното писмо до пощенския робот на RIPE става така:

$ cat object-mod.txt.asc | sendmail -f certadmin@certs.lcpe.uni-sofia.bg auto-dbm@ripe.net

И в този случай, информация по изпълнението на заявката, ще се изпрати на електронния пощенски адрес, обявен като изпращач на писмото (в случая това е certadmin@certs.lcpe.uni-sofia.bg).

 

5. Предишни версии на публикацията.

 

Този документ е с OpenPGP подписано съдържание
[информация] [електронен подпис][TimeStamp]

Creative Commons - Признание 2.5 Valid CSS! Valid XHTML 1.0 Strict