Andrei Yankovich
14 июня 2019 г. 16:10

Шифрование данных в Qt алгоритмом RSA c открытым и закрытым ключами без привязки к OpenSSL

Вступление

В этой статье есть способ, как организовать шифрование сообщений, а также использовать алгоритмы RSA (открытые и закрытые ключи) без библиотек, подобных OpenSSL, QCA или LibSodium.


Как это работает?

Зачем это нужно?

Существует множество алгоритмов шифрования, большинство из них основаны на идее, что в полученном вами сообщении есть ключ для шифрования вашего сообщения и отправки его получателю. Предполагается, что получатель уже получил ключ шифрования, поэтому получатель может его расшифровать. Однако этот метод ни в коем случае нельзя использовать, потому что ключ шифрования должен быть каким-то образом отправлен так, чтобы никто не смог его перехватить, а это практически невозможно.

Именно поэтому в настоящее время метод шифрования RSA с использованием открытого и закрытого ключа (асинхронное шифрование) стал самым надежным и популярным.

Принцип работы следующий:
В качестве примера используем уже устоявшиеся имена участников шифрования: Алиса и Боб.
Предположим, Алиса хочет послать Бобу секретное сообщение, но не хочет, чтобы кто-либо еще его увидел.

  • Боб создает два ключа для этой операции: открытый и закрытый.

  • Боб отправляет открытый ключ Алисе.

  • Алиса шифрует сообщение открытым ключом Боба.

  • Алиса отправляет зашифрованное сообщение Бобу.

  • Боб расшифровывает сообщение Алисы с помощью закрытого ключа.

Ева, которая хочет узнать, чем переписываются Алиса и Боб, перехватывает все их сообщения. Она ничего не может с ними сделать, так как у нее нет их закрытых ключей, так как в алгоритме RSA зашифрованное сообщение с ключом A (открытый ключ) может быть расшифровано только его парой A1 (закрытый ключ).
Таким образом, вы сможете легко и удобно защитить важную информацию.

Описание.

Qt-Secret — это простая библиотека, созданная группой QuasarApp на Qt/qmake, цель — для обеспечения основных возможностей шифрования, которых нет в родном Qt. А именно: алгоритмы RSA и AES.

Ключевая особенность:

  • Генерация пар ключей RSA64 и RSA128 (предполагается поддержка количества номеров до RSA2048)
  • Шифрование и дешифрование RSA.
  • Подпись и аутентификация сообщения.
  • Генерация ключей AES (AES64, AES128, AES256)
  • Шифрование и дешифрование AES

Работа с Qt-Secret

Соберите библиотеку и добавьте ее в проект с помощью qmake

  • Откройте свой репозиторий
    1. cd yourRepo
  • Добавьте Qt-Secret в свой репозиторий, например, подмодуль
    1. The git add submodule https://github.com/QuasarApp/Qt-Secret.git
  • Обновите свои подмодули

    1. git submodule update --init --recursive

  • Добавьте свой файл библиотеки Qt-Secret «pri» в свой «pro» файл.

    1. include ($$PWD/Qt-Secret/src/Qt-Secret.pri)

  • Пересоберите проект

Библиотека добавлена в ваш проект, теперь вы можете ею пользоваться.

Пример использования

Шифрование и дешифрование сообщений.
  1. #include <qrsaencryption.h> // Include the Qt-Secret library (RSA)
  2.  
  3. QByteArray pub, priv; // Create variables to keys.
  4. QRSAEncryption e; // Create a variable to cryptographer
  5.  
  6. // Generate a pair of keys with a bit depth of 128
  7. e.generatePairKey (pub, priv, QRSAEncryption :: Rsa :: RSA_128); // or QRSAEncryption :: Rsa :: RSA_64
  8. QByteArray msg = "test message";
  9.  
  10.  
  11. auto encodeData = e.encode (msg, pub); // encrypt the message with the public key
  12. auto decodeData = e.decode (encodeData, priv); // decrypt with the private key
  13.  
  14. qDebug () << decodeData; // check in the message.
  15.  
  16.  
  17.  
Подпись и проверка подписи сообщения.
  1. #include <qrsaencryption.h>
  2.  
  3. // Initialization
  4. QByteArray pub, priv;
  5. QRSAEncryption e;
  6. e.generatePairKey (pub, priv, QRSAEncryption :: Rsa :: RSA_128); // or QRSAEncryption :: Rsa :: RSA_64
  7.  
  8. QByteArray msg = "test message";
  9.  
  10. auto signatureMessage = e.signMessage (msg, priv); // sign the message
  11.  
  12. if (e.checkSignMessage (signatureMessage, pub)) {// check the signature
  13. // message signed successfully
  14. }
  15.  

Вывод

Эта библиотека является хорошим решением для простых задач шифрования.

  • легко включить;
  • легко использовать.

Хорошо использовать пару ключей для одного сеанса работы.

Рекомендуемые статьи по этой тематике

По статье задано0вопрос(ов)

7

Вам это нравится? Поделитесь в социальных сетях!

D
  • 16 января 2020 г. 23:06

Доброго времени суток, не подскажите, что делать в данной ситуации, после того, как я сделал все вышеуказанные инструкции для подключения библиотеки к проекту?

Andrei Yankovich
  • 17 января 2020 г. 13:31

Выглядит как ошибка библиотеки. Расскажите подробно на какой платформе вы собираете проект (MinGW или MSVC) их версии и версии Qt.

Дмитрий
  • 21 апреля 2020 г. 15:15

Та же самая ошибка. MinGW, Qt 5.14.2

Andrei Yankovich
  • 20 мая 2020 г. 18:39

Для тех у кого возникает ошибка cannot find -lQt-Secret1, cannot find -lQtBigInt6
Решение и описание проблеммы здесь

ИБ
  • 11 ноября 2020 г. 19:41

Библиотека подключилась нормально, только на выводе из первого примера выходит пустое сообщение, вместо "test message" просто "". Никаких ошибок не выдает.

Q
  • 16 июля 2021 г. 16:28

Возможно ли с помощью этой библиотеки шифровать файлы, а не обычные строки?

Комментарии

Только авторизованные пользователи могут публиковать комментарии.
Пожалуйста, авторизуйтесь или зарегистрируйтесь
  • Последние комментарии
  • IscanderChe
    12 апреля 2025 г. 17:12
    Добрый день. Спасибо Вам за этот проект и отдельно за ответы на форуме, которые мне очень помогли в некоммерческих пет-проектах. Профессиональным программистом я так и не стал, но узнал мно…
  • AK
    1 апреля 2025 г. 11:41
    Добрый день. В данный момент работаю над проектом, где необходимо выводить звук из программы в определенное аудиоустройство (колонки, наушники, виртуальный кабель и т.д). Пишу на Qt5.12.12 поско…
  • Evgenii Legotckoi
    9 марта 2025 г. 21:02
    К сожалению, я этого подсказать не могу, поскольку у меня нет необходимости в обходе блокировок и т.д. Поэтому я и не задавался решением этой проблемы. Ну выглядит так, что вам действитель…
  • VP
    9 марта 2025 г. 16:14
    Здравствуйте! Я устанавливал Qt6 из исходников а также Qt Creator по отдельности. Все компоненты, связанные с разработкой для Android, установлены. Кроме одного... Когда пытаюсь скомпилиров…
  • ИМ
    22 ноября 2024 г. 21:51
    Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…