%20para%20gerar%20stack_canary%20ou%20stack_top%3F.png)
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_canary
e stack_top
sã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_int
nã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/urandom
e get_random_bytes()
vinculado ao mesmo pool de entropia interno. É bem possível drená-lo ao usar apenas RNG e causar /dev/random
bloqueio e /dev/urandom
produção de saída de baixa entropia. Esta condição de baixa entropia cria problemas para a criptografia.