Andrei Yankovich
14 червня 2019 р. 16:10

Шифрування даних за алгоритмом RSA в Qt з відкритими та закритими ключами без прив'язки до 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

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

    git submodule update --init --recursive

  • Додайте свій файл бібліотеки Qt-Secret "pri" у свій "pro" файл.

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

  • Перезберіть проект

Бібліотека додана до вашого проекту, тепер ви можете нею користуватися.

Приклад використання

Шифрування та дешифрування повідомлень.
#include <qrsaencryption.h> // Include the Qt-Secret library (RSA)

QByteArray pub, priv; // Create variables to keys.
QRSAEncryption e; // Create a variable to cryptographer

// Generate a pair of keys with a bit depth of 128
e.generatePairKey (pub, priv, QRSAEncryption :: Rsa :: RSA_128); // or QRSAEncryption :: Rsa :: RSA_64
QByteArray msg = "test message";


auto encodeData = e.encode (msg, pub); // encrypt the message with the public key
auto decodeData = e.decode (encodeData, priv); // decrypt with the private key

qDebug () << decodeData; // check in the message.



Підпис та перевірка підпису повідомлення.
#include <qrsaencryption.h>

// Initialization
QByteArray pub, priv;
QRSAEncryption e;
e.generatePairKey (pub, priv, QRSAEncryption :: Rsa :: RSA_128); // or QRSAEncryption :: Rsa :: RSA_64

QByteArray msg = "test message";

auto signatureMessage = e.signMessage (msg, priv); // sign the message

if (e.checkSignMessage (signatureMessage, pub)) {// check the signature
// message signed successfully
}

Висновок

Ця бібліотека є гарним рішенням для найпростіших завдань шифрування.

  • легко увімкнути;
  • Легко використовувати.

Добре використати пару ключів для одного сеансу роботи.

Рекомендовані статті на цю тему

По статті запитували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

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

Коментарі

Only authorized users can post comments.
Please, Log in or Sign up