Генерация идентификатора сеанса с использованием [SHA1PRNG] не безопасна?
Когда я запускаю сервер Tomcat, я вижу журнал:"Создание экземпляра SecureRandom для генерации идентификатора сеанса с использованием [SHA1PRNG]"
Вот вопрос! Как я знаю, SHA1 не является безопасным. если это так, генерирование идентификатора сеанса с использованием [SHA1PRNG] является проблемой?
если это будет проблемой безопасности, какова альтернативная идея (универсальная)?
2 ответа
Краткий ответ: sha1-prng не нарушен, хотя sha1 нарушен.
Длинный ответ:
криптографические хеш-функции должны обладать многими различными свойствами, наиболее часто упоминаемыми из которых являются: сопротивление столкновению, сопротивление до изображения и 2-е сопротивление до изображения. Но есть и другие свойства, которые мы хотим использовать, даже если они не имеют смысла, например "выглядеть как" случайный оракул. Мы запрашиваем эти свойства, чтобы хэш-функции могли использоваться всевозможными сумасшедшими способами, и люди могли думать, что они получают защиту от этого.
Но в действительности разные конструкции зависят от разных свойств базовой хеш-функции. В частности, Sha1 зависит от сопротивления до изображения, а не от столкновения или сопротивления 2-го изображения.
Мы знаем, что столкновения могут быть найдены в sha1 (мы знали это много лет, но первый пример столкновения был опубликован только недавно). Но никто не предоставил доказательств того, что другие желаемые свойства sha1 не выполняются.
Как следствие, конструкции, которые требуют сопротивления столкновению, ломаются, если используется sha1, тогда как конструкции, которые не требуют этого свойства, все еще могут быть в порядке. Sha1-prng не требует сопротивления столкновению для его безопасности. Также как и HMAC-sha1 (я знаю, что многие тоже задаются этим вопросом).
Дело в том, что SHA1 на самом деле не работает, см., Например, https://security.googleblog.com/2017/02/announcing-first-sha1-collision.html
Однако: это "только" для коллизий, и они заняли сотни часов процессора.
Итак, важны две точки: - Для расчета коллизии у вас должна быть начальная точка - у вас нет идентификатора сеанса, потому что, если он просочился, ничто не поможет. - Сессия действительна только в течение нескольких часов
Я бы не стал рассматривать это как угрозу безопасности, по крайней мере, для коротких идентификаторов сессии