Por que o kernel do Linux usa get_random_int() para gerar stack_canary ou stack_top?

Por que o kernel do Linux usa get_random_int() para gerar stack_canary ou stack_top?

Existe um gerador de números aleatórios no kernel do Linux. Isso geralmente é chamado de LRNG (Linux Random Number Generator). Podemos usá-lo chamando get_random_bytes(). Mas stack_canarye stack_topsão gerados por get_random_int(). Embora o kernel do Linux tenha um bom gerador de números aleatórios (LRNG), por que o kernel do Linux o gera get_random_int()? Acho que talvez seja por causa da eficiência. Está certo?

Responder1

Apenasleia a fonte:

Obtenha uma palavra aleatória apenas para uso interno do kernel. Semelhante ao urandom, mas com o objetivo de esgotamento mínimo do pool de entropia. Como resultado, o valor aleatório não é criptograficamente seguro, mas para vários usos o custo de esgotar a entropia é muito alto

É por isso que get_random_intnão pega apenas a saída de get_random_bytes. Acontece que os argumentos aqui estão errados por dois motivos:

  • A entropia na verdade não esgota. Isso é apenas um cálculo falso dentro do kernel.
  • Mesmo que a entropia se esgotasse, não haveria razão para não usar um gerador de números pseudoaleatórios criptograficamente seguro em vez de uma construção ad hoc. Basta usar uma instância separada daquela que esgota a entropia do /dev/random. O desempenho pode ser um motivo, mas a diferença entre um CSPRNG adequado, como Hash_DRBG/SHA-2, e a construção ad hoc aqui usando MD5 é pequena.

Responder2

Linux /dev/random, /dev/urandome get_random_bytes()vinculado ao mesmo pool de entropia interno. É bem possível drená-lo ao usar apenas RNG e causar /dev/randombloqueio e /dev/urandomprodução de saída de baixa entropia. Esta condição de baixa entropia cria problemas para a criptografia.

informação relacionada