Рейтинг:4

Риски использования SHA1 вместо SHA256 для RSA с заполнением OAEP

флаг us

В настоящее время я реализую простое шифрование на основе RSA следующим образом в PHP (используя openssl_public_encrypt):

// $sRawText — текстовая строка для шифрования.
// $sPublicKey — открытый ключ, хранящийся на сервере.
openssl_public_encrypt($sRawText, $sРезультат, $sPublicKey, OPENSSL_PKCS1_OAEP_PADDING);
// $sResult — это зашифрованный результат, который затем сохраняется.

Я обязательно использовал опцию заполнения OAEP, однако заполнение выполняется с помощью SHA1 вместо SHA256. PHP не имеет встроенной опции заполнения, поддерживающей SHA256. Например, криптографическая библиотека Python использует SHA256 вместо этого:

сериализация импорта из cryptography.hazmat.primitives
из cryptography.hazmat.primitives импортировать хэши
из cryptography.hazmat.primitives.асимметричное заполнение импорта
зашифрованный текст = public_key.encrypt(
    сообщение,
    заполнение.OAEP(
        mgf=padding.MGF1(алгоритм=хэши.SHA256()),
        алгоритм=хэши.SHA256(),
        метка = нет
    )
)

Единственный вариант для меня получить SHA256 на PHP — использовать стороннюю библиотеку, такую ​​​​как PHPSecLib или EasyRSA. Я столкнулся с препятствиями через несколько часов, пытаясь установить и использовать любой из них в своей среде общего хостинга. (Было бы идеально, если бы я мог поместить один файл .php с RSA в одном месте.)

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

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

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

Что я хочу знать, так это то, что если я продолжу реализацию заполнения SHA1, какие атаки это откроет для меня против противника с зашифрованными данными базы данных и открытым ключом. Как они будут реагировать на эти атаки? Помогает ли заполнение SHA256 лучше защитить данные и как?

Большое спасибо!

kelalaka avatar
флаг in
Спасибо. Тем не менее «это безопасно, поскольку MGF не является стандартным способом обнаружения коллизий SHA-1. тем не менее, найдите способ выполнить миграцию на использование SHA-256; найти способы его использования.
флаг us
Я понимаю, что SHA-256 является рекомендуемым выбором. Однако я хотел бы понять, почему и каков риск с SHA-1. Является ли MGF функцией, производящей момент?
Рейтинг:5
флаг cn

Вы можете использовать SHA-1 или MD5 для OAEP. Он не подвергнет вас никакой атаке.

OAEP использует хеш-функции для двух целей: для хеширования метки и как часть функции генерации маски, которая на практике всегда является MGF1 какой-либо хеш-функции.

Для метки хэш-функция просто используется для превращения метки в разделитель домена зашифрованного текста: при расшифровке зашифрованный текст с неправильным хэшем метки определяется как недействительный. Пока вы не строите этикетку из частей, которые могут быть предоставлены противником, вы не рискуете столкнуться. И если вы создаете метку сложным образом и полагаетесь на нее в целях безопасности, вам, вероятно, все равно придется иметь подпись.

Для MGF1 хэш-функция используется как случайный оракул. Его свойства как хеша не имеют значения. Бывшие популярные хэш-функции, которые стали устаревшими, устарели, потому что существуют конкретные атаки на их свойства как хэш-функции (в частности, устойчивость к коллизиям). Однако, как случайные оракулы, они по-прежнему считаются такими же хорошими, как и прежде. (У них есть один известный недостаток, а именно расширение длины, а также применимое к SHA2, у которого нет известного недостатка в виде хэш-функции. Но расширение длины в любом случае не применяется к MGF1 в OAEP, поскольку оно используется на входе фиксированного размера для заданный ключ RSA.)

Использование SHA-1 в криптографической конструкции может вызвать недовольство аудиторов и сделать вашу систему несовместимой с определенными стандартами безопасности. С точки зрения безопасности это немного отвлекает, но не является уязвимостью.

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

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