На многих платформах мобильного кода часто встречается исполняемый код, подписанный с помощью цифровой подписи RSA . Это позволяет полномочным органам «одобрить» фрагмент кода, который затем может быть распространен третьим лицам, и клиенты знают, что код безопасен. Цифровые подписи используются для предотвращения пиратства в современных консольных видеоиграх. Они также используются для проверки того, что обновление программного обеспечения было получено от поставщика, а не от злоумышленника.
Это php-приложение может иметь открытый ключ (или даже распространяться с этим открытым ключом). Администратор имеет доступ как к открытому, так и к закрытому ключу, с помощью которого он может подписать файл .php. После включения подпись может быть проверена. Если файл php изменен или поврежден, подпись не пройдет проверку.
На практике PHP-приложения выполняют много включений, и поэтому любая функция проверки будет огромной проблемой. Все, что является безопасным, также будет очень дорогим. Было бы лучше проверить подпись один раз, а затем перенести ее в белый список каталога или базы данных. Еще один способ повысить скорость вы можете использовать меньший ключ RSA для подписи. Например, 512-битный RSA-ключ достаточно хорош для SSLv3, поэтому его, вероятно, достаточно для этого.
MD5 очень плох. Если вы храните белый список «безопасных» хэшей файла md5, то это открывает дверь для генерации коллизий . Это идеальная ситуация для использования атаки префикса md5, потому что специально созданные двоичные данные в начале файла не помешают include()
выполнить код в тегах php <?php ?>
.
CRC даже хуже, чем md5 . CRC не предназначен для усложнения коллизий хешей. CRC предназначен только для обнаружения повреждений от случайного шума. Используя атаку, аналогичную md5, добавляя данные a к сообщению, можно создать коллизию CRC .
sha1 - это безопасная и быстрая хеш-функция, которую вы можете использовать. Существует похожая атака столкновения хешей, которая влияет на sha1. Однако в отличие от md5 никто не генерировал коллизию sha1, и NIST все еще считает его использование безопасным . Хотя sha256 будет более безопасным выбором.