Генерация клиентского ключа API и секретного клиента с переполнением стека

Я создаю пользовательский компонент обработки платежей для Joomla. Этот компонент имеет API, который позволяет пользователям обрабатывать платежи из других источников, таких как Woocomerce, Wix и т. Д.
Я хотел бы знать, безопасно ли генерировать «Ключ клиента» и «Секрет клиента» с помощью моего собственного написанного сценария PHP.

//Client Key
$key = md5(microtime(true).mt_Rand());


//Client Secret
$secret = bin2hex(random_bytes(32));

Если нет, я буду рад, если кто-то может указать мне на более надежный сценарий.
Спасибо

0

Решение

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

MD5 следует избегать, когда это возможно. В наши дни коллизионные атаки для md5 достаточно просты, чтобы их можно было считать тривиальными, даже если вы используете случайную генерацию хеш-кода. Вы должны, по крайней мере, использовать sha1 (который также несколько легко сталкивается, хотя и не так легко, как md5) или sha256.

Есть много альтернатив, если вы хотите остаться в стороне от sha1 / sha256, хотя sha256, по стандартам 2018 года, достаточно безопасен в качестве алгоритма хеширования. Однако я бы использовал что-то кроме microtime в качестве входного параметра хеширования. Даже если вы солите, это вполне предсказуемо. Просто чтобы ошибиться в безопасности предсказуемости, я бы посоветовал конкатенировать что-то дополнительное (то есть microtime.mt_rand.something_else_which_is_also_random)

Что касается секрета, я бы предложил что-то более надежное. С криптологической точки зрения в PHP нет такой вещи, как истинная случайность, поэтому random_bytes может быть более предсказуемым и пригодным для использования, чем это может показаться на первый взгляд. Это в сочетании с тем фактом, что bin2hex является просто преобразованием, а не односторонней функцией, делает весь секрет слабым звеном. Я бы использовал более длинную строку (32 кажется слабой) и комбинировал бы ее с чем-то другим (возможно, побитовым XOR со случайной строкой равной длины)

1

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

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

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector