/dev/random 블록에서 읽는지 확인하는 방법

/dev/random 블록에서 읽는지 확인하는 방법

/proc/sys/kernel/random/entropy_avail지침에서 사용할 수 있는 자릿수에 대한 정보를 찾았습니다 /dev/random. 다음 읽기가 차단되는지 확인하고 싶습니다 /dev/random. 저의 순진한 접근 방식은 필요한 임의의 비트 수를 비교하는 것뿐이지 entropy_avail만 제대로 작동하지 않습니다. 간단하고 멍청한 실험을 하다가 엔트로피가 완충된다는 사실을 깨달았습니다. 64비트 엔트로피 버퍼는 6바이트의 무작위 데이터를 제공합니다.

entropy_avail다음과 같은 간단한 명령을 통해 모니터링합니다.

while true; do
    cat /proc/sys/kernel/random/entropy_avail
    sleep 1
done

명령을 통해 임의의 바이트를 얻으려고 합니다.

dd if=/dev/random bs=1 count=1 > /dev/null

dd엔트로피가 63 이하이면 명령이 차단됩니다. 엔트로피가 64에 도달하고 한 바이트를 읽으면 엔트로피는 0으로 감소하지만 차단하지 않고 5바이트를 더 읽을 수 있습니다. 그런 다음 dd엔트로피가 64에 도달할 때까지 다시 차단합니다.

entropy_avail사용 가능한 임의 비트의 실제 수를 감지하는 방법과 정확한 의미는 무엇입니까 ?

답변1

entropy_avail에서 사용 가능한 자릿수는 표시되지 않습니다 /dev/random. 이는 전원 공급 RNG 상태에서 커널의 엔트로피 추정치로 표현됩니다 /dev/random. 수학적으로 말하면 엔트로피 추정치는 다소 의미가 없는 양입니다. 그러나 /dev/random엔트로피 추정치가 너무 낮으면 Linux는 차단됩니다.

프로그램은 in 의 값이 보다 커질 /dev/random때까지 블록에서 데이터를 읽습니다 . 읽기는 바이트당 8비트의 속도로 엔트로피를 소비합니다./proc/sys/kernel/random/entropy_avail/proc/sys/kernel/random/read_wakeup_threshold/dev/random

하지만 어쨌든 사용해서는 안 됩니다 /dev/random./dev/urandom, 암호화 키 생성을 포함하여 동등하게 안전함, 차단되지 않습니다. 난수 생성은 엔트로피를 소비하지 않습니다. 시스템에 충분한 엔트로피가 있으면 우주의 수명 동안 좋습니다. 운영 체제는 RNG 시드를 파일에 저장하므로 시스템에 한 번에 충분한 엔트로피가 있으면 재부팅 후에도 충분한 엔트로피를 갖게 됩니다.

안전하지 않은 유일한 /dev/urandom경우는 새로 설치된 시스템, 방금 부팅된 라이브 시스템(따라서 라이브 시스템에서 암호화 키를 생성하는 것은 좋은 생각이 아닙니다!) 또는 새로 부팅된 시스템에서 처음 부팅할 때입니다. 하드웨어 RNG 또는 영구 메모리가 없는 전원이 켜진 내장형 장치입니다. 이러한 시스템에서는 /dev/random16바이트가 해제되어 엔트로피 풀이 설정될 때까지 기다립니다. 그런 다음 /dev/urandom.

관련 정보