저는 보안 수준이 높은 애플리케이션(및 잠재적으로 데이터 센터)을 위한 양자 난수 생성기를 설계하고 구축하고 있습니다. 그 일환으로 /dev/random/
최종 사용자가 새 RN 소스를 사용하기 위해 애플리케이션을 수정할 필요가 없도록 내 장치에서 생성된 난수를 장치에 공급하고 싶습니다 . 그냥 연결하고 "/dev/random/"의 엔트로피를 늘리면 됩니다.
분명히 USB나 PCI-E를 통해 내 장치에서 임의의 데이터를 가져오는 것을 처리하는 장치 드라이버를 작성해야 할 것입니다(아직 사용할 인터페이스를 결정하지 않았습니다). 그러나 이 무작위 데이터를 /dev/random/
엔트로피 풀 에 어떻게 추가할 수 있는지 모르겠습니다 . 어떤 아이디어가 있습니까?
(내 생각에) 또 다른 옵션은 내 장치 드라이버로 교체 /dev/random/
하고 필요한 모든 동작이 있는지 확인하는 것입니다. 하지만 이는 좋은 생각이 아닌 것 같습니다...
답변1
/dev/random
내 장치 드라이버로 교체
현재와 미래의 인터페이스도 모두 복사해야 하기 때문에 구현하기가 매우 어렵습니다. 그렇지 않으면 많은 문제가 발생하게 됩니다. 어쩌면 가져가소스코드를 살펴보세요이에 대한 인상을 얻으려면(출력 및 입력 인터페이스는 소스 코드 주석에 잘 문서화되어 있습니다).
장치 드라이버를 작성해야 합니다
때에 따라 다르지. 예를 들어, USB 키보드인 척하고 해당 채널을 통해 임의의 데이터(또는 비밀번호, 암호화 키, 한 번에 하나의 키 메모장...)를 보내는 "임의 생성기"가 있으므로 전용 장치는 없습니다. 드라이버가 필요합니다. 대신 기존 드라이버와 함께 제공됩니다.
일반적으로 시스템 엔트로피는 사용자 공간의 영향을 받습니다. systemd-random-seed.service
또는 RNDADDENTROPY
ioctl을 참조하세요.하지드그리고 다른 도구의 사용.
그러나 이러한 모든 방법을 사용하면 커널은 여전히 장치에서 반환되는 데이터를 제어할 수 있습니다 /dev/[u]random
. 당신은 그것을 예측할 수 없습니다. 실제로 생성된 임의 데이터를 사용하려면 커널 임의 장치를 거치지 않고 장치에서 직접 읽어야 합니다.