
지갑 다운로드 검증하기: 체크섬, 서명, 재현 가능한 빌드
지갑을 설치할 때 여러분은 컴퓨터에 있는 파일이 개발자가 배포한 소프트웨어 그 자체이며, 해킹된 웹사이트나 가짜 다운로드 페이지에서 받은 변조된 사본, 혹은 조작된 빌드가 아니라고 믿습니다. 대부분의 사람에게는 공식 스토어에서 설치하는 것만으로 충분합니다. 하지만 믿기보다 직접 확인하고 싶은 사람을 위해, 오픈소스 지갑은 점점 더 강력해지는 세 가지 도구를 제공할 수 있습니다. 바로 체크섬, 서명, 재현 가능한 빌드입니다.
각 도구가 무엇을 증명하는지, 그리고 SSP Wallet에서 어떻게 사용하는지 알아보겠습니다.
체크섬: 같은 파일인가?
체크섬은 SHA-256 같은 해시 함수가 만들어 내는 파일의 지문입니다. 단 1바이트만 바뀌어도 지문은 완전히 달라집니다. 다운로드한 파일의 체크섬이 개발자가 공개한 값과 일치한다면, 같은 파일을 가지고 있는 것입니다.
macOS나 Linux에서는 터미널에서 계산할 수 있습니다.
shasum -a 256 ssp-wallet-chrome-v2.1.3.zip
체크섬만으로는 약점이 있습니다. 공격자가 다운로드 페이지를 장악하고 있다면 파일과 공개된 체크섬을 모두 바꿔치기할 수 있습니다. 그래서 다음 단계가 중요합니다.
서명: 개발자가 공개한 것인가?
서명은 누가 체크섬을 공개했는지를 증명합니다. 개발자는 체크섬 파일에 개인 키로 서명하고, 대응하는 공개 키를 가진 사람은 누구나 그 서명을 검증할 수 있습니다. 파일이나 체크섬을 변경한 공격자는 그 개인 키 없이는 유효한 서명을 만들 수 없습니다.
반드시 제대로 해야 할 단 한 가지는 공개 키 그 자체입니다. 프로젝트의 공식 출처에서 받고, 그 지문을 둘 이상의 공식 채널에서 대조한 뒤, 이후 모든 릴리스에 같은 키를 사용하세요.
재현 가능한 빌드: 이 파일은 정말 공개된 코드로 빌드되었는가?
서명은 누가 파일을 배포했는지를 증명할 뿐, 안에 무엇이 들어 있는지는 증명하지 않습니다. 개발자의 빌드 머신이 침해되었다면 악성 결과물에 선의로 서명할 수도 있습니다.
재현 가능한(또는 결정론적) 빌드는 그 틈을 메웁니다. 빌드 과정이 고정되어 있어 같은 소스 코드는 어떤 머신에서든 항상 바이트 단위까지 동일한 파일을 만들어 냅니다. 누구나 공개된 코드로 릴리스를 다시 빌드해 체크섬을 비교할 수 있습니다. 일치한다면 배포된 파일에는 소스 코드에 적힌 내용만 정확히 들어 있고, 그 외에는 아무것도 없습니다. 공급망 공격과 결정론적 빌드에서 이것이 지갑에 왜 그토록 중요한지 설명합니다.
SSP Wallet 검증하기
GitHub(RunOnFlux/ssp-wallet)에 올라오는 SSP Wallet 릴리스는 Chrome용과 Firefox용으로 결정론적으로 빌드되며, 두 개의 추가 파일을 포함합니다. 각 패키지의 체크섬을 나열한 SHA256SUMS와, 그 목록에 대한 GPG 서명인 SHA256SUMS.asc입니다.
1. 릴리스 파일을 다운로드합니다. 릴리스 페이지에서 사용하는 브라우저용 패키지(ssp-wallet-chrome-v2.1.3.zip 또는 ssp-wallet-firefox-v2.1.3.zip 같은 이름)를 SHA256SUMS, SHA256SUMS.asc와 함께 한 폴더에 다운로드합니다.
2. 서명을 확인합니다. SSP 릴리스 서명용 공개 키를 GPG에 가져온 상태에서 다음을 실행합니다.
gpg --verify SHA256SUMS.asc SHA256SUMS
GPG가 예상한 키의 올바른 서명이라고 보고해야 합니다. 잘못된 서명이나 알 수 없는 키라고 보고하면 중단하세요.
3. 목록과 파일을 대조합니다.
sha256sum -c SHA256SUMS
macOS에서는 shasum -a 256 -c SHA256SUMS가 같은 역할을 합니다. 다운로드한 각 파일에 대해 OK가 표시되어야 합니다. 목록에는 Chrome용과 Firefox용 패키지가 모두 포함되어 있으므로, 하나만 다운로드했다면 다른 하나가 누락으로 표시되지 않도록 --ignore-missing을 추가하세요.
4. 선택 사항: 직접 빌드합니다. 릴리스 태그 시점의 저장소를 클론하고 결정론적 빌드를 실행합니다.
git clone https://github.com/RunOnFlux/ssp-wallet.git
cd ssp-wallet
git checkout <release-tag>
yarn build:deterministic
빌드는 고정된 Docker 환경에서 실행되며 자체 SHA256SUMS를 생성합니다. 여러분의 체크섬이 공개된 값과 일치한다면, 해당 릴리스가 그 소스 코드로 빌드되었음을 독립적으로 확인한 것입니다.
브라우저 스토어는 어떨까?
대부분의 사람은 SSP Wallet을 Chrome Web Store나 Firefox Add-ons에서 설치하며, 이는 합리적인 선택입니다. 스토어 설치는 자동으로 업데이트되고, 스토어에는 자체 심사 절차가 있습니다. 위의 체크섬은 GitHub의 릴리스 패키지를 대상으로 합니다. 스토어에서 설치한다면 가장 중요한 확인 사항은 더 간단합니다. 공식 웹사이트를 통해 스토어 페이지에 들어갔는지, 그리고 게시자가 일치하는지입니다. 가짜 지갑 앱 알아보기에서 그 단계를 다루고, 브라우저 확장 프로그램 위생 관리에서 이후 브라우저를 안전하게 유지하는 방법을 다룹니다.
솔직한 요약
체크섬은 같은 파일을 가지고 있음을, 서명은 누가 그것을 공개했는지를, 재현 가능한 빌드는 파일이 공개된 코드에서 나왔음을 증명합니다. 각 단계는 서로 다른 종류의 신뢰를 없애 줍니다.
대부분의 사람은 공식 스토어에서 설치할 것이고, 그것으로 괜찮습니다. 직접 검증하고 싶다면 SSP Wallet 릴리스가 세 가지 도구를 모두 제공합니다. 서명된 체크섬 목록, 한 줄짜리 확인 명령, 그리고 바이트 단위로 재현할 수 있는 빌드입니다.


