предупреждение mcrypt при обновлении до php 5.6.2; Ключ размера x не поддерживается

Мы получаем следующее предупреждение после обновления с PHP 5.5.18 до PHP 5.6.2:

mcrypt_decrypt(): Key of size 20 not supported by this algorithm. Only keys of sizes 16, 24 or 32 supported

Алгоритм шифрования до этого работал нормально:

$decrypttext = mcrypt_decrypt(
  MCRYPT_RIJNDAEL_256,
  $this->keys[$key_label],
  $crypttext,
  MCRYPT_MODE_ECB,
  $iv
);

Было бы большой проблемой повторно зашифровать все, есть ли что-то, чем я могу дополнить ключ, чтобы он работал так же, как и раньше?

Предположительно, здесь нет никаких уязвимостей безопасности.


person Arth    schedule 09.03.2015    source источник
comment
См. изменения обратной несовместимости между 5.5 и 5.6. Боюсь, вам придется написать Fixer, поскольку вы сделали это неправильно, чтобы начать с Документация по PHP   -  person RiggsFolly    schedule 09.03.2015
comment
"Вероятно, здесь нет никаких уязвимостей в системе безопасности" — это, вероятно, отношение, которое раньше демонстрировал каждый взломанный сервис…   -  person CBroe    schedule 09.03.2015
comment
@CBroe «По-видимому, здесь нет никаких уязвимостей в системе безопасности» - я не могу придумать ни одной, но если кто-то знает об одной, не могли бы вы сообщить мне. Нет, я не могу беспокоиться о безопасности ... так что спасибо за этот ненужный высокопоставленный комментарий.   -  person Arth    schedule 09.03.2015
comment
str_pad($this->keys[$key_label], "\0", 32) должен это сделать, но MCRYPT_RIJNDAEL_256? Режим ЕЦБ? Фу :(   -  person Scott Arciszewski    schedule 09.03.2015
comment
Пожалуйста, рассмотрите возможность перехода на проверенную альтернативу, такую ​​как github.com/defuse/php-encryption. прокатки самостоятельно.   -  person Scott Arciszewski    schedule 09.03.2015
comment
@Scott Спасибо за предложения, насколько мне известно, MCRYPT_RIJNDAEL_256 очень похож на стандартный MCRYPT_RIJNDAEL_128 или был в 2010 году см. этот вопрос. Да, ECB был недосмотром, но на самом деле мы шифруем только номера (короче, чем длина блока) и адреса электронной почты для urluse. Почему небольшое расширение git-hub считается рецензируемым, а не расширение mcrypt?   -  person Arth    schedule 10.03.2015
comment
Расширение github обеспечивает аутентифицированное шифрование. libmcrypt был заброшен с 2007 года и в PHP 7, вероятно, будет заменен на openssl.   -  person Scott Arciszewski    schedule 10.03.2015
comment
@ Скотт, приятно знать, спасибо!   -  person Arth    schedule 10.03.2015


Ответы (1)


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

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

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

person Xander    schedule 09.03.2015