Документация
ОС Аврора 5.0.1

Криптографическая архитектура Qt

Руководствуясь похожей по названию Криптографической архитектурой Java, QCA стремится предоставить простой и кроссплатформенный криптографический API, использующий типы данных и соглашения Qt. QCA отделяет API от реализации, используя плагины, называемые криптопровайдерами. Преимущество этой модели состоит в том, чтобы позволить приложениям избегать сопряжения или явной зависимости от какой-либо конкретной криптографической библиотеки. Эта функциональность позволяет легко изменять или обновлять реализации криптопровайдера без необходимости перекомпилировать приложение!

QCA должен работать везде, где работает Qt, включая Windows/Unix/MacOSX. Эта версия QCA предназначена для Qt4 или Qt5 и не требует кода для совместимости с Qt3.

Функциональность

Эта библиотека предоставляет простой API для следующей функциональности

  • Безопасные массивы байтов (QCA::SecureArray)
  • Целые числа произвольной точности (QCA::BigInteger)
  • Генерация случайных чисел (QCA::Random)
  • SSL/TLS (QCA::TLS)
  • Сертификаты X509 (QCA::Certificate и QCA::CertificateCollection)
  • Списки отозванных сертификатов X509 (QCA::CRL)
  • Встроенная поддержка корневого хранилища сертификатов операционной системы (QCA::systemStore)
  • Уровень простой аутентификации и безопасности (SASL) (QCA::SASL)
  • Синтаксис криптографических сообщений (e.g., for S/MIME) (QCA::CMS)
  • Сообщения PGP (QCA::OpenPGP)
  • Унифицированный API PGP/CMS (QCA::SecureMessage)
  • Подсистема управления смарт-картами и связками ключей PGP (QCA::KeyStore)
  • Простая, но гибкая система ведения журнала (QCA::Logger)
  • RSA (QCA::RSAPrivateKey и QCA::RSAPublicKey)
  • DSA (QCA::DSAPrivateKey и QCA::DSAPublicKey)
  • Протокол Диффи — Хеллмана (QCA::DHPrivateKey и QCA::DHPublicKey)
  • Хеширование (QCA::Hash) с помощью
    • SHA-0
    • SHA-1
    • MD2
    • MD4
    • MD5
    • RIPEMD160
    • SHA-224
    • SHA-256
    • SHA-384
    • SHA-512
    • Whirlpool
  • Шифрование (QCA::Cipher) с использованием
    • BlowFish
    • Тройной DES
    • DES
    • AES (128, 192 и 256 бит)
    • CAST5 (также известный как CAST-128)
  • Код аутентификации сообщения (QCA::MessageAuthenticationCode) с использованием
    • HMAC с SHA-1
    • HMAC с MD5
    • HMAC с RIPEMD160
    • HMAC с SHA-224
    • HMAC с SHA-256
    • HMAC с SHA-384
    • HMAC с SHA-512
  • Кодирование и декодирование шестнадцатеричных (QCA::Hex) и Base64 (QCA::Base64) строк.

Функциональность предоставляется через плагины. Этот подход полезен для того, чтобы избежать зависимости от конкретной криптографической библиотеки и упростить обновление, поскольку нет необходимости перекомпилировать приложение при добавлении или обновлении криптографического плагина. Кроме того, благодаря включению криптографических функций в плагины приложение избавляется от юридических проблем, таких как регулирование экспорта.

И, конечно, предоставляется очень простой криптографический API для Qt, с помощью которого можно выполнять подобные действия:

QString hash = QCA::Hash("sha1").hashToString(blockOfData);

Использование QCA

Приложение просто включает <QtCrypto> и ссылки на libqca, которая предоставляет «оболочку API» и загрузчик плагинов. Криптографическая функциональность определяется во время выполнения, а подключаемые модули загружаются из подкаталога «crypto» путей к библиотеке Qt. Доступны дополнительные примеры.

Введение

Использование QCA во многом похоже на использование Qt, и при опыте работы с Qt работа с QCA должна казаться «естественной». Однако для создания надёжных приложений необходимо знать несколько особенностей:

  • QCA необходимо инициализировать перед использованием любого класса, который требует поддержки плагинов или использует безопасную память. Это большая часть QCA, поэтому следует обязательно предполагать, что нужно выполнить инициализацию. Самый простой способ сделать это — создать экземпляр объекта QCA::Initializer и убедиться, что он не удалён (или не может выйти за пределы области видимости), пока не закончится использование QCA.
  • Большинство функциональности/алгоритмов предоставляется плагинами/криптопровайдерами. Необходимо убедиться, что требуемая функция действительно доступна (используя QCA::isSupported()), прежде чем пытаться её создать. Если приложение попытается создать класс, а поддержка подходящего криптопровайдера недоступна, оно вернётся к нулевому объекту, а когда попытается использовать один из методов — получит ошибку сегментации. Кроме того, для функциональности, которая использует имена алгоритмов (например, QCA::Hash, который принимает на вход имя алгоритма хеширования, например «md5» или «sha256»), имя ищется во время выполнения, поэтому при опечатке (например, «md56») всё будет компилироваться правильно, но во время выполнения произойдёт ошибка сегментации.

Идеи насчёт безопасности

QCA пытается быть гибким в том, что он поддерживает. Это не означает, что каждая возможная комбинация функций имеет смысл.

Настоятельно не рекомендуется придумывать собственную структуру, состоящую из низкоуровневых криптографических примитивов (например, QCA::Hash, QCA::Cipher и подобной функциональности) и пытаться использовать возможности более высокого уровня. В частности, рекомендуется рассматривать QCA::TLS, QCA::SASL, QCA::CMS и QCA::OpenPGP в качестве отправных точек.

Выбирая конкретную криптографическую функцию, необходимо понимать то, каким угрозам может подвергнуться приложение и как с этой угрозой можно эффективно справляться. Кроме того, следует проанализировать, можно ли избежать добавления криптографической функциональности непосредственно в приложение (например, для безопасной коммуникации можно туннелировать приложение через SSH).

Кроме того, может понадобиться выйти за рамки QCA для некоторых требований безопасности (например, для аутентификации в конкретной ситуации Kerberos может оказаться более подходящим, чем SASL или TLS).

Архитектура

Архитектура QCA демонстрируется ниже:

Архитектура QCA

Авторам приложений обычно нужно использовать только User API. API криптопровайдера доступен для авторов плагинов, но также может использоваться авторами приложений для предоставления очень специфических возможностей.

Для получения дополнительной информации о дизайне QCA можно обратиться к описанию архитектуры.

Доступность

Выпуски

Последние выпуски пакетов можно найти в области загрузки QCA 2.x.

Следует обратиться к сайту проекта для получения дополнительной информации о выпусках QCA.

Текущая разработка

Последняя версия кода доступна на сервере KDE Git (в настоящее время нет официального выпуска текущей версии). Обязательно потребуется правильно установить и настроить Qt для создания и использования QCA.

Код Git можно просматривать на сайте

Можно использовать

git clone https://invent.kde.org/libraries/qca.git

чтобы получить актуальный исходный код.

Мы используем cookies для персонализации сайта и его более удобного использования. Вы можете запретить cookies в настройках браузера.

Пожалуйста ознакомьтесь с политикой использования cookies.