Рейтинг:0

Хеширование псевдонимизации с использованием открытого ключа

флаг be

У меня есть журналы, содержащие конфиденциальные данные (почтовые адреса, имена пользователей и т. д.), которые необходимо не только привести в соответствие с GDPR, но и в целом максимально защитить, поэтому анонимизация/хеширование будет простым решением. Однако в то же время мне нужно иметь возможность сопоставлять информацию для целей мониторинга (например, выявления атак). Для этого значения открытого текста не имеют значения, но мне нужно, чтобы псевдонимизированные хэши были равны для одного и того же источника открытого текста (детерминизм). Поскольку я не могу хранить данные в открытом виде, а только в псевдонимизированном виде, мне также необходимо иметь возможность расшифровывать значения, если это необходимо. Поскольку может быть несколько источников данных, которые необходимо расшифровывать по отдельности (редко все сразу нужны), моя первоначальная идея состояла в том, чтобы использовать простой старый подход с открытым/закрытым ключом с использованием RSA, который я знаю из своего ежедневного использования SSH. -day: зашифруйте значения, используя открытый ключ для каждого источника, храните закрытые ключи в сейфе. Тем не менее, RSA вносит случайность в хэши, что имеет смысл с точки зрения безопасности, но разрушает мое детерминистическое требование «должен иметь возможность коррелировать».

Любые идеи о хорошем решении? Есть ли аналогичный алгоритм, который я могу использовать, который не слишком прост для грубой силы, но может использовать подход с открытым/закрытым ключом? Мне не хватает других слабых мест, например. пытаетесь использовать необработанный RSA без рандомизированного заполнения?

С точки зрения операций: риск того, что злоумышленник может получить доступ к большому количеству хэшей, намного выше, чем риск того, что он получит доступ к открытому ключу, который уже надежно защищен. Самый большой выявленный риск (все еще очень маловероятный) заключается в том, что злоумышленник может внедрить свои собственные данные в источник конвейера для обработки/шифрования, а затем просмотреть хэши, что позволит ему сравнить открытый текст и хэши (= угадать хэши ). Скорость шифрования не обязательно должна быть очень высокой, а скорость дешифрования еще менее важна.

Если это уместно, фактическая реализация должна быть выполнена с использованием Python.

Maarten Bodewes avatar
флаг in
Под хешированием мы обычно подразумеваем, что вы пропускаете свои данные через криптографический хэш, такой как SHA-256. Вы имеете в виду такое хеширование или шифрование, которое создает зашифрованный текст для обеспечения конфиденциальности?
kelalaka avatar
флаг in
Хешируйте для равенства и в то же время используйте AES-GCM с IV = номер журнала.
Senshi avatar
флаг be
@MaartenBodewes Я имею в виду шифрование, потому что в некоторых случаях мне нужно восстановить открытый текст. Насколько я понимаю, хеширование - это "односторонний" метод, то есть я не могу получить открытый текст из сгенерированного хеша. Это верно?
Рейтинг:3
флаг ar

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

Однако все такие схемы неизбежно уязвимы для атак с угадыванием методом грубой силы, если количество правдоподобных открытых текстов невелико — скажем, менее септиллиона ($10^{24} — 2^{80}$).

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

Типичный центральный процессор для настольных ПК может выполнять порядка миллиарда ($10^9 — 2^{30}$) шифров в секунду, поэтому, если число вероятных открытых текстов меньше этого значения, схема вообще не обеспечивает реальной безопасности. И если злоумышленник готов потратить немного больше времени и/или купить (или украсть) немного больше вычислительной мощности, чем это, он, вероятно, сможет пройти методом грубой силы через тысячу, миллион или миллиард раз больше открытых текстов. Кроме того, одновременная атака на несколько зашифрованных текстов таким же образом выполняется так же быстро, как и атака на один.

А растяжка ключей Схема может использоваться для замедления таких атак, но только за счет замедления легитимных операций шифрования (и дешифрования) примерно на тот же коэффициент. Так, например, если вы можете жить с одной операцией шифрования, занимающей примерно одну ЦП-секунду, вы можете заставить злоумышленника также использовать около одной ЦП-секунды (плюс-минус 10 или 100 в зависимости от эффективности реализации), чтобы угадать и проверить единственный правдоподобный открытый текст. Но это по-прежнему означает, что злоумышленник, имеющий доступ к 100 процессорам (или, возможно, к одному быстрому графическому процессору), может протестировать миллион возможных открытых текстов примерно за три часа.

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

Вместо этого вы можете сделать одно из следующего (примерно в порядке убывания предпочтений):

  1. Не храните и не обрабатывайте такие данные, если можете этого избежать.

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

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

В качестве альтернативы вы можете сгенерировать псевдонимные идентификаторы, применив ЧПИ (такие как HMAC или какое-то растяжение клавиш КДФ) к элементам конфиденциальных данных с секретным ключом. Если это так, вы должен защитить ключ PRF от компрометации, так как его можно использовать для депсевдонимизации всех данных.

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

флаг ar
Пс. Связанный ранее ответ: https://crypto.stackexchange.com/questions/25808/one-way-deterministic-hash-for-low-entropy-input/25813#25813
Senshi avatar
флаг be
Большое тебе спасибо. Все это было очень информативно и дало мне пищу для размышлений. Я недооценил уязвимость к брутфорсу с выбранным открытым текстом и ограниченными комбинациями. Рекомендация 2 звучит как привлекательное решение для этого конкретного случая. Автоматический анализ происходит на изолированной рабочей станции, где ключ дешифрования хранится недоступным для всех пользователей, а сгенерированные отчеты будут доступны только для избранных аналитиков, использующих наш IDM. Расшифровка ad-hoc никогда не должна происходить в любом случае, за исключением чрезвычайных судебных дел.

Ответить или комментировать

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