Поколение энтропии Mbedtls работает вечно - PullRequest
0 голосов
/ 26 ноября 2018

Я пытаюсь написать тестовую функцию для mbedtls, которая случайным образом генерирует ключ для шифрования AES.Я использую оригинальный учебный код от mbedtls.Моя программа всегда останавливается при выполнении mbedtls_ctr_drbg_seed ().заранее

Ответы [ 2 ]

0 голосов
/ 08 февраля 2019

Я нашел причину

STM32 Cube MX помещает функцию инициализации HAL для RNG после инициализации mbedtls. Поэтому, когда я вызываю mbedtls_ctr_drbg_seed () внутри mbedtls_init (), RNG еще не инициализирован, и онитерации внутри навсегда:

do
{
    if( count++ > ENTROPY_MAX_LOOP )
    {
        ret = MBEDTLS_ERR_ENTROPY_SOURCE_FAILED;
        goto exit;
    }

    if( ( ret = entropy_gather_internal( ctx ) ) != 0 )
        goto exit;

    done = 1;
    for( i = 0; i < ctx->source_count; i++ )
        if( ctx->source[i].size < ctx->source[i].threshold )
            done = 0;
}
while( ! done );

Решение

поменять местами

0 голосов
/ 10 января 2019

Из вашего описания я предполагаю, что ваше приложение застряло в вызове на mbedtls_ctr_drbg_seed().Наиболее вероятная причина, ИМХО, заключается в функции mbedtls_entropy_func():

    do
    {
        if( count++ > ENTROPY_MAX_LOOP )
        {
            ret = MBEDTLS_ERR_ENTROPY_SOURCE_FAILED;
            goto exit;
        }

        if( ( ret = entropy_gather_internal( ctx ) ) != 0 )
            goto exit;

        done = 1;
        for( i = 0; i < ctx->source_count; i++ )
            if( ctx->source[i].size < ctx->source[i].threshold )
                done = 0;
    }
    while( ! done );

Вам следует убедиться, что ваша коллекция энтропии увеличивает размер собранных данных, что пороговое значение не равно MAX_INT иличто-то в этом роде, и что ваш сборщик энтропии hw на самом деле возвращает энтропийные данные.

...