%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20stack_canary%20%EB%98%90%EB%8A%94%20stack_top%EC%9D%84%20%EC%83%9D%EC%84%B1%ED%95%98%EB%8A%94%20%EC%9D%B4%EC%9C%A0%EB%8A%94%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
Linux 커널에는 난수 생성기가 있습니다. 이를 일반적으로 LRNG(Linux Random Number Generator)라고 합니다. 를 호출하여 사용할 수 있습니다 get_random_bytes()
. 그러나 stack_canary
및 stack_top
에 의해 생성됩니다 get_random_int()
. Linux 커널에는 자체적으로 우수한 난수 생성기(LRNG)가 있지만 Linux 커널은 왜 LRNG(난수 생성기)를 생성합니까 get_random_int()
? 아마도 효율성 때문이 아닐까 싶습니다. 맞아?
답변1
단지출처를 읽어보세요:
내부 커널 전용으로 임의의 단어를 가져옵니다. urandom과 비슷하지만 엔트로피 풀 고갈을 최소화하는 것을 목표로 합니다. 결과적으로, 무작위 값은 암호학적으로 안전하지 않지만 여러 용도에서 엔트로피를 고갈시키는 비용이 너무 높습니다.
그렇기 때문에 get_random_int
의 출력만 취하지 않는 것입니다 get_random_bytes
. 공교롭게도 여기의 주장은 두 가지 이유로 잘못되었습니다.
- 엔트로피는 실제로 고갈되지 않습니다. 그것은 커널 내부의 가짜 계산일 뿐입니다.
- 엔트로피가 고갈되더라도 임시 구조 대신 암호학적으로 안전한 의사 난수 생성기를 사용하지 않을 이유가 없습니다. 에 대한 엔트로피를 고갈시키는 인스턴스와 별도의 인스턴스를 사용하십시오
/dev/random
. 성능이 이유일 수 있지만 Hash_DRBG/SHA-2와 같은 적절한 CSPRNG와 MD5를 사용하는 임시 구성 간의 차이는 작습니다.
답변2
Linux의 /dev/random
, /dev/urandom
및 는 get_random_bytes()
동일한 내부 엔트로피 풀에 연결되어 있습니다. RNG에만 사용할 경우 이를 배출하여 /dev/random
차단을 유발하고 /dev/urandom
낮은 엔트로피 출력을 생성하는 것이 가능합니다 . 이러한 낮은 엔트로피 조건은 암호화에 문제를 야기합니다.