www.Advocati.org

GPG

GPG (известен и с пълното си наименование GNU Privacy Guard; или съкратено GnuPG) е свободен софтуер за надеждно цифрово подписване и (раз)шифроване на съдържание в електронна среда. Поддържа множество шифровъчни алгоритми със симетрични и асиметрични ключове, достигащи респектираща дължина до 4096 бита (недостижима при повечето комерсиални „услуги“ от подобен тип).

Цифрова криптография

Криптографията служи за подписване и шифроване на съдържание.

Цифровото подписване позволява да се удостовери автентичност (произход наистина от когото очаквате) и интегритет (липса на последващи промени) на съдържанието. Ако дори само един символ не съвпада, ще бъде изведен отрицателен криптографски отговор – следователно съдържанието е било променено умишлено (например поради опит за измама) или случайно (например поради грешка при копирането); или не произхожда от когото очакваме.

(Раз)шифроването позволява обезпечаване на информационната сигурност при поверителна комуникация, като прави невъзможно прочитането на шифрованото съдържание преди това то да бъде надлежно разшифровано с помощта на механизми, достъпни само тези, които разполагат с необходимите шифровъчни ключове.

„Асиметрична“ криптография с 'публичен' и 'частен' ключ

Възниква въпросКак да бъдат разменени надеждно шифровъчни ключове за поверителна комуникация, ако страните не разполагат с надежден канал за комуникация?

(техническа постановка на проблема)

Проблемът произтича от това, че който притежава шифровъчния ключ, той може да разшифрова. Ако двете страни в комуникацията имат надежден канал, по който да споделят поверително използвания в тяхната комуникация шифровъчен ключ, те биха могли да споделят по същия канал и самата поверителна информация – без да се нуждаят от каквото и да било шифроване. Нуждата от шифровъчен ключ възниква тогава, когато не може да се гарантира надежден канал за каквото и да било поверително споделяне. Очевидно е, че споделянето на шифровъчния ключ по ненадежден канал влече риск ключът да бъде прихванат от трети страни – което ще компрометира поверителността. Следователно трябва или да намерим някакъв, макар и временен надежден канал (за поверително споделяне на шифровъчния ключ), или да изнамерим криптографска система, която не се нуждае от поверителното споделяне на какъвто и да било шифровъчен ключ.

Асиметричната криптография (Asymmetric Cryptography) предлага отговор на поставения въпрос. Тя разчита на двойка иманентно свързани шифровъчни ключове – 'публичен' и 'частен'. Първият от тези ключове е публично известен, а вторият се пази втайна от своя притежател. 'Публичният' ключ може да шифрова съдържание (но не може да го разшифрова). Единствено 'частният' ключ може да разшифрова съдържание, което е било шифровано с иманентно свързания 'публичен' ключ. 'Частният' ключ позволява също полагането на цифрови подписи, чиято автентичност и интегритет може след това да се проверява от всеки, разполагащ с иманентно свързания 'публичен' ключ.

Асиметричната криптография позволява на всеки да създаде собствена уникална двойка ключове ('публичен' и 'частен'), да обяви пред всички своя 'публичен' ключ и да получава шифровани с него съобщения, като същевременно подписва цифрово своите съобщения към трети страни.

Идентификатор на интересуващия ни ключ

Възниква въпросКак да удостоверим, че 'публичният' ключ (и следователно иманентно свързаният с него 'частен' ключ) наистина принадлежи на този, на когото се доверяваме?

(какво казва законът по въпроса)

Повдигнатият въпрос се урежда частично в Закона за електронния документ и електронните удостоверителни услути (ЗЕДЕУУ) – чрез т.нар. „доставчици на удостоверителни услуги“. Те са оправомощени да поддържат официални списъци с 'публичните' ключове на клиенти, които са си създали при тях „квалифицирани електронни подписи“. Основният недостатък е, че Доставчикът задължително създава двойката иманентно свързани шифровъчни ключове при себе си. Няма никаква действителна технологична гаранция, че определен 'частен' ключ наистина е заличен необратимо от базите с данни на Доставчика, след като е бил инсталиран на средството за цифрово подписване, предоставено на съответния клиент.

Ето защо ние предпочитаме да създаваме своите шифровъчни ключове за поверителна комуникация сами. Независимо, че такива ключове не се признават за „квалифицирани електронни подписи“ по смисъла на ЗЕДЕУУ, тяхната технологична надеждност при поверителна комуникация с нашите доверители/подзащитни е съществена и ние държим на това.

