Я бы хотел зашифровать ключи и значения хеш-карты с помощью AES256 CBC, индивидуально.Задача состоит в том, чтобы зашифровать ключи, поддерживая постоянную скорость поиска и безопасность (в основном от атак по словарю).
Я читал о слепых индексах, но они требуют некоторой случайности при создании (соль, одноразовый номер), и это невозможнодля функции поиска, чтобы воссоздать одноразовый номер при поиске.При поиске нам нужно знать, откуда можно извлечь одноразовый номер для определенного ключа, что в итоге означало бы быть уязвимым в другом месте.
Пока что я могу думать только о двух вариантах.
Первый можно было бы просто не шифровать ключи, хотя я бы предпочел это сделать.
второй один - получить слепые индексы путем примененияпреобразование наподобие
blind_index(key) = encrypt(digest(key))
, но проблема здесь в том, что вам необходим уникальный вектор инициализации для каждого шифрования ключа, что вновь возвращает нас к проблеме, описанной выше: использование таблицы IV для того, чтобыфункция поиска, позволяющая восстанавливать слепой индекс при поиске, который перемещает ту же проблему в другом месте.
Для второго подхода я подумал: поскольку я всегда шифрую уникальные значения (ключи уникальны и даже если ониявляются подстроками друг друга, например, «awesome» и «awesome_key», они хешируются перед шифрованием, поэтому они выглядят совершенно иначеhed & unicrypted 'form) Я мог бы использовать глобальный IV для всех шифрований, которые могут быть легко доступны для функции поиска.Поскольку для функции поиска требуется ключ шифрования, только владелец сможет правильно рассчитать слепой индекс, и в самой карте не будет видимых сходств между ключами, которые похожи в открытом тексте.
Большая проблема IВторой подход заключается в том, что он нарушает идею никогда не использовать IV для более чем одного шифрования.Я мог бы запутать IV «чтобы сделать его более безопасным», но это опять-таки плохая идея, так как предполагается, что IV должны быть открытым текстом.
Подробнее об обстоятельствах:
- приложение длякарта для мобильного
- будет выгружена в файл * карта 1027 *
- будет доступна для поиска через REST API
Возможно, мне следует использовать другой алгоритм (например, EBC)?
Заранее спасибо!