온라인 시드 구문 생성기를 사용하는 것이 안전한가?
목차
암호화폐 커뮤니티에서 끊임없이 나오는 질문이 있습니다: 온라인 도구를 사용하여 시드 구문을 생성하는 것이 안전한가? 짧게 답하자면, 그 도구가 어떻게 만들어졌느냐에 전적으로 달려 있습니다. 잘못 설계된 온라인 생성기는 지갑에 자금을 넣기도 전에 키를 공격자에게 노출시킬 수 있습니다. 제대로 설계된 것은 오프라인 도구만큼 안전할 수 있습니다. 그 차이는 아키텍처에 달려 있으며, 그 아키텍처를 이해하는 것은 암호화폐 보유자로서의 책임입니다.
이 가이드에서는 온라인 시드 구문 생성기를 안전하게 또는 위험하게 만드는 요소가 정확히 무엇인지, 주어진 도구가 어느 범주에 속하는지 어떻게 확인하는지, 그리고 암호화 키를 다루는 모든 도구에 어떤 기술 표준을 요구해야 하는지를 설명합니다.
온라인 생성기의 위험성¶
BIP39 시드 구문을 생성할 때, 지갑의 모든 자금을 통제하는 마스터 비밀을 만들고 있는 것입니다. 다른 누군가가 그 구문을 알게 되면, 그로부터 파생된 모든 주소에서 모든 코인을 빼돌릴 수 있습니다. 이것은 이론적인 위험이 아닙니다. 수십억 달러가 손상된 키 생성을 통해 도난당했습니다.
온라인 생성기의 근본적인 위험은 전송입니다. 도구가 시드 구문, 개인 키, 또는 이를 생성하는 데 사용된 원시 엔트로피를 원격 서버로 보낸다면, 비밀의 사본이 통제 밖에 존재합니다. 그 서버가 해킹될 수 있습니다. 운영자가 악의적일 수 있습니다. 중간자가 데이터를 가로챌 수 있습니다. 네트워크 로그에 기록될 수 있습니다.
이 위험은 명백히 의심스러운 웹사이트에만 국한되지 않습니다. 전문적인 디자인과 수천 명의 사용자를 가진 정상적으로 보이는 도구들이 생성된 키를 서버로 전송하는 것이 적발된 적이 있습니다. 일부는 의도적으로 악의적이었고, 다른 일부는 분석 스크립트나 오류 보고 도구를 통해 실수로 데이터를 유출하는 버그가 있었습니다. 사용자에게 미치는 결과는 동일했습니다: 손상된 지갑과 도난당한 자금.
위험은 매 방문마다 외부 서버에서 코드를 로드하는 도구에도 확장됩니다. 어제는 생성기가 안전했더라도, 손상된 CDN이나 악의적인 업데이트가 오늘 키를 탈취하는 코드를 주입할 수 있습니다. 검증 가능하고 감사할 수 있는 코드 없이는, 구문을 생성하는 순간 브라우저에서 실제로 무엇이 실행되고 있는지 알 수 없습니다.
클라이언트 측 vs 서버 측: 결정적 차이¶
온라인 시드 구문 생성기를 평가할 때 가장 중요한 단일 요소는 클라이언트 측에서 작동하는지 서버 측에서 작동하는지입니다.
서버 측 생성기는 원격 서버에서 시드 구문을 생성하여 브라우저로 전송합니다. 비밀이 전송 중 인터넷을 통과하고, 서버 메모리에 존재하며, 잠재적으로 로깅됩니다. HTTPS 암호화가 있더라도, 서버 운영자는 생성된 모든 키에 접근할 수 있습니다. 이 모델은 근본적으로 보안과 양립할 수 없으며, 어떤 상황에서도 서버 측 시드 구문 생성기를 사용해서는 안 됩니다.
클라이언트 측 생성기는 모든 암호화 연산을 브라우저 내에서 실행합니다. 엔트로피가 로컬에서 생성되고, 시드 구문이 로컬에서 파생되며, 결과 키는 장치를 떠나지 않습니다. 웹사이트는 코드를 제공하지만, 그 코드가 로드되면 서버와 독립적으로 작동합니다. 페이지를 로드한 후 인터넷 연결을 끊으면, 진정한 클라이언트 측 생성기는 완벽하게 계속 작동합니다.
이 구분이 중요한 이유는 적절하게 구현된 클라이언트 측 도구가 데스크톱 애플리케이션과 동일한 보안 속성을 갖기 때문입니다. 브라우저는 하드웨어 기반 난수 생성, 표준 암호화 라이브러리, 그리고 필요 시 네트워크로부터의 완전한 격리에 접근할 수 있는 실행 환경입니다.
그러나 "클라이언트 측"이라는 주장은 검증되어야 합니다. 많은 도구가 클라이언트 측이라고 주장하면서도 여전히 네트워크 요청을 하거나, 외부 스크립트를 로드하거나, 화면 데이터를 캡처할 수 있는 분석 트래커를 포함하고 있습니다. 다음 섹션에서는 이러한 주장을 직접 확인하는 방법을 설명합니다.
클라이언트 측 여부를 확인하는 방법¶
도구가 진정으로 클라이언트 측에서 작동하는지 확인하려면 누구나 수행할 수 있는 몇 가지 간단한 검사가 필요합니다.
비행기 모드 테스트¶
가장 간단한 테스트: 생성기 페이지를 로드한 다음, 인터넷 연결을 완전히 끊습니다. 장치에서 비행기 모드를 활성화하거나, 이더넷 케이블을 분리하거나, Wi-Fi를 끕니다. 그런 다음 시드 구문을 생성해 보세요. 네트워크 연결 없이 도구가 완벽하게 작동한다면, 최소한 생성 단계는 로컬에서 수행되고 있습니다.
네트워크 트래픽 검사¶
생성기를 사용하기 전에 브라우저의 개발자 도구(F12 또는 Cmd+Shift+I)를 열고 네트워크 탭으로 전환합니다. 기존 항목을 지운 다음 시드 구문을 생성합니다. 생성 버튼을 클릭한 후 나가는 요청이 있는지 확인합니다. 정당한 클라이언트 측 도구는 생성 중 네트워크 요청이 제로여야 합니다. 외부 도메인, 분석 엔드포인트, 또는 API 호출에 대한 요청이 있으면 의심하세요.
소스 코드 검토¶
오픈소스 생성기는 브라우저에서 실행되는 실제 코드를 검토할 수 있게 합니다. 다음을 확인하세요:
- 난수 생성이 사용자 정의 또는 가져온 난수 함수가 아닌 브라우저의 내장 Web Crypto API를 사용하는지
- 생성된 데이터로
fetch(),XMLHttpRequest, 또는WebSocket호출이 이루어지지 않는지 - 손상될 수 있는 CDN에서 외부 스크립트가 로드되지 않는지
- 분석 또는 추적 스크립트가 없거나, 최소한 페이지의 DOM 콘텐츠에 접근할 수 없는지
하위 리소스 무결성¶
페이지가 스크립트 태그에 하위 리소스 무결성(SRI) 해시를 사용하는지 확인합니다. SRI는 외부 소스에서 로드된 스크립트가 변조되지 않았음을 보장합니다. SRI 없이는 손상된 CDN이 키를 캡처하는 악성 JavaScript를 제공할 수 있습니다.
Web Crypto API 표준¶
현대 브라우저는 Web Crypto API라는 내장 암호화 API를 포함하고 있습니다. 이것은 브라우저 기반 도구에서 엔트로피 생성의 표준입니다.
시드 구문 생성기가 crypto.getRandomValues()를 호출하면, 운영 체제의 암호학적으로 안전한 의사 난수 생성기(CSPRNG)에서 무작위성을 가져옵니다. 대부분의 시스템에서 이것은 인터럽트 타이밍, CPU 열 잡음, 전용 하드웨어 난수 생성기를 포함한 하드웨어 엔트로피 소스를 결합합니다. 결과 무작위성은 모든 실용적인 암호화 목적에서 진정한 무작위 데이터와 구별할 수 없습니다.
이것이 중요한 이유는 BIP39 시드 구문의 보안이 궁극적으로 이를 생성하는 데 사용된 엔트로피의 보안이기 때문입니다. 128비트 시드 구문(12단어)은 128비트의 진정한 무작위성이 필요합니다. 도구가 crypto.getRandomValues() 대신 Math.random()을 사용하면, 엔트로피 풀이 극적으로 작아지고, 결과 시드 구문은 무차별 대입이 가능해질 수 있습니다. 엔트로피 품질이 중요한 이유에 대한 더 깊은 탐구는 암호화폐에서 엔트로피란?을 참조하세요.
Web Crypto API는 Chrome, Firefox, Safari, Edge를 포함한 모든 현대 브라우저에서 사용 가능합니다. 비밀번호 관리자, 뱅킹 애플리케이션, 보안 메시징 도구에서 사용되는 것과 동일한 기본 요소입니다. 올바르게 사용되면, 하드웨어 지갑의 내부 난수 생성기와 동일한 품질의 무작위성을 제공합니다.
SafeSeed의 아키텍처¶
SafeSeed는 처음부터 클라이언트 측 도구로 설계되었습니다. 엔트로피 생성부터 시드 구문 파생, 개인 키 계산까지 모든 암호화 연산이 전적으로 브라우저 내에서 실행됩니다.
SafeSeed의 아키텍처가 위에서 설명한 각 위험을 어떻게 해결하는지 설명합니다:
엔트로피 생성은 Web Crypto API를 독점적으로 사용합니다. Bitcoin Seed Phrase Generator나 Ethereum Seed Phrase Generator를 사용할 때, 무작위성은 crypto.getRandomValues()를 통해 운영 체제의 CSPRNG에서 가져옵니다.
서버 통신 없음이 키 생성 중 발생합니다. SafeSeed는 키를 생성, 표시, 파생할 때 네트워크 요청을 전혀 하지 않습니다. 위에서 설명한 네트워크 검사 방법을 사용하여 직접 확인하거나, 페이지를 로드한 후 인터넷 연결을 끊으면 됩니다.
오픈소스이며 감사 가능한 코드는 SafeSeed의 주장을 신뢰할 필요가 없음을 의미합니다. 소스 코드는 누구나 검토할 수 있도록 공개되어 있습니다. 보안 연구원, 암호학자, 경험 있는 개발자가 구현이 주장과 일치하는지 확인할 수 있습니다.
암호화 연산에 외부 의존성 없음. BIP39 파생, 키 생성, 주소 계산 모두 페이지에 직접 번들된 코드를 사용합니다. 조용히 교체될 수 있는 CDN에서 로드되는 암호화 라이브러리가 없습니다.
이 아키텍처는 SafeSeed를 사용하여 Bitcoin이나 Ethereum 시드 구문을 생성하는 것이, 코드를 검증하고 선택적으로 생성 전에 연결을 끊는다면, 에어갭 컴퓨터에서 로컬 프로그램을 실행하는 것과 동일한 보안 속성을 갖는다는 것을 의미합니다.
평가 체크리스트¶
온라인 시드 구문 생성기를 사용하기 전에 이 체크리스트를 점검하세요. 정당한 도구는 모든 항목을 통과해야 합니다.
필수 속성¶
-
클라이언트 측 실행: 도구는 초기 페이지 로드 후 인터넷 연결 없이 작동해야 합니다. 비행기 모드로 직접 테스트하세요.
-
Web Crypto API 사용: 소스 코드는 엔트로피에
crypto.getRandomValues()를 사용해야 합니다. 소스 또는 개발자 문서를 확인하세요. -
생성 중 네트워크 요청 없음: 브라우저의 네트워크 탭을 열고 시드 구문 생성 시 나가는 요청이 제로인지 확인하세요.
-
오픈소스 코드: 전체 소스 코드가 감사를 위해 공개되어 있어야 합니다. 독점적인 생성기는 운영자를 맹목적으로 신뢰해야 합니다.
-
분석 또는 추적 스크립트 없음: Google Analytics, Hotjar 또는 유사한 서드파티 스크립트가 표시된 시드 구문을 포함한 화면 데이터를 캡처할 수 있습니다.
품질의 강력한 지표¶
-
체크섬 검증이 포함된 BIP39 준수: 도구는 유효한 체크섬이 있는 구문을 생성하고 구현하는 표준을 명확하게 설명해야 합니다. 작동 방식에 대한 자세한 내용은 BIP39 설명을 참조하세요.
-
결정적 파생: 동일한 시드 구문이 주어지면, 도구는 항상 동일한 키와 주소를 파생해야 합니다. 다른 신뢰할 수 있는 도구와 결과를 교차 확인하여 정확성을 검증할 수 있습니다.
-
표준 파생 경로 지원: HD 지갑 파생은 BIP44 표준을 따라야 도구로 생성된 지갑이 호환되는 모든 지갑 소프트웨어에서 복구 가능합니다. HD 지갑과 파생 경로에서 더 자세히 알아보세요.
-
보안 모델의 명확한 문서화: 도구는 무엇이 어디서 실행되는지, 어떤 데이터가 장치를 떠나는지(아무것도 떠나서는 안 됩니다), 엔트로피가 어떻게 생성되는지를 정확히 설명해야 합니다.
위험 신호¶
- 시드 구문 생성 전 계정 생성 또는 이메일 입력 요구
- 생성 페이지에 소셜 미디어 공유 버튼 포함
- 여러 외부 도메인에서 스크립트 로드
- Web Crypto API 대신 사용자 정의 난수 생성 사용
- 검토를 위한 소스 코드 미제공
- 시드 구문 생성 중 네트워크 요청 발생
- 시드 구문을 서버에 저장하거나 "백업"하도록 요청
안전한 온라인 생성기와 위험한 생성기의 차이는 표면적이 아닌 아키텍처적입니다. 예쁜 인터페이스는 코드가 서버에 연락한다면 의미가 없습니다. 못생긴 도구도 적절한 엔트로피로 전적으로 브라우저에서 실행된다면 완벽히 안전할 수 있습니다. 검사 방법을 익히고, 직접 수행하면, 어떤 도구든 자신 있게 평가할 수 있습니다.
시드 구문과 개인 키의 관계에 대한 추가 맥락은 시드 구문 vs 개인 키를 참조하세요. 그리고 안전하게 키를 생성할 준비가 되었다면, SafeSeed의 Bitcoin Seed Phrase Generator와 Ethereum Private Key Generator 모두 이 글에서 설명한 원칙에 기반하여 만들어졌습니다.