Принимая во внимание энергетическую обработку компьютеров, какой более безопасный минимальный размер шестнадцатеричного кода, который я могу использовать?
Это действительно простое число для расчета, если у вас есть модель угрозы на месте.
Основываясь на указанном вами URL-адресе, кажется, что вы создаете URL-адрес для проверки прав собственности на электронную почту. Это явно необходимо, чем, скажем, URL-адрес сброса пароля.
Если вы оцениваете неудачные попытки ограничения (т. Е. Заблокируете свой IP-адрес от возможности повторить попытку в течение 24 часов), вы можете получить 8 шестнадцатеричных символов (32 бита), что означает, что они смогут угадать действительная ссылка подтверждения после 65536 попыток с вероятностью 50%. (The Birthday paradox.) Для снятия этого запроса также потребуется 65 536 IP-адресов, чтобы слепо подтвердить чей-то адрес электронной почты (возможно, не свой).
ОДНАКО!
Как указано выше, если вы используете это для, например. функция восстановления (я забыл свой пароль), не скупитесь на длину строки. 128 бит (32 шестнадцатеричных, 16 необработанных двоичных) следует считать нижней границей. Я бы сказал, стрелять на 256 бит, чтобы быть в безопасности.
Выше генерирует строку с 32 шестнадцатеричными цифрами, и я был бы признателен, если использовать меньшую длину как 12 шестнадцатеричных цифр.
Если вы хотите повысить безопасность строки с фиксированной длиной, единственный способ сделать это - увеличить количество возможных значений для каждого символа в строке.
Даже если вы использовали исходный двоичный код, которого нет, верхний предел в 11 символов составляет 88 бит энтропии. Указание hex разрезает вас до 44 (но, скорее всего, 40, так как вы, вероятно, напишите bin2hex(random_bytes(5))
здесь).
Если вы хотите надежно создать строку фиксированного размера с произвольным алфавитом, ознакомьтесь с this StackOverflow answer.
imo, Как вы это делаете, сгенерируйте случайное число из 16 байтов, а затем «base64url_encode». Для функций см. [Url safe base64 кодирование и декодирование в PHP] (http://www.katcode.com/url-safe-base64-encoding-in-php/). Также: ['base64url' вариант кодирования] (http : //php.net/manual/en/function.base64-encode.php#103849). Они безопасны везде и безопасно –