GPG
GPG (известен и с пълното си наименование GNU Privacy Guard; или съкратено GnuPG) е свободен софтуер за надеждно цифрово подписване и (раз)шифроване на съдържание в електронна среда. Поддържа множество шифровъчни алгоритми със симетрични и асиметрични ключове, достигащи респектираща дължина до 4096 бита (недостижима при повечето комерсиални „услуги“ от подобен тип).
Цифрова криптография
Криптографията служи за подписване и шифроване на съдържание.
Цифровото подписване позволява да се удостовери автентичност (произход наистина от когото очаквате) и интегритет (липса на последващи промени) на съдържанието. Ако дори само един символ не съвпада, ще бъде изведен отрицателен криптографски отговор – следователно съдържанието е било променено умишлено (например поради опит за измама) или случайно (например поради грешка при копирането); или не произхожда от когото очакваме.
(Раз)шифроването позволява обезпечаване на информационната сигурност при поверителна комуникация, като прави невъзможно прочитането на шифрованото съдържание преди това то да бъде надлежно разшифровано с помощта на механизми, достъпни само тези, които разполагат с необходимите шифровъчни ключове.
„Асиметрична“ криптография с 'публичен' и 'частен' ключ
Възниква въпрос – Как да бъдат разменени надеждно шифровъчни ключове за поверителна комуникация, ако страните не разполагат с надежден канал за комуникация?
(техническа постановка на проблема)
Проблемът произтича от това, че който притежава шифровъчния ключ, той може да разшифрова. Ако двете страни в комуникацията имат надежден канал, по който да споделят поверително използвания в тяхната комуникация шифровъчен ключ, те биха могли да споделят по същия канал и самата поверителна информация – без да се нуждаят от каквото и да било шифроване. Нуждата от шифровъчен ключ възниква тогава, когато не може да се гарантира надежден канал за каквото и да било поверително споделяне. Очевидно е, че споделянето на шифровъчния ключ по ненадежден канал влече риск ключът да бъде прихванат от трети страни – което ще компрометира поверителността. Следователно трябва или да намерим някакъв, макар и временен надежден канал (за поверително споделяне на шифровъчния ключ), или да изнамерим криптографска система, която не се нуждае от поверителното споделяне на какъвто и да било шифровъчен ключ.
Асиметричната криптография (Asymmetric Cryptography) предлага отговор на поставения въпрос. Тя разчита на двойка иманентно свързани шифровъчни ключове – 'публичен' и 'частен'. Първият от тези ключове е публично известен, а вторият се пази втайна от своя притежател. 'Публичният' ключ може да шифрова съдържание (но не може да го разшифрова). Единствено 'частният' ключ може да разшифрова съдържание, което е било шифровано с иманентно свързания 'публичен' ключ. 'Частният' ключ позволява също полагането на цифрови подписи, чиято автентичност и интегритет може след това да се проверява от всеки, разполагащ с иманентно свързания 'публичен' ключ.
Асиметричната криптография позволява на всеки да създаде собствена уникална двойка ключове ('публичен' и 'частен'), да обяви пред всички своя 'публичен' ключ и да получава шифровани с него съобщения, като същевременно подписва цифрово своите съобщения към трети страни.
Идентификатор на интересуващия ни ключ
Възниква въпрос – Как да удостоверим, че 'публичният' ключ (и следователно иманентно свързаният с него 'частен' ключ) наистина принадлежи на този, на когото се доверяваме?
(какво казва законът по въпроса)
Повдигнатият въпрос се урежда частично в Закона за електронния документ и електронните удостоверителни услути (ЗЕДЕУУ) – чрез т.нар. „доставчици на удостоверителни услуги“. Те са оправомощени да поддържат официални списъци с 'публичните' ключове на клиенти, които са си създали при тях „квалифицирани електронни подписи“. Основният недостатък е, че Доставчикът задължително създава двойката иманентно свързани шифровъчни ключове при себе си. Няма никаква действителна технологична гаранция, че определен 'частен' ключ наистина е заличен необратимо от базите с данни на Доставчика, след като е бил инсталиран на средството за цифрово подписване, предоставено на съответния клиент.
Ето защо ние предпочитаме да създаваме своите шифровъчни ключове за поверителна комуникация сами. Независимо, че такива ключове не се признават за „квалифицирани електронни подписи“ по смисъла на ЗЕДЕУУ, тяхната технологична надеждност при поверителна комуникация с нашите доверители/подзащитни е съществена и ние държим на това.
Един шифровъчен ключ представлява поредица от наглед „произволни“ символи (понякога хиляди на брой), които е трудно (невъзможно) да се запомнят и/ли да се различат от наглед „произволните“ символи в друг шифровъчен ключ.
(как изглежда нашият публичен GPG ключ)
-----BEGIN PGP PUBLIC KEY BLOCK-----
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
=hqZP
-----END PGP PUBLIC KEY BLOCK-----
За да могат различните шифровъчни ключове да бъдат разграничавани лесно един от друг, се използват т.нар. 'идентификатори' (Fingerprints). 'Идентификаторът' e сложна криптографска производна (в случая от определен 'публичен' ключ), по която всеки може да провери дали този 'публичен' ключ е същият като този, който ни интересува. Дори само един от наглед „произволните“ символи да бъде променен, ще бъде извлечен напълно различен 'идентификатор' – което прави несъответствието очевидно.
Нашият 'публичен' ключ има следния идентификатор:
9800FDC33F04EC071AD142CA8F17EED17B9E53A3
Трябва да се има предвид, че теоретично цитираният идентификатор може да е неистински (например поради кракване на сайта или поради компрометиране на комуникацията между Вашия компютър и сървъра на сайта).
Възниква въпрос: Как да сме сигурни, че точно това е идентификаторът на 'публичния' ключ, който ни интересува?
Най-простият отговор е, че трябва да получите потвърждение през независим канал за действителния идентификатор. Така, дори сайтът или връзката със сървъра да бъде компрометирана, ще бъде трудно заедно с това да се компрометира и независимият канал. Ако например се свържете с нас по телефона, можем да Ви издиктуваме символ по символ идентификатора.
Ако получите визитка от нашата кантора, на нея ще видите изписан идентификатора с дребен шрифт. Ако навлезете по-дълбоко в света на криптографията и установите контакти с други потребители на криптографски софтуер, можете да потърсите и в мрежата на доверието (Web of Trust) – дали достатъчно голям брой от тези, на които се доверявате, не са потвърдили автентичността на интересуващия Ви 'публичен' ключ.
Нашите „асиметрични“ ключове за (раз)шифроване и цифрово подписване са създадени и могат да се използват със Свободния криптографски софтуер GPG.
Работа с GPG в текстови режим
За целта е най-добре да работите в текстови режим, чрез командния ред (Command Line) на Терминала (Terminal) в предпочитаната от Вас Свободна операционна система. Там ще въвеждате следващите прости текстови команди, а компютърът ще извежда в текстови режим резултатите от Вашите команди.
Свалете от internet интересуващия Ви 'публичен' ключ – с тази команда:
gpg --recv-keys Идентификатор_на_ключа
(където под 'Идентификатор_на_ключа
' разбираме 40-символния 'идентификатор' на интересуващия Ви шифровъчен ключ; напр. 9800FDC33F04EC071AD142CA8F17EED17B9E53A3
).
(Копирайте внимателно, поставете в Терминала и натиснете [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
(Лош подпис).)
Работата с текстови команди към компютъра на пръв поглед изглежда трудна и предназначена само за програмисти, но в действителност това е най-прекият, най-лесен и най-надежден начин да осъществявате надеждно цифрово подписване и (раз)шифроване, и да правите криптографски проверки за автентичност и интегритет на цифрово подписани файлове.
Ако е необходимо ШИФРОВАЙТЕ e нашето специализирано ръководство за Информационна сигурност в електронна среда. Можете да свалите в .asc или .pdf формат и да ползвате, надграждате и разпространявате свободно.