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

RSA, Qt, шифрование в qt, private key, asynchronous encryption, ge, публичный и приватные ключи, AES, cryptography, crypto, QuasarApp, Public key, Qt-Sekret

Введение

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

Для начала немного теории

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

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

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

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

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

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

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

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

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

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

Таким образом, можно легко и удобно обезопасить важную для вас информацию.

Теперь немного описания

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

Основные возможности:

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

Работа с Qt-Secret на практике

Сборка и подключение библиотеки в QtCreator к проекту с использованием qmake

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

    git submodule update --init --recursive

  • Добавляем в свой PRO файл, pri файл библиотеки Qt-Secret

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

  • И пересобираем проект

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

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

Шифрование и дешифрирование сообщений.
#include <qrsaencryption.h> // Подключаем библиотеку Qt-Secret (RSA)

    QByteArray pub, priv; // Создаем переменные под наши ключи.
    QRSAEncryption e;     // Создаем переменную нашего шифровальщика

    // Здесь генерируем нашу пару ключей с разрядностью 128
    e.generatePairKey(pub, priv, QRSAEncryption::Rsa::RSA_128); // or QRSAEncryption::Rsa::RSA_64
    QByteArray msg = "test message";


    auto encodeData = e.encode(msg, pub); // шифруем сообщение публичным ключом
    auto decodeData = e.decode(encodeData, priv); // расшифровываем приватным ключом

    qDebug() << decodeData; // проверяем: на выходе у вас должно получится то же, что и в msg.



Подпись и проверка подписи сообщения.
#include <qrsaencryption.h>

    // Инициализация такая же, как и в предыдущем примере.
    QByteArray pub, priv;
    QRSAEncryption e;
    e.generatePairKey(pub, priv, QRSAEncryption::Rsa::RSA_128); // or QRSAEncryption::Rsa::RSA_64

    QByteArray msg = "test message";

    auto signedMessage = e.signMessage(msg, priv); // подписываем сообщение

    if (e.checkSignMessage(signedMessage, pub)) { // проверяем подпись
        // message signed success
    }

Вывод

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

  • легко подключается
  • легко эксплуатируется.

Но в связи с тем, что данная версия библиотеки поддерживает только числа до 128 бит, ее лучше всего применять только в качестве сессионной защиты, то есть 1 пара ключей - одна сессия.

Рекомендуем хостинг TIMEWEB
Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.
- блог компании
D

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

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

Комментарии

Только авторизованные пользователи могут публиковать комментарии.
Пожалуйста, авторизуйтесь или зарегистрируйтесь
Donate

Здравствуйте, уважаемые пользователи EVILEG !!!

Если сайт вам помог, то поддержите разработку сайта финансово, пожалуйста.

Вы можете сделать это следующими способами:

Спасибо, Евгений Легоцкой

p
17 февраля 2020 г. 14:41
pstMem

C++ - Тест 003. Условия и циклы

  • Результат:85баллов,
  • Очки рейтинга6
z
17 февраля 2020 г. 6:02
zet

C++ - Тест 006. Перечисления

  • Результат:80баллов,
  • Очки рейтинга4
z
17 февраля 2020 г. 5:49
zet

C++ - Тест 001. Первая программа и типы данных

  • Результат:80баллов,
  • Очки рейтинга4
Последние комментарии
17 февраля 2020 г. 3:22
Евгений Легоцкой

Добрый день. Это кастомный тег, помещается в файл, который находится в каталоге templatetags myapp/ templatetags/ myapp.py
B
16 февраля 2020 г. 13:36
BahaMeirman

Добрый вечер! Монжно по подробней о теге get_companion? ссылка не работает.
16 февраля 2020 г. 9:35
Евгений Легоцкой

Добрый день. На GitHub исходники, можете посмотреть в официальном репозитории
B
16 февраля 2020 г. 9:29
BahaMeirman

Здравстсвуйте Евгений, непонятно мне где эти исходники найти?
Сейчас обсуждают на форуме
19 февраля 2020 г. 11:58
Юрий

Спасибо, все понятно.
19 февраля 2020 г. 8:55
Михаиллл

Можно через сервер сделать
V
19 февраля 2020 г. 7:09
Vitali

Да, прямо сходу не заработало, а сейчас просто некогда разбираться, да и я уже решил не использовать в этом приложении WebEngine. Ошибка: WebEngineContext used before QtWebEngine::initialize(…
19 февраля 2020 г. 7:01
BlinCT

Просто реально не вижу тут каких то проблем в модели, вот вообще ничего. Но она все равно не отображается, то есть ладно бы если данные бы не появлялись а сама таблица была бы. Так и таблиц…
19 февраля 2020 г. 6:54
Михаиллл

понятно, думал что дебаг будет стандартно работать. спасибо за помощь!
EVILEG
О нас
Услуги
© EVILEG 2015-2019
Рекомендует хостинг TIMEWEB