openssl — как подписать исходный код PHP

Я хочу распространить некоторый исходный код PHP,
Мне нужно предоставить способ убедиться, что эти исходные коды не изменены.

Поэтому в основном я хочу подписать их (если это возможно, используя PHP), а затем проверить их подпись (использование PHP обязательно, оно должно работать как на Linux, так и на Windows).

Я копался, и я обнаружил, что:

  • подписание:
    • Вы можете создать ZIP-архив, используя PharData
    • Вы можете создать паб / прив, используя OpenSSL.
    • Вы можете подписать PharData, используя Phar :: setSignatureAlgorithm
    • вам кажется надо положить открытый ключ рядом с архивом (источник (прочитайте шаг 3)):
      Открытый ключ должен иметь то же имя, что и файл Phar, с добавлением .pubkey, и должен находиться в том же каталоге, что и ваш Phar.
  • проверка:

если кто-то может подтвердить этот процесс (или указать лучший), это было бы очень полезно.

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

3

Решение

Что касается подписанных phar-файлов, то в последний раз я проверял поведение по умолчанию:

  • если подпись верна, извлеките файл из phar (и выполните, если php)
  • если подпись неверна, выведите ошибку
  • если нет подписи, получить файл из phar (и выполнить, если php)

Следовательно, просто обойти защиту подписи, просто удалив подпись (на самом деле, вам просто нужно пометить файл как не подписанный). Вы можете явно установить phar.require_hash опция, которая удаляет этот бэкдор в экземпляре.

чтобы убедиться, что эти исходные коды не изменены

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

Есть много сторонних кодировщиков PHP, которые работают, запутывая код. Почти все они обеспечивают смехотворный уровень защиты. Исключением являются кодировщик IonCube и кодировщик Zend. Я недостаточно знаком с ними, чтобы сказать, насколько они сильны и соответствуют ли они вашим требованиям.

Было несколько PHP-компиляторов с открытым исходным кодом, которые конвертировали бы исходный код PHP в расширение .so (в частности, Facebook HipHop), но я не думаю, что они поддерживаются.

Если вы просто хотите убедиться, что проверенный контент доступен вашим клиентам (и вы не беспокоитесь о том, что ваши клиенты изменяют файлы), просто используйте стандартную подпись файлов с PGP или x509.

Если вы хотите помешать своим клиентам изменять код PHP, то единственная известная мне опция (и я не проверял ее сам) — это распространение вашего кода в виде байт-кода HHVM — но это не является устойчивым к обратному инжинирингу, не имеет Внутренний, безопасный механизм проверки и на самом деле не предназначен для защиты кода.

0

Другие решения

Других решений пока нет …