Версия 1.4.1, 18 юни 2008
Веселин Колев, Софийски Университет "Св. Климент Охридски"
Адрес за кореспонденция: vesso AT vesselin.org
Първоизточник: http://www.vesselin.org
Лиценз на документа: CC Attribution-ShareAlike
Съдържание:
Създаване на mntner обект за защита на обекта за OpenPGP сертификата
Промяна на метода за удостоверяване, зададен в mntner обекта защитаващ key-cert обекта
Забележка. Създаването на mntner и key-cert обектите става чрез услугата syncupdate-minimal на RIPE, която е достъпна на адрес:
https://www.ripe.net/db/syncupdates/syncupdate-minimal.html
Особеност на тази услуга е, че съобщава статуса на изпращаната към базата данни на RIPE промяна, веднага след изпращането на заявката.
Когато в RIPE DB се създава обект key-cert, той трябва да има попълнено поле mnt-by, за да може да бъде защитен от евентуална промяна от страна на произволен потребител на базата. Следователно хронологично първо трябва да се създаде mntner обект за защита на обекта от тип key-cert и след това последния да бъде създаден. Така още от създаването си обектът ще бъде заключен за несанкционирани промени.
Първоначално mntner обекта ще бъде защитен с парола, за която трябва да бъде пресметнат MD5 хеш, във формата, в който този хеш се използва в системата за удостоверяване на потребителите в UNIX (в Linux така се хешират паролите в /etc/shadow
). Това може да стане по два начина:
върху локалната система
Чрез инструментариума на системата се създава локален потребител и му се задава парола. Пресметнания хеш на паролата се намира във файла /etc/shadow
.
върху отдалечена система
MD5 форматен хеш на паролата може да се генерира през специален интерфейс, предлаган от web сървъра на RIPE (комуникацията е по протокол HTTPS), на адрес:
За примера по-долу ще се предполага, че пресметнатия и форматиран хеш има стойността:
$1$dLtHNram$MWTlIjg7PPdfVCOv3AL1g0
След като бъде изчислен хеша на паролата, в текстовото поле за въвеждане на информация на услугата syncupdate-minimal , се съставя шаблона за изграждане на 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>
За примерите по-долу ще се приема, че в базта на 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 :
За да се изпрати заявката към базата данни, се натиска бутона "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 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
След като key-cert обекта е създаден, защитата на mntner обекта, полето
auth: MD5-PW $1$dLtHNram$MWTlIjg7PPdfVCOv3AL1g0
може да се замени с
auth: PGPKEY-A038775B
Възможно е задаването на повече от един ред за "auth" и следователно указването на повече от един OpenPGP сертификат за управление на обекта.
Актуализираният шаблон се въвежда в полето на услугата syncupdate-minimal :
За да се изпрати заявката към базата данни, се натиска бутона "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 шаблон.
След като 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 :
За да се изпрати заявката към базата данни, се натиска бутона "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).
Версия 1.3: [tar.gz] [електронен подпис върху архива]
Публикувана на: 14 октомври 2007г.
Версия 1.4: [tar.gz] [електронен подпис върху архива]
Публикувана на: 31 октомври 2007г.
Този документ е с OpenPGP подписано съдържание
[информация] [електронен подпис][TimeStamp]