Linux 커널이 get_random_int()를 사용하여 stack_canary 또는 stack_top을 생성하는 이유는 무엇입니까?

Linux 커널이 get_random_int()를 사용하여 stack_canary 또는 stack_top을 생성하는 이유는 무엇입니까?

Linux 커널에는 난수 생성기가 있습니다. 이를 흔히 LRNG(Linux Random Number Generator)라고 합니다. 를 호출하여 사용할 수 있습니다 get_random_bytes(). 그러나 stack_canary합계 stack_topget_random_int(). Linux 커널에는 자체 LRNG(좋은 난수 생성기)가 있지만 Linux 커널이 이를 생성하는 이유는 무엇입니까 get_random_int()? 효율성 때문이 아닐까 싶습니다. 이 올바른지?

답변1

오직소스 코드 읽기:

내부 커널 전용으로 임의의 단어를 가져옵니다. urandom과 유사하지만 목표는 엔트로피 풀 소비를 최소화하는 것입니다. 따라서 임의의 값은 암호학적으로 안전하지 않지만 여러 용도로 사용하기에는 엔트로피를 소비하는 비용이 너무 높습니다.

그렇기 때문에 get_random_int단지 출력을 얻지 않는 것 입니다 get_random_bytes. 사실, 여기서의 주장은 다음 두 가지 이유로 잘못되었습니다.

  • 엔트로피는 실제로 고갈되지 않습니다.. 이것은 커널 내부의 가짜 계산일 뿐입니다.
  • 엔트로피가 고갈되더라도 임시 구성 대신 암호학적으로 안전한 의사 난수 생성기를 사용하지 않을 이유가 없습니다. 엔트로피를 소진한 인스턴스가 아닌 다른 인스턴스를 사용하면 됩니다 /dev/random. 성능이 이유일 수 있지만 여기서는 적절한 CSPRNG(예: Hash_DRBG/SHA-2)와 MD5를 사용한 임시 구성 간의 차이가 작습니다.

답변2

Linux의 /dev/random, /dev/urandomget_random_bytes()는 동일한 내부 엔트로피 풀에 바인딩됩니다. RNG만 사용하면 RNG가 소진되어 /dev/random차단이 발생하고 /dev/urandom낮은 엔트로피 출력이 생성될 가능성이 높습니다 . 이러한 낮은 엔트로피 조건은 암호화에 문제를 일으킵니다.

관련 정보