2010-11-10 4 views
0

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

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

расшифровать данные:

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

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

ответ

3

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

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

+0

Я извиняюсь, я действительно не засовываю данные, я использую уникальный идентификатор для каждого члена в качестве ключа (так что каждый ключ отличается) – JM4

1

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

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

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

+0

спасибо за последнюю точку. Что касается отдельных пар открытых/закрытых ключей для каждого пользователя - это кажется необоснованным, поскольку у нас может быть 10 000 записей. Необходимо создать пару для каждой записи, а затем сохранить их, а затем загрузить и запустить дешифрование для каждого из них было бы почти невозможно. Мне нравится ваш вопрос «один, а не все», но я не уверен, что в этих обстоятельствах маршрут возможен. – JM4

+0

@ JM4: Ах, я предположил из вашего описания, что вы выбираете отдельные записи для дешифрования при дешифровке, а не для всех. Один ключ должен быть в порядке. – caf