Является ли (количество пикосекунд процессорного времени, использованного текущей программой + тактовым временем) семенем, неуязвимым для криптоанализа для генератора псевдослучайных чисел?

Я пытаюсь использовать эту реализацию ECDSA в Haskell, если вы посмотрите на строку 15, вы увидите, что значение k использует randomRIO, который использует глобальный генератор случайных чисел, метод получения которого использует theStdGen, который использует mkStdRNG, который делает начальное число путем:

(текущие секунды на настенных часах) * 12345 + (текущие пикосекунды на настенных часах) + (количество пикосекунд ЦП, используемых текущей программой)

Достаточно ли этого для подписания данных, которые стоят миллиарды долларов США?

1 ответ

Решение

В общем, ответ будет отрицательным. Если вы рассматриваете вариант использования, единственным реальным вариантом является использование HSM, сертифицированного FIPS или Common Criteria. Оценка FIPS и CC должна проводиться с недавней даты и должна быть действительной для ECDSA. Только эксперт должен иметь возможность создавать протокол управления ключами вокруг него. Другой эксперт должен проверить этот протокол и удобство использования HSM. Выбор именованных параметров ECDSA должен быть частью протокола и не должен приниматься всерьез.

Теперь для вашего Haskell RNG. Вы не должны использовать текущую реализацию, так как генератор случайных чисел, конечно, не на высоте. Он может использовать небезопасные семена (как вы, возможно, уже нашли) и, кажется, сохраняет недостаточное состояние (все, что говорит, используйте Целые числа, почему бы и нет, в комментариях нельзя доверять). Я не вижу никакого хэша или HMAC, используемых для генерации новых случайных чисел или состояния, поэтому я не вижу, как эта реализация генерирует безопасные случайные числа вообще.

Быстрый просмотр в интернете усилил мои подозрения:

http://tommd.wordpress.com/2010/09/02/a-better-foundation-for-random-values-in-haskell/

Обратите внимание на экспериментальный тег во время написания:

http://hackage.haskell.org/package/crypto-random-api-0.2.0/docs/Crypto-Random-API.html

Теперь, если вы действительно разрабатываете подпись за что-то на миллиарды долларов, сделайте себя менеджером и наймите эксперта (и слушайте эксперта).

Другие вопросы по тегам