Комментарии 31
Можно сделать другую последовательность байт, которая будет иметь тот же MD5 хэш — но в случае JSON payload это приведет к невалидным данным.
Кто сказал?
Да, я согласен с заголовком.
И где там про, что для дьявола и ангела есть коллизии, а для JSON нет? И насколько авторитетный это источник, чтобы подкреплять им свою (и клиентов) безопасность? Отдайте безопасность людям, которые в этом разбираются, как минимум в стандартах и хороших практиках. А то потом на API смотреть больно.
например валидный json.
{"action": {
"id": "file",
"value": "File"}}
Хотим сделать что-то другое.
{"action": {
"id": "eval",
"value": "some_code"},"somesting":"some_data_with_32bytes"}
И в теории мы можем перебирать some_data_with_32bytes и можно перебирать пока не совпадет хеш. И вот вам валидный json на который сервер даже не отреагирует никак.
И в теории мы можем перебирать some_data_with_32bytes и можно перебирать пока не совпадет хеш
Долго и дорого.
jwt
От какого типа атаки вас это защищает? От MITM — не думаю, что это безопаснее чем TLS?
Может лучше проверку клиентского сертификата тогда сделать?
2. md5 уже не считается безопасным
Притом велосипеды с какой-то странной терминологией. Разве ж это соль в общепринятом понимании? Это скорее private key.
Не согласен.
In cryptography, a salt is random data that is used as an additional input to a one-way function that "hashes" data, a password or passphrase.
Соль не подразумевает секретность. Это дополнительное значение, которое подмешивается в хэшируемые данные. И оно должно быть рандомным и различным для каждого хэшируемого значения. А у вас все время подмешивается одно и то же значение, и подразумевается, что оно никому не известно.
облако Voximplant считает MD5-хэш от данных аккаунта, запроса и соли
Для таких вещей вроде как hash_hmac() существует.
На php код примерно такой:
$key = 'pUWTzQ3qGNgIn39nTI4ul3BfS9v5UHdioz+ao8AKjxw=';
$data = json_decode(stream_get_contents(STDIN), true);
$hmac = $data['hmac'];
unset($data['hmac']);
if ($hmac !== hash_hmac('sha256', json_encode($data), $key)) {
throw new \RuntimeException('Bad HMAC');
}
Зачем солить HTTP-коллбэки