Разница между API CryptGenRandom и CNG BCryptGenRandom

Один из наших продуктов в настоящее время использует CryptGenRandom API для генерации случайных чисел. Недавно я наткнулся на Cryptography API: Next Generation (CNG), который предоставляет новый API BCryptGenRandom (в bcrypt.h) для того же. Согласно описанию, представленному в MSDN, оба API соответствуют стандарту NIST SP800-90 в Windows Vista с пакетом обновления 1 (SP1) и более поздних версий.

  1. Если я использую поставщика Microsoft по умолчанию, есть ли разница в процессе генерации случайных чисел между двумя API?
  2. Если разницы нет, стоит ли переходить на CNG API, потому что CNG — это долгосрочная замена CryptoAPI?

person Nacharya    schedule 18.05.2016    source источник


Ответы (1)


Что касается вашего первого вопроса, нет, как вы указываете, для MSDN оба API используют один и тот же алгоритм генератора псевдослучайных чисел. Вероятно, более уместно указать, что оба API используют один и тот же источник энтропии ядра Windows для подачи PRNG.

Что касается вашего второго вопроса, он более интересен, потому что поднимает вопрос о том, есть ли на хосте более качественный RNG, доступный в качестве стороннего дополнения (примером является аппаратный модуль безопасности, HSM). Аппаратный RNG может быть представлен через CNG (BCryptGenRandom), устаревший CAPI (Crypto API, CryptGenRandom) и/или как источник энтропии режима ядра. Если одно, но не оба, из первых двух, ваше приложение выиграет только в том случае, если оно вызовет этот конкретный RNG API. Но если аппаратный генератор случайных чисел установлен как источник энтропии ядра, ваше приложение выиграет в любом случае.

Важно ли что-либо из этого, больше зависит от характера вашего приложения и того, как оно обычно используется. Если криптооборудование вряд ли будет частью истории развертывания, то я не вижу особых причин для изменения вашего кода. Но если ваш продукт и криптооборудование, как правило, размещаются на одном и том же хосте, ваши клиенты выиграют от того, что вы осветите эту возможность.

person hdracer    schedule 16.12.2016
comment
Я вижу слабость в CryptGenRandom, упомянутую в Википедии (только если хакер имеет контроль над машиной) - en.wikipedia .org/wiki/CryptGenRandom - person Curtis Yallop; 20.01.2020