모든 패키지 빌드가 재현 가능하지 않은 경우 사용자가 동일한 버전 및 아키텍처의 두 가지 다른 바이너리를 실행하지 않는다는 것을 어떻게 보장합니까?
답변1
바이너리 패키지가 소스 코드에 명시된 대로 작동하는지 확인할 방법이 없습니다(이것은 이론상으로나 실제적으로나 해결할 수 없는 문제입니다). 그러나 바이너리 패키지가 어떻게 생성되는지 알면 그것이 소스 코드를 컴파일한 결과인지 확인할 수 있습니다. 이를 위해서는 신뢰가 필요합니다.
- 컴파일 도구(컴파일러 자체뿐 아니라 빌드 프로세스와 관련된 기타 모든 도구(예
make
:tar
등)): 다음이 필요합니다.그들이 맡은 일을 올바르게 했다고 믿으세요.; - 컴파일이 발생한 머신(컴파일 도구가 예상대로 실행된다는 점을 신뢰해야 함)
- 컴파일을 수행하는 컴퓨터에서 패키지를 사용하는 컴퓨터까지의 배포 체인입니다.
주요 배포판은 배포판 자체의 컴파일러를 사용하여 엄격하게 제어되는 인프라(소수의 관리자만이 이러한 시스템에 액세스할 수 있음)에서 바이너리 패키지를 구축합니다(컴파일러에 버그나 백도어가 없고 시스템 사용으로 인해 감염되는 사람이 없는 한). 문제가 발생하게 됩니다) 패키지가 구축되면 동일한 시스템(또는 엄격하게 제어되는 동일한 인프라에서 실행되는 시스템)이 암호화 방식으로 패키지에 서명합니다. 암호화 서명은 최종 사용자의 컴퓨터에 설치된 패키지가 빌드 인프라에서 생성된 패키지와 정확히 일치하는지 확인합니다. 모든 주요 패키지 관리 도구(apt, yum, dnf 등)는 패키지 서명을 확인합니다.
따라서 배포판 자체는 (1)을 검증하지 않고(할 수 없음), (2)를 검증하는 대신 (3)을 검증하도록 보장합니다.
재현 가능한 빌드는 (2)를 달성하는 데 도움이 됩니다. 빌드가 예상대로 작동하는지 독립적인 검증을 제공하여 빌드 인프라가 손상되는 것을 방지합니다.
(1)에 대해 독립형 컴파일 방식이 제안되었지만 거의 실용적이지 않습니다. 대부분의 언어에는 독립형 구현이 없습니다.