Запознаване с GnuPG

Представена от: Антоний Чонков (cipher)

e-mail: antoniy@gmail.com

Don't

Panic!

...

Криптографски алгоритми

Най-общо са два вида:

Симетрични (конвенционални): използват един ключ за кодиране и последващо декодиране на информацията

Например: IDEA, Cast, TwoFish

Асиметрични: използват два взаимно допълващи се (комплементарни) различни ключове за кодиране и декодиране на информацията

Например: RSA, Diffie-Hellmann, El-Gamal, Elliptic, Curves, DSA

Какво е “хеш функция”?

Едностранна компресия на данни

“Сума за проверка”

Популярни хеш функции: MD5, SHA-1, Tiger, RIPEMD-160, Snefru, Whirlpool

Какво е PGP/GnuPG?

Оригинално PGP е разработен от Филип Цимерман и е реализиран софтуерно за пръв път през 1991

PGP 5.0 е изнесен от САЩ (на хартия) и в Европа е реализирана т.нар. “международна” версия на софтуера: PGPi

GnuPG – Gnu Privacy Guard е свободната версия на софтуера (на Werner Koch), която преобладава в света на UNIX/LINUX

Идеология на създаването на двойката ключове

Избор на криптрографски алгоритъм: DSA, ElGamal, RSA

Определяне големината на генерирания ключ (до 4096 bit)

Определяне периода на валидност на ключа

Добавяне на допълнителна информация за собственика (име, e-mail, снимка и коментар)

Вероятността за “счупване” на 4096 битов ключ

1:1044388881413152506691752710716624382579964249047383780384233483283953907971557456848826811934997558340890106714439262837987573438185793607263236087851365277945956976543709998340361590134383718314428070011855946226376318839397712745672334684344586617496807908705803704071284048740118609114467977783598029006686938976881787785946905630190260940599579453432823469303026696443059025015972399867714215541693835559885291486318237914434496734087811872639496475100189041349008417061675093668333850551032972088269550769983616369411933015213796825837188091833656751221318492846368125550225998300412344784862595674492194617023806505913245610825731835380087608622102834270197698202313169017678006675195485079921636419370285375124784014907159135459982790513399611551794271106831134090584272884279791554849782954323534517065223269061394905987693002122963395687782878948440616007412945674919823050571642377154816321380631045902916136926708342856440730447899971901781465763473223850267253059899795996090799469201774624817718449867455659250178329070473119433165550807568221846571746373296884912819520317457002440926616910874148385078411929804522981857338977648103126085903001302413467189726673216491511131602920781738033436090243804708340403154190336

“Електронен подпис”?
Ъъ... е как без химикалка!?

Осъществява се, поради възможността да се кодира със секретния ключ и да се декодира с публичния ключ

Принцип: всеки декодира, но само собственика може да кодира

Има два начина за извършване на електронен подпис:

кодира се цялата информация

кодира се само отпечатъка на тази информация

Първични и вторични двойки ключове

Стандартът OpenPGP (и не само той) определя съществуването на два вида ключове:

Първични: служат предимно за подписване

Вторични: служат за подписване или криптиране

Вторичните ключове не се отличават по криптографски алгоритми или други особености, а програмата ги определя като такива

Що е то сертификат?
(сертификати по стандарт OpenPGP)

Структура:

В основата на сертификата лежи първичният публичен ключ и прилежащият към него електронен подпис

Информационни полета за собственика

Служебни информационни полета

Вторични публични ключове и подписите, прилежащи към тях

Електронни подписи на други собственици на сертификати

Анулиращи сертификати

Анулиращи сертификати

Нужно е да се генерира още при създаване на двойката ключове

От жизнено важно значение е защитата на анулиращия сертификат

Нужен е при загуба или разкриване на секретния ключ

Проблемът:
“Man In The Middle”
(Човекът по средата)

Това е принципен, а не технически недостатък на асиметричната криптосистема

Една примерна ситуация...

“Web Of Trust”
(мрежа на доверието)

Обществена инфраструктура на публичния ключ:

Йерархична – по стандарт X.509

OpenPGP Web Of Trust

Цел: удостоверяване на валидността на произволен сертификат, без при това да се налага да се срещаме със собственика

A

B

C

Как можем да разпространим публичния си ключ?

Има два начина, по които можем да постъпим:

Да се срещнем човека, с когото искаме да кореспондираме, на по биричка (или ако измислим друг сигурен канал, по който да изпратим ключа) и да му дадем публичния си ключ

Да поставим публичния си ключ в спецялно хранилище за публични ключове (keyserver)

Генериране на двойката ключове

Генериране на нова първична двойка ключове:

$ gpg --gen-key

Генериране на анулиращ сертификат:

$ gpg --gen-revoke [e-mail]

Извличане на информация за съществуващите публични и секретни ключове:

$ gpg --list-keys [e-mail]

$ gpg --list-secret-keys [e-mail]

Да си дойдем на думата!
Криптиране/декриптиране на информацията.

Бързо, лесно и надеждно:

Криптиране на данни:

$ gpg --encrypt [--armor] [-u <e-mail>] [-r <e-mail>] [-r <e-mail>] ... [--output <изходящ файл>] <файл>

Криптиране със симетричен криптоалгоритъм:

$ gpg --symmetric [--armor] [-output <файл>] <файл>

Декриптиране на данни:

$ gpg --decrypt [--output <output file>] <файл>

Електронно подписване и проврка на електронен подпис

Електронно подписване на данни

Кодиране на целия блок данни:

$ gpg --sign [-a] [-o <файл>] <файл>

Кодиране само на отпечатъка на блока данни и записване в отделен файл:

$ gpg --detach-sign [-a] [-o <файл>] <файл>

Проверка на електронен подпис

$ gpg --verify [файл]

Изнасяне на сертификат

Изнасяне във външен файл, за да е възможно да го разпространяваме “ръчно”:

$ gpg --export --output <файл> [e-mail]

Подписване на публичен ключ

Два начина – един метод

$ gpg --sign-key [e-mail]

$ gpg --edit-key [e-mail] sign save

Работа с keyservers (хранилища за публични ключове)

Търсене на публичен ключ в keyserver:

$ gpg --keyserver <име> --search-keys <име/e-mail>

Добавяне на определен ключ от keyserver:

$ gpg --keyserver <име> --recv-keys <key IDs>

Обновяване на локалнoсъществуващите публични ключове от keyserver:

$ gpg --keyserver <име> --refresh-keys [key IDs]

Изнасяне на локален публичен ключ в keyserver

$ gpg --keyserver <име> --send-key [e-mail]

Въпроси

?

Open Fest Пловдив 2005

Благодаря за вниманието!

Лектор: Антоний Чонков (cipher)

E-Mail: antoniy@gmail.com

2005-11-04T00:54:19