Linux 시작 시 난수를 생성하는 방법

Linux 시작 시 난수를 생성하는 방법

저는 현재 XINU를 사용하여 운영체제 강좌를 수강하고 있는데, 운영체제에서 실행되는 모든 프로세스를 제어할 수 있어 난수 생성기의 출력을 완벽하게 예측할 수 있습니다.여기코드입니다.

사용자, 위치 또는 시간에 따라 다르게 동작하는 프로세스가 많기 때문에 이 간단한 접근 방식도 데스크톱 OS에서 사용할 때 진정한 난수를 생성할 수 있다는 것이 분명합니다. 하지만 사용자 입력이 있기 전인 시작 시에는 어떻습니까?

Linux의 암호화 난수 생성기는 훨씬 더 정교하지만 여전히 사용자 입력에 의존하는 것 같습니다. OpenSSH는 많은 Linux 시스템에서 부팅 시 실행됩니다. 순정 구성에 매우 근접하게 운영되는 회사가 많이 있을 것이라고 확신합니다. 동일한 하드웨어, 소프트웨어를 에뮬레이트하고 공격하려는 서버와 동일한 시간과 위치를 설정할 수 있다면 이점을 활용할 수 없을까요? 저것?

또한 개발자가 자신의 코드(dockerfile, Ruby on Rails 프로젝트 등)를 업로드할 수 있고 서버가 설정되는 많은 호스팅 서비스에서 사용할 수 있는 사전 제작된 배포도 있습니다. 이러한 서버에는 사전 구축된 소프트웨어, 알려진 하드웨어, 위치 및 시간이 있습니다. 나는 그들이 현실 세계에서 하드웨어 무작위성을 가지고 있다고 가정하고 있지만 그렇지 않다면 어떻게 될까요?

답변1

엔트로피 부족은 항상 문제가 되어 왔습니다. 특히 임의의 장치나 기타 API를 사용할 수 없는 오래된 운영 체제나 모두 거의 동일한 시드를 가질 수 있는 클라우드 또는 복제 운영 체제의 경우 더욱 그렇습니다. 더욱이, 이용 가능한 엔트로피 소스에도 불구하고 사람들은 계속해서 어리석은 일을 하고 있습니다(예: CVE-2020-27020).

한 가지 해결책은 시작 시 일부 칩의 RDRAND 기능과 같은 다양한 난수 소스에서 읽고, 하나의 소스가 손상되거나 손상된 경우 이러한 여러 소스에서 읽는 것입니다. 이로 인해 "충분한" 엔트로피가 얻어질 때까지 시작이 지연될 수 있습니다. 소스 코드를 자세히 살펴보면 다양한 오픈 소스 운영 체제가 부팅 시 이를 어떻게 수행하는지 알 수 있습니다.

또 다른 해결책은 미리 생성된 임의의 데이터(아마도 설치 프로그램이나 호스트 운영 체제에 의해 생성됨)의 일정량을 시스템이나 가상 호스트에 시드하는 것입니다. 그러면 이 데이터는 이후 시스템을 처음 시작할 때 사용됩니다. 이를 통해 호스트 운영 체제가 각 호스트에 대해 적절한 엔트로피를 생성하는 경우 동일한 수의 가상 시스템이 서로 다른 엔트로피 세트를 가질 수 있습니다.

관련 정보