LibGCrypt або Клеопатра на службі української криптографії

Понад два роки минуло після виходу першого релізу бібліотеки libgcrypt з підтримкою базової української криптографії, а саме ГОСТ 28147-89, ГОСТ Р 34.11-94, ГОСТ Р 34.11-2012 (у реалізації даної бібліотеки STRIBOG256 та STRIBOG512), ГОСТ 28147-89. ГОСТ Р 34.1-2012.

Проте практичного застосування, на відміну від openssl з підтримкою української криптографії, ця бібліотека поки що не знаходить. З чим це пов'язано та куди рухатися?

Перевага openssl – це наявність утиліти командного рядка openssl та підтримка в рамках одного проекту, наголошую, в рамках одного проекту стандарту X509, крім ядра криптографії протоколів PKCS7, CMS, TLS, PKCS7 та інших. Те саме можна сказати про бібліотеку NSS (Nework Security System) та її використання в рішеннях Mozilla.

На жаль, у самому проекті libgcrypt цього немає. Тут на допомогу приходять інші проекти прикладного рівня, які використовують бібліотеку. Перш за все це проект GNU Privacy Guard (GnuPG, GPG), в рамках якого надаються інструментальні засоби шифрування та цифрового підпису, що відповідають стандарту OpenPGP. В рамках цього проекту нас цікавитиме інструментальний засіб gpgsm, який використовується для надання сервісу цифрового шифрування та електронного підпису (ЕП) на базі сертифікатів X.509 та протоколу CMS/PKCS7. GpgSM використовується в основному як двигун при обробці електронної пошти S/MIME, зокрема, у поштовому клієнті KMail. Але якщо ми говоримо про сертифікати, то не можна не згадати про графічну утиліту керування сертифікатами X509 Kleopatra.

службі

На жаль, поштовий клієнт KMail, отримавши це повідомлення, не зміг перевірити ЕП:

libgcrypt

На жаль, Клеопатра також відмовлялася визнавати українські сертифікати. Ітак, ми розпочали аналіз ситуації. Звичайно почали з бібліотеки libgcrypt. Усі тести для української криптографії у рамках проекту проходили успішно. Але аналіз вихідного коду показав, що у проекті для ГОСТ-криптографії використовуються лише тестові вузли замін для ГОСТ-28147-89 та ГОСТ Р 34.11-94, а також тестові параметри алгоритму підпису ГОСТ Р 34.10-2001 та тестові параметри алгоритму підпису ГОСТ Р 34.10 -2012 з ключем 512. І насамперед довелося додати робочі вузли замін та робочі параметри алгоритмів підпису:

Також довелося, природно довелося включати прив'язку параметрів алгоритмів до їх oid-ам (Ідентифікатори об'єктів (OID) технічного комітету зі стандартизації «Криптографічний захист інформації» (ТК 26):

Це був той мінімум, з чого треба було починати. Для всіх алгоритмів, насамперед ГОСТ Р 34.10 були прогнані тестові заходи (утиліта benchmark, доопрацьована з урахуванням включення нових параметрів. Отримані результати були перевірені на тестових прикладах ТК-26 з використанням раніше апробованих засобів криптографічного захисту інформації LCC-2016 та ПБЗІ «СКЗІ ЛІРССЛ»:

Але це ще не все. Довелося вносити зміни і в сам проект gnupg-2, наприклад, файл sm/sign.c були додані oid-и ГОСТ-хешів:

libgcrypt

Тепер залишилося розібратися з імпортом сертифікатів і найголовніше – ключів. І якщо з імпортом сертифікатів все пройшло добре, то з імпортом закритого ключа з pkcs12 довелося попрацювати і внести зміни до підпроекту agent (модуль gpg-ptotect-tool). Але коли і ці труднощі були пройдені, коли були імпортовані закриті ключі (прочитати можна тут), настав час вклонитися Клеопатрі:

libgcrypt

І Клеопатра прихильно поставилася до нашихособистим (із закритими ключами) та не особистим сертифікатам. Тип сертифікату тут названий «512-бітовий ЕСС (закритий ключ доступний)», але це на любителя. На другому знімку прописані ГОСТ-ові oid-и (префікс 1.2.643):

службі

Настав час завершувати нашу розповідь і дати гідну відповідь Thunderbird українською криптографією. P.S. Переконайтеся (це дуже важливо), що gpg-agent працює:

Перш за все треба вибрати свій особистий сертифікат (сертифікат, у якого є закритий ключ), з який ви будете ставити свою ЕП:

клеопатра

службі

Після цього в тілі вашого листа з'явиться, що листа під час відправлення буде підписано ЕП. Натискаємо кнопку«надіслати»:

службі

Вводимо пароль для доступу до закритого ключа (ми встановили його при імпорті закритого ключа) і натискаємо«ОК». Ну ось і все. Але ми поки ні слова не сказали про шифрування, але це наступного разу.