Вопрос по php, mcrypt, encryption – PHP Mcrypt, насколько это безопасно? [закрыто]

7

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

Я нашел простой способ шифрования / дешифрования строк и текстовых блоков, используя mcrypt. Но когда я выполнял поиск по mcrypt здесь на stackoverflow, я заметил, что многие люди говорят, что mcrypt вообще-то не так безопасен.

Так что теперь мне интересно, насколько это безопасно на самом деле? Нужно ли много хакерских навыков, скажем, экспертных, чтобы взломать и расшифровать хранимую информацию, если ключ хранится надежно? Нужно ли бояться, что хакер с небольшими навыками сможет расшифровать зашифрованную информацию, которую я собираюсь хранить на сервере MySQL? Итак, какие навыки необходимы для взлома зашифрованной информации, которая зашифрована с помощью mcrypt?

Если Mcrypt недостаточно пригоден для использования, каковы хорошие альтернативы, которые не так сложны, как использование расширений gnupg?

"i noticed that many people tell that mcrypt is afterall not that secure." - не так безопасно? Это без рассуждений? hakre
На самом деле, я не знаю о недостатке безопасности в mcrypt, который мог бы сделать его небезопасным. Сама природа криптографии заключается в том, что эти материалы считаются неизвестными, пока не доказано, что они небезопасны. & quot; Нет известных уязвимостей в mcrypt & quot; просто означает «пока все хорошо, что никто еще не доказал уязвимость», поэтому при правильном использовании он должен быть для вас криптографическим. Все может измениться завтра, если кто-то опубликует уязвимость. Черт, может, кто-то сидит на эксплойте и уже использует его, как мы говорим, только то, что никто еще не заметил ... deceze♦
Имейте в виду, что технология - это только одна часть уравнения ... Ваше приложение также должно быть безопасным. Сосредоточив внимание исключительно на технологии, вы можете предположить, что вы более защищены, чем вы. Jeremy Holovacs
Говоря так, я надеюсь, что вы понимаете идею, что есть гораздо более обширная картина, о которой вам нужно знать, и что простой вопрос "действительно ли mcrypt безопасен"? вряд ли ответственно deceze♦
Сам по себе mcrypt не является решением в один клик, он поддерживает несколько разных алгоритмов в нескольких разных режимах. Это маленькая шестеренка, сжимающая фактические цифры, вокруг которых вы должны построить свою систему безопасности. В большинстве случаев отсутствие безопасности связано с тем, что разработчики используют mcrypt ненадлежащим образом, поскольку они не понимают общую картину. deceze♦

Ваш Ответ

1   ответ
17

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

  • Do not reuse the same encryption key and initialization vector (IV) for two different messages.

Doing so will risk exposure of the plain-text if an adversary manages to intercept two or more messages during transit using the same key and IV.

  • Don't use ECB mode; OFB and CTR mode are somewhat better, but it's recommended to use CBC or CFB mode.

The main reason to not use ECB is because this mode leaks information about duplicate plain-text blocks which may undermine your encoded stream of data.

OFB and CTR are better, but they suffer from the aforementioned security issue of using the same IV+key combination more than once.

CFB and CBC are the most resilient against IV+key reuse, but separate messages with the same common prefix will leak out the length of said prefix. In addition, CFB leaks out the difference of the first non-identical plain-text blocks.

  • Make sure you have a strong encryption key

    It should not be chosen from printable ASCII (e.g. not "my super strong secret key"); PBKDF2 would be preferred (soon to be supported natively, until then Google it). It should be obvious that this key must be kept safe; if you lose it, bye bye data.

  • Use a good entropy source to generate the initialization vector.

    Mcrypt has an option to use MCRYPT_DEV_RANDOM or MCRYPT_DEV_URANDOM when you call mcrypt_create_iv().

Надеюсь, что это поможет вам :)

Большое спасибо, Джек! Arjan Poortman

Похожие вопросы