Един шифровъчен ключ представлява поредица от наглед „произволни“ символи (понякога хиляди на брой), които е трудно (невъзможно) да се запомнят и/ли да се различат от наглед „произволните“ символи в друг шифровъчен ключ.

(как изглежда нашият публичен GPG ключ)

-----BEGIN PGP PUBLIC KEY BLOCK-----

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
=ZqlO
-----END PGP PUBLIC KEY BLOCK-----

За да могат различните шифровъчни ключове да бъдат разграничавани лесно един от друг, се използват т.нар. 'идентификатори' (Fingerprints). 'Идентификаторът' e сложна криптографска производна (в случая от определен 'публичен' ключ), по която всеки може да провери дали този 'публичен' ключ е същият като този, който ни интересува. Дори само един от наглед „произволните“ символи да бъде променен, ще бъде извлечен напълно различен 'идентификатор' – което прави несъответствието очевидно.

Нашият 'публичен' ключ има следния идентификатор:

AE06191DE7B72F74ACE2BB257B62D2A7D14C089B

Трябва да се има предвид, че теоретично цитираният идентификатор може да е неистински (например поради кракване на сайта или поради компрометиране на комуникацията между Вашия компютър и сървъра на сайта).

Възниква въпрос: Как да сме сигурни, че точно това е идентификаторът на 'публичния' ключ, който ни интересува?

Най-простият отговор е, че трябва да получите потвърждение през независим канал за действителния идентификатор. Така, дори сайтът или връзката със сървъра да бъде компрометирана, ще бъде трудно заедно с това да се компрометира и независимият канал. Ако например се свържете с нас по телефона, можем да Ви издиктуваме символ по символ идентификатора.

Ако получите визитка от нашата кантора, на нея ще видите изписан идентификатора с дребен шрифт. Ако навлезете по-дълбоко в света на криптографията и установите контакти с други потребители на криптографски софтуер, можете да потърсите и в мрежата на доверието (Web of Trust) – дали достатъчно голям брой от тези, на които се доверявате, не са потвърдили автентичността на интересуващия Ви 'публичен' ключ.

Нашите „асиметрични“ ключове за (раз)шифроване и цифрово подписване са създадени и могат да се използват със Свободния криптографски софтуер GPG.

Работа с GPG в текстови режим

