С использованием $$token = SHA256(APIKey \mathbin\| SecretKey \mathbin\| expireTimestamp) \mathbin\| expireTimestamp$$
не является безопасным, так как может вызвать атаку с расширением длины, например;
$$token2 = SHA256(APIKey \mathbin\| SecretKey \mathbin\| expireTimestamp \| \color{red}{extension}) \mathbin\| (expireTimestamp \| \color{red}{расширение}) $$
Это действительный токен для подделки.
NIST по вызову кандидатов SHA3 должен быть устойчивый к растяжению в длину
атаки. Теперь Keccak назвал SHA3 победителем, а Blake2 по-прежнему остается хорошей альтернативой конкурентам. Оба устойчивы к атакам на увеличение длины, Кекчак использует емкость, а Блейк2 использует ХАЙФА конструкции, защищены от атак расширения длины.
Для смягчения можно использовать HMAC;
$$token = \operatorname{HMAC-SHA256}(privateKey, publicKey \mathbin\| expireTimestamp) \mathbin\| expireTimestamp$$ Обратите внимание, что это вызовет SHA-256 как минимум два раза (три раза, если ключ длиннее, чем размер блока хеш-функции, 512-битный для SHA-256).
Вместо HMAC мы можем использовать BLAKE2. BLAKE2 очень быстрый и даже у нас есть параллельная версия БЛЕЙК3 и используя
$$token = \operatorname{BLAKE2}( publicKey \mathbin\| privateKey \mathbin\|expireTimestamp) \mathbin\| expireTimestamp$$ безопасно.
NIST также стандартизировал MAC для SHA3 с именем КМАК( или же здесь).
И BLAKE2, и KMAC предпочтительнее HMAC.
Если вы настаиваете на использовании SHA2 с 256-битным выходным размером, используйте SHA-512/256, который является усеченной версией SHA-512/256 с другими начальными значениями для разделения доменов. SHA-512/256 невосприимчив к атакам расширения длины и по своей конструкции совместим с 64-битным процессором.