dev/urandom에서 읽기 - 시스템 동작

dev/urandom에서 읽기 - 시스템 동작

dev/urandom를 사용하거나 head읽을 때 dd출력은 항상 무작위이고 다를 것으로 예상됩니다.

UNIX는 내부적으로 이 문제를 어떻게 처리합니까? 파일을 읽을 때 자연스럽게 잘리나요, 아니면 파일이 실제로 대칭 암호 또는 동등한 암호에 대한 인터페이스이므로 "읽기"는 실제로 암호를 실행하는 행위입니다.

답변1

/dev/urandom일반 파일이 아닌 문자 장치입니다. 이를 열면 일반적으로 커널에서 읽기를 처리하는 드라이버에 대한 인터페이스가 제공됩니다. 프로그램이 읽을 때마다 /dev/urandom드라이버가 호출되고 드라이버는 적절한 콘텐츠를 제공하는 방법을 결정합니다(다른 문자 장치와 동일 - /dev/null../dev/zero

리눅스에서는 이렇습니다drivers/char/random.c. "엔트로피 풀"을 유지하고, 다양한 무작위 데이터 소스에서 시드를 가져오고, 반환할 데이터를 구성하기 위해 읽을 때 ChaCha 스트림 암호를 사용하여 풀링된 데이터를 처리합니다.

답변2

/dev/urandom"일반 파일"(예, POSIX 이름 지정)이 아니라 장치입니다. /dev/에 있는 대부분의 "파일"과 마찬가지로 거기에는 마법 같은 동작이 많이 있습니다.

  • 너는 있어 /dev/null, 아무리 써도 채워지지 않아
  • 매번 다른 데이터를 무작위로 제공하는 Random/urandom/srandom이 있습니다.
  • 귀하(및 동료)가 /dev/tty터미널과 상호 작용 하는 위치
  • /dev/full쓰기를 시도하면 항상 "장치에 남은 공간이 없습니다"라는 메시지가 나타납니다.
  • /dev/zero무한한 nul 바이트 세트를 반환했습니다 .

더 많은 것이 있습니다.

이 파일은 실제로 커널 모듈과 상호 작용하기 위한 인터페이스입니다. 따라서 이를 "읽는" 경우 실제로는 프로그램(head, dd 등)이 요청한 만큼의 바이트를 읽도록 요청하는 함수를 실행하는 것입니다 /dev/urandom.특징장비). 그런 다음 함수는 이를 내부적으로 처리하여(여러 엔트로피 풀을 기반으로) 해당 버퍼를 채웁니다(이 경우 의사 무작위 콘텐츠를 얻기 위해).

관련 정보