За целта е най-добре да работите в текстови режим, чрез командния ред (Command Line) на Терминала (Terminal) в предпочитаната от Вас Свободна операционна система. Там ще въвеждате следващите прости текстови команди, а компютърът ще извежда в текстови режим резултатите от Вашите команди.

  • Свалете от internet интересуващия Ви 'публичен' ключ – с тази команда:

    gpg --recv-keys Идентификатор_на_ключа

    (където под 'Идентификатор_на_ключа' разбираме 40-символния 'идентификатор' на интересуващия Ви шифровъчен ключ; напр. AE06191DE7B72F74ACE2BB257B62D2A7D14C089B).

    (Копирайте внимателно, поставете в Терминала и натиснете [Enter]. Ако в някой от GPG сървърите в мрежата на доверието е качен 'публичният' ключ с указания от Вас 'идентификатор', същият ще бъде свален на сигурно място във Вашата система.)

  • Извлечете 'идентификатора' на свален във Вашата система 'публичен' ключ – с тази команда:

    gpg --fingerprint Данни_на_ключа

    (където под 'Данни_на_ключа' разбираме каквато и да е разпознаваема част от данните, записани за интересуващия Ви 'публичен' ключ; напр. www.Advocati.org).

    (Сравнете символ по символ 40-символния 'идентификатор', извлечен от сваления във Вашата система шифровъчен ключ и 'идентификатора', за който сте получили потвърждение от независим канал, че е този, на който се доверявате. Дори само един символ да се различава, това означава съвсем друг шифровъчен ключ – не го използвайте!)

  • Шифровайте поверителното съдържание чрез 'публичния' ключ на този, комуто се доверявате – с тази команда:

    gpg -e -r Данни_на_ключа /Адрес/Директория/Файл_за_шифроване

    (където под 'Данни_на_ключа' разбираме каквато и да е разпознаваема част от данните, записани за интересуващия Ви 'публичен' ключ; под 'Файл_за_шифроване' разбираме наименованието на файла, където сте поместили поверителното съдържание; под '/Адрес/Директория/Файл_за_шифроване' разбираме наименованието на файла заедно с адреса на директорията в системата, където се намира файлът).

    (Ако Терминалът е отворен в директорията, където се намира 'Файлът_за_шифроване', не е необходимо да въвеждате адрес – достатъчно е да въведете само наименованието на файла.)

    (В директорията, където се намира 'Файлът_за_шифроване', ще бъде генериран още един файл със същото наименовение и с добавено разширение .gpg. Това е шифрованият файл, който може да бъде разшифрован единствено с 'частния' ключ, иманентен на използвания от Вас 'публичен' ключ за неговото шифроване.)

  • Създайте своя собствена двойка ключове – с тази команда:

    gpg --full-generate-key

    (Ще последва поредица от въпроси, на които можете да отговаряте текстово чрез въвеждане на показаните символи и натискане на [Enter]. Системата ще укаже да въведете данни за Вашите шифровъчни ключове и парола за използване на 'частния' ключ (който се съхранява в шифровано състояние в системата и за ползването му е необходимо да се разшифрова чрез тази парола). След като въведете необходимите данни, двойката шифровъчни ключове ще бъде генерирана.)

  • Качете в internet копие от Вашия 'публичен' ключ – с тази команда:

    gpg --send-keys Идентификатор_на_ключа

    (където под 'Идентификатор_на_ключа' разбираме 40-символния 'идентификатор' на Вашия шифровъчен ключ, който можете да извлечете с цитираната по-горе команда gpg --fingerprint Данни_на_ключа).

    (След като Вашият 'публичен' ключ бъде качен в internet (в GPG сървърите в мрежата на доверието), всеки желаещ, който разполага с Вашия 'идентификатор', ще може да свали надеждно копие от този 'публичен' ключ, за да шифрова поверително съдържание за Вас и за да проверява автентичността и интегритета на положени от Вас цифрови подписи.)

  • Положете цифров подпис върху съдържание, чиято автентичност и интегритет желаете да удостоверите – с тази команда:

    $ gpg -u Данни_на_ключа --detach-sign Файл_за_подпис

    (където под 'Данни_на_ключа' разбираме каквато и да е разпознаваема част от данните, записани за интересуващия Ви 'публичен' ключ; и под 'Файл_за_подпис' разбираме файла, чиято автентичност и интегритет желаете да удостоверите).

    (Не забравяйте да добавите преди наименованието на файла и адреса на директорията на системата, където се намира файлът – ако Терминалът не е отворен в същата директория.)

    (В директорията, където се намира интересуващият Ви 'Файл_за_подпис', ще бъде генериран още един файл със същото наименовение и разширение .sig. Това е цифровият подпис, позволяващ удостоверяване автентичността и интегритета на подписания файл от всеки желаещ, който разполага с 'публичния' ключ, иманентен на използвания от Вас 'частен' ключ.)

  • Проверете положен цифров подпис върху съдържание, в чиято автентичност и интегритет желаете да се уверите – с тази команда:

    gpg --verify Проверяван_файл

    (където под 'Проверяван_файл' разбираме наименованието на файла, в чиято автентичност и интегритет желаете да се уверите).

    (За да бъде направена исканата криптографска проверка, в системата трябва да има свалено копие от 'публичния' ключ, иманентен на използвания 'частен' ключ за полагането на цифровия подпис; и трябва в същата директорията, където е местоположението на интересуващия Ви 'Проверяван_файл', да имате свален положения цифров подпис с наименование от типа 'Проверяван_файл.sig' (със същото наименование като 'Проверявания_файл', следвано от разширение .sig) – освен ако 'Проверяваният_файл' не е във вид на прост текст, в който e вграден и цифровият подпис.)

    (Ще бъде изведено предупреждение, че няма доказателства използваният за подписването 'частен' ключ да принадлежи наистина на този, на когото се доверявате. В допълнение към това при положителен криптографски отговор ще бъде изведено съобщение Good signature (Добър подпис); а при отрицателен криптографски отговор – съобщение Bad signature (Лош подпис).)

    Работата с текстови команди към компютъра на пръв поглед изглежда трудна и предназначена само за програмисти, но в действителност това е най-прекият, най-лесен и най-надежден начин да осъществявате надеждно цифрово подписване и (раз)шифроване, и да правите криптографски проверки за автентичност и интегритет на цифрово подписани файлове.

    Вижте още Свободен софтуер!