< 뉴스룸으로 돌아가기

SSP 릴리스가 완전히 재현 가능해진다 — Docker와 GPG

·4분 읽기·작성자: SSP Editorial Team
SECURITY 배지 아래 체크 표시 방패, 자물쇠, 프로세서 칩, 열쇠 아이콘이 놓이고, 헤드라인은 「SSP 릴리스가 완전히 재현 가능해진다」.

2025-08-03, SSP Wallet v1.25.0은 두 가지 변경을 출시했으며, 이 두 가지를 함께 보면 지갑 배포에서 가장 오래되었으나 말로 표현되지 않던 약점 하나를 봉합합니다. 스토어의 바이너리가 저장소의 바이너리라는 사실을 더 이상 믿을 필요가 없습니다. 릴리스는 이제 Docker 안에서 결정론적으로 빌드되고 GPG로 서명됩니다. 우리만이 아니라, 감사인만이 아니라, 누구라도 소스에서 다시 빌드해 결과가 우리가 공개한 것과 바이트 단위로 일치하는지 검증할 수 있습니다.

신뢰하지 말고 검증하라 — 지갑 바이너리에 적용

비트코인의 격언 「신뢰하지 말고 검증하라」는 보통 거래를 두고 말합니다. 같은 무게로, 그 거래에 서명하는 소프트웨어에도 적용됩니다. 지갑의 코드는 공개되고 감사를 거쳤더라도 침해된 바이너리를 출하할 수 있습니다. 코드에서 바이너리로 가는 경로가 빌드 서버, 패키징 단계, 코드 서명 키, 스토어 업로드를 통과하기 때문입니다. 어느 고리든 오염될 수 있습니다. 유출된 CI 토큰, 파이프라인에서 바꿔치기된 바이너리, 변조된 빌드 에이전트 — 어느 것도 공개 저장소를 건드리지 않고, git log에서 보이지 않습니다.

이 위협 모델에 대한 방어적 답은 하나입니다. 바이너리 자체가 검증 가능해야 합니다. 「약속하니까 검증 가능」이 아니라, 낯선 이가 재현 가능한 의미로 검증 가능해야 합니다.

Docker 결정론적 빌드

이것이 v1.25.0이 전달하는 바입니다. 모든 SSP 릴리스는 베이스 이미지를 고정하고 툴체인 버전을 고정하며 완전히 격리된 환경의 Docker 컨테이너 안에서 빌드됩니다. 빌드는 필요 없는 곳에서는 네트워크 접근이 없고, 호스트 파일시스템을 누설하지 않으며, 결과에 타임스탬프나 머신 고유 경로를 굽지 않습니다. 출력은 입력의 결정론적 함수입니다.

실제 결과: 동일한 소스 코드는 일치하는 체크섬을 가진 동일한 바이너리를 생산합니다. 태그를 가져와 문서화된 컨테이너에서 당신의 머신에서 빌드하면, 우리와 같은 SHA-256을 얻습니다. 얻지 못한다면 태그와 공개 바이너리 사이에 무언가가 달라진 것이며 — 이것이야말로 당신이 원하는 신호입니다. 유일하게 정직한 결과는 「바이너리가 코드와 맞는다」 아니면 「맞지 않는다」 둘뿐이기 때문입니다.

이것이 공급망 공격 완화책입니다. 빌드 서버가 정직하다고 가정하지 않습니다. 개발자 노트북이 깨끗하다고 가정하지 않습니다. 아무것도 가정하지 않고, 확인할 수 있는 도구를 낯선 이의 손에 쥐어 줍니다.

GPG로 서명된 릴리스

재현성은 한 바이너리가 어떤 소스 트리에 대응한다는 사실을 알려 줍니다. 그것만으로는 어느 소스 트리가 진짜인지는 알려주지 않습니다. 이를 푸는 것이 GPG 서명입니다.

v1.25.0의 모든 아티팩트 — 확장 프로그램 번들, 체크섬 파일 — 는 SSP 릴리스 키로 서명됩니다. 서명은 GitHub의 릴리스 옆에 공개됩니다. 다운로드를 검증하려면 공개 키를 한 번 가져오고, 서명에 대해 gpg --verify를 실행하면 도구가 파일의 무결성과 서명한 키가 기대한 키인지 알려 줍니다.

두 메커니즘은 합성됩니다. GPG 서명은 「이것은 SSP가 공개한 파일」을 증명합니다. 결정론적 빌드는 「이 파일은 이 커밋에 해당한다」를 증명합니다. 함께라면 커밋과 설치 사이의 신뢰 간극이 사라집니다.

직접 릴리스를 검증하는 법

GitHub의 릴리스 페이지가 정확한 절차의 권위 있는 출처입니다 — 공개 키 지문, 서명 파일 이름, 빌드를 재현하는 Docker 명령. 짧은 버전: SSP 릴리스 키를 가져오고, 체크섬 파일과 그 서명을 받고, 서명에 gpg --verify를, 그리고 다운로드한 바이너리에 대해 체크섬으로 sha256sum -c를 실행합니다. 둘 다 통과하면 아티팩트는 무결하고 진본입니다.

더 나아가고 싶은 파워 유저는 태그를 클론하고, 문서화된 Docker 빌드를 실행하고, 결과 SHA-256이 공개된 체크섬과 일치하는지 확인할 수 있습니다. 대부분의 사용자는 결코 하지 않을 것입니다. 핵심은 일부가 하리라는 것이며, 그들 중 하나라도 불일치를 발견하면 즉시 공격이 드러난다는 점입니다.

이것이 바꾸는 것

SSP는 v1.0.0부터 오픈 소스였으며, 2025년 초의 전면 검토 이래 Halborn에 의해 끝에서 끝까지 감사되었습니다. v1.25.0이 그 삼각형의 세 번째 변을 닫습니다. 오픈 소스는 코드를 읽을 수 있다는 뜻이고, 감사됨은 전문가가 그것을 검토했다는 뜻이며, 재현 가능 더하기 서명됨은 당신의 머신에서 도는 것이 실제로 당신이 읽은 코드라는 뜻입니다.

세 보장은 독립적이고 합성됩니다. 재현 불가능한 오픈 소스 바이너리는 빌드 파이프라인에서 침해를 숨길 수 있습니다. 재현 불가능한 감사된 프로젝트는 감사인이 본 적 없는 변조 바이너리를 출하할 수 있습니다. v1.25.0이 있으면 「설치 전 검증하라」는 열망이 아니라 구체적인 체크리스트가 됩니다.

이것이 셀프 커스터디 지갑의 공급망 이야기, 정직하게 말해질 수 있는 유일한 방식으로 말해진 모습입니다.

이 글 공유하기

관련 글