Я хочу защитить свои данные от изменения или чтения посторонними лицами. Поискав вокруг, я обнаружил, что аутентифицированное шифрование (AE) является решением.
Я знаю, что могу выполнять AE в Crypto++, используя любой из CCM, GCM или EAX. Но я заметил, что они используют один и тот же ключ для шифрования и расшифровки данных. Я не хочу этого, я предпочитаю использовать асимметричные ключи для шифрования и дешифрования своих данных.
Если я подпишу данные с помощью асимметричного алгоритма, а затем зашифрую их с помощью симметричного алгоритма, я добьюсь того, чего хочу (что должно быть в безопасности, так как это метод AtE, верно?).
Но прежде чем я это сделаю , есть ли какие-нибудь криптобиблиотеки, которые уже делают то, что я хочу?
Асимметричное аутентифицированное шифрование
Ответы (3)
Я знаю, что могу выполнить аутентифицированное шифрование... используя... CCM, GCM или EAX. Но я заметил, что они используют один и тот же ключ для шифрования и расшифровки данных. Я этого не хочу, я предпочитаю использовать асимметричные ключи для шифрования и расшифровки своих данных.
Все известные мне схемы будут использовать симметричный шифр для шифрования больших объемов данных. Симметричный шифр может быть блочным или поточным шифром.
Я также видел несколько некорректных приложений RSA, где RSA работает в режиме ECB. То есть данные «разбиваются» или «блокируются», а затем к каждому блоку применяется RSA. В Справочнике по прикладной криптографии содержится особое предупреждение об этом.
Лучшее, что вы, вероятно, собираетесь сделать, это Интегрированная схема шифрования на основе эллиптических кривых (ECIES) или Интегрированная система шифрования дискретных журналов (DLIES). Оба доступны в Crypto++. Оба используют криптографию с открытым ключом (асимметричную).
ECIES и DLIES объединяют механизм инкапсуляции ключей (KEM) с механизмом инкапсуляции данных (DEM). Система независимо получает симметричный ключ шифрования и ключ MAC из общего секрета. Данные сначала шифруются с использованием симметричного шифра, а затем зашифрованный текст подвергается MAC-адресации в соответствии со схемой аутентификации. Наконец, общий секрет шифруется общедоступной частью пары открытый/закрытый ключ. Результатом функции шифрования является кортеж {K,C,T}
, где K
— зашифрованный общий секрет, C
— зашифрованный текст, а T
— тег аутентификации.
Существует некоторый отказ от «общего секрета», поскольку он на самом деле является результатом применения функции согласования ключей и последующего переваривания с помощью KDF. Он использует статический открытый ключ и пару эфемерных ключей. Человек, выполняющий расшифровку, использует свой открытый ключ для выполнения второй половины обмена ключами, чтобы получить «общий секрет».
KEM и DEM избегают заполнения, поэтому оракулы заполнения не являются проблемой. Вот почему KDF используется для обработки большого «общего секрета» KEM. Отсутствие заполнения значительно упрощает проверку безопасности системы. Из-за доказательств безопасности ECIES и DLIES являются IND-CCA2, что является одним из самое сильное, чего вы можете достичь.
Если я подпишу данные с помощью асимметричного алгоритма, а затем зашифрую их с помощью симметричного алгоритма...
Вот некоторые материалы по теме... Во-первых, это Порядок шифрования и аутентификации для защиты связи< /а>. Во-вторых, Дон Дэвис дефектная подпись и шифрование в S/MIME, PKCS#7, MOSS, PEM, PGP и XML.
Актуальность здесь заключается в следующем: статья Кравчика посвящена криптографии с симметричным ключом и стилю аутентифицированного шифрования «Зашифровать, затем аутентифицировать» (и тому, как выполнить аутентифицированное шифрование). Статья Дэвиса посвящена асимметричной криптографии и несоответствию между подписью и шифрованием (и тому, как это исправить).
Но прежде чем я это сделаю, есть ли какие-нибудь криптобиблиотеки, которые уже делают то, что я хочу?
Да (но это зависит от того, что вы хотите сделать). Насколько я знаю, Crypto++ — единственный, который предоставляет ECIES, DLIES и набор PSSR.
Bouncy Castle занимает второе место, поскольку предоставляет ECIES, но не DLIES. Я не уверен, сколько PSSR он предоставляет.
Crypto++, Bouncy Castle, OpenSSL (и другие) предоставляют PSSR. У вас не должно возникнуть проблем с поиском библиотеки с PSSR.
Возможно, вы могли бы рассмотреть решение на основе OpenPGP. Это предоставит вам желаемую функциональность и будет масштабироваться для поддержки произвольных размеров данных, в отличие от решения, основанного исключительно на асимметричном шифровании (без транспортного ключа).
Есть несколько реализаций с открытым исходным кодом. BouncyCastle предлагает один, но я не уверен, что у них есть реализация C++.
GPGME (упрощенная версия GnuPG). Это библиотека шифрования высокого уровня на C, лицензированная LGPL.
encryp_sign
, но на самой странице говорится только о шифровании. А во-вторых, как работает decrypt_verify
? Я не вижу никаких ключей, переданных в него.
- person atoMerz; 27.11.2012