Достаточно ли шифрования openSSL? - PullRequest
0 голосов
/ 10 ноября 2010

У меня есть конфиденциальная информация, хранящаяся в базе данных, которая проходит следующий процесс:

  1. пользователь вводит информацию через веб-форму.
  2. введенная информация зашифрована с использованием 256-битной AES и засоленаиспользование уникального идентификатора для каждого пользователя (хотя он хранится в той же базе данных , , а иногда и в той же таблице).
  3. Зашифрованные данные прохода 1 затем анализируются с помощью функции openssl_pub_encrypt
  4. данные хранятся в базе данных mysql с типом поля: varbinary

для расшифровки данных:

  1. закрытый ключ хранится вне сервера и должен быть загружен во временный файлКАЖДЫЙ раз, когда необходимо получить данные
  2. код проходит через openssl_private_decrypt
  3. код выполняется через дешифрование с той же солью и сценарием AES-256.

Что мне интересно, так это запуск информации через бит AES-256 в этом случае, даже если он стоит (так как ключ находится в автономном режиме, а соль ужехранится в таблице, если данные когда-либо скомпрометированы)?

Ответы [ 2 ]

3 голосов
/ 11 ноября 2010

Соль не имеет смысла для симметрично зашифрованных данных, что вы получаете с AES-256.Во всяком случае, это просто облегчило бы работу любого потенциального взломщика, поместив в данные какой-нибудь известный текст.В конце концов, ЛЮБОЙ ключ «расшифровывает» данные, но только один ключ создает исходные данные.Поместив туда часть известного открытого текста, вы значительно упростили определение, является ли используемый ключ действительным или нет («это солевой текст, если так, ключ действителен»).

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

1 голос
/ 11 ноября 2010

Нет смысла шифровать данные ключом, доступным в том же месте, что и зашифрованные данные.

Однако было бы полезно, если бы вы использовали отдельную пару открытый / закрытый ключ для каждогопользователь - таким образом, если утечка личного ключа, вы выставляете только одну из своих записей вместо всех.

Кстати, openssl_public_encrypt() / openssl_private_decrypt() не совсем подходящая функция для использования- это функция более низкого уровня, предназначенная для шифрования случайно сгенерированных ключей, а не для непосредственной работы с данными.Право, функции более высокого уровня: openssl_seal() / openssl_open().

...