API определен в заголовочном файле sysroot-*-kos/include/kos/random/random_api.h
из состава KasperskyOS SDK.
API позволяет генерировать случайные числа, а также включает функции, которые можно использовать, чтобы обеспечить высокую энтропию (высокий уровень непредсказуемости) начального значения генератора случайных чисел. Начальное значение генератора случайных чисел (англ. seed) определяет последовательность генерируемых случайных чисел. То есть после установки одного и того же начального значения генератор создает одинаковые последовательности случайных чисел. (Энтропия таких чисел полностью определяется энтропией начального значения, поэтому точнее их называть не случайными, а псевдослучайными.)
Генератор случайных чисел одного процесса не зависит от генераторов случайных чисел других процессов.
Сведения о функциях API приведены в таблице ниже.
Использование API
Чтобы сгенерировать последовательность случайных байтовых значений, нужно вызвать функцию KosRandomGenerate()
или KosRandomGenerateEx()
.
Пример использования функции KosRandomGenerate()
:
size_t random_number;
if (KosRandomGenerate(sizeof random_number, &random_number) == rcOk) {
...
}
Функция KosRandomGenerateEx()
позволяет получить уровень качества сгенерированных случайных значений через выходной параметр quality
. Уровень качества может быть высоким или низким. Высококачественными считаются случайные значения, которые сгенерированы при выполнении всех следующих условий:
Чтобы зарегистрировать источник энтропии, нужно вызвать функцию KosRandomRegisterSrc()
. Через параметр callback
эта функция принимает указатель на callback-функцию следующего типа:
typedef Retcode (*KosRandomSeedMethod)(void *context,
rtl_size_t size,
void *output);
Эта callback-функция должна, используя параметры context
, получить данные размером size
байт из источника энтропии и записать их в буфер output
. Если функция возвращает rcOk
, то считается, что данные из источника энтропии были получены успешно. Источником энтропии может быть, например, оцифрованный сигнал какого-либо датчика или аппаратный генератор случайных чисел.
Чтобы дерегистрировать источник энтропии, нужно вызвать функцию KosRandomUnregisterSrc()
.
Если уровень качества низкий, то сделать его высоким без инициализации генератора случайных чисел нельзя.
Чтобы инициализировать генератор случайных чисел, нужно вызвать функцию KosRandomInitSeed()
. Энтропию данных, передаваемых через параметр seed
, должен гарантировать вызывающий процесс.
Если хотя бы одно из этих условий не выполняется, сгенерированные случайные значения считаются низкокачественными.
При запуске процесса начальное значение генератора случайных чисел задается системой автоматически. Затем начальное значение генератора случайных чисел изменяется в следующих случаях:
Каждый успешный вызов функции KosRandomGenerateEx()
с параметром size
больше нуля и каждый успешный вызов функции KosRandomGenerate()
изменяют начальное значение генератора случайных чисел, но не каждое такое изменение выполняется с получением данных из зарегистрированных источников энтропии. Зарегистрированные источники энтропии используются только при нарушении условия 3 или 4. При этом, если зарегистрирован хотя бы один источник энтропии, то сбрасывается счетчик времени изменения начального значения генератора случайных чисел. А если данные из хотя бы одного источника энтропии получены успешно, то также сбрасывается счетчик сгенерированных случайных байтовых значений.
Уровень качества может измениться с высокого на низкий.
Каждый успешный вызов функции KosRandomInitSeed()
изменяет начальное значение генератора случайных чисел, используя данные, переданные через параметр seed
и полученные из зарегистрированных источников энтропии. При наличии хотя бы одного зарегистрированного источника энтропии сбрасываются счетчики сгенерированных случайных байтовых значений и времени изменения начального значения генератора случайных чисел. В противном случае сбрасывается только счетчик сгенерированных случайных байтовых значений.
Уровень качества может измениться с высокого на низкий и наоборот.
Каждый успешный вызов функции KosRandomRegisterSrc()
изменяет начальное значение генератора случайных чисел, используя данные только из регистрируемого источника энтропии. При этом сбрасывается счетчик сгенерированных случайных байтовых значений.
Уровень качества не может измениться.
Возможный сценарий генерации случайных значений высокого качества включает следующие шаги:
KosRandomRegisterSrc()
.KosRandomGenerateEx()
.Если уровень качества низкий, инициализировать генератор случайных чисел вызовом функции KosRandomInitSeed()
и перейти к шагу 2.
Если уровень качестве высокий, перейти к шагу 4.
Чтобы получить уровень качества без генерации случайных значений, нужно вызвать функцию KosRandomGenerateEx()
со значениями 0
и RTL_NULL
в параметрах size
и output
соответственно.
Сведения о функциях API
Функции random_api.h
Функция |
Сведения о функции |
---|---|
|
Назначение Инициализирует генератор случайных чисел. Параметры
Возвращаемые значения В случае успеха возвращает |
|
Назначение Генерирует последовательность случайных байтовых значений. Параметры
Возвращаемые значения В случае успеха возвращает |
|
Назначение Генерирует последовательность случайных байтовых значений. Параметры
Возвращаемые значения В случае успеха возвращает |
|
Назначение Регистрирует источник энтропии. Параметры
Возвращаемые значения В случае успеха возвращает |
|
Назначение Дерегистрирует источник энтропии. Параметры
Возвращаемые значения В случае успеха возвращает |