Tangem이 프라이빗 키를 위한 엔트로피를 생성하는 방식
시드 없는 모드에서는 Tangem Wallet이 독일 BSI PTG.2 (AIS 31) 인증을 받은 Secure Element 내장 True Random Number Generator 하드웨어에서 엔트로피를 생성해요.
시드 구문을 사용하는 경우에는, 감사된 난수 생성 방식을 통해 엔트로피를 만듭니다:
- Android에서는 SecureRandom이라는 암호학적으로 안전한 의사난수 생성기(CSPRNG)를 사용해요. 이 결과값은 BoringSSL/Conscrypt를 거쳐 커널 엔트로피 풀로 전달되며, 인터럽트 타이밍, 센서, SoC의 하드웨어 TRNG 등에서 시드를 받아요. 이로 인해 공격자가 키 데이터를 예측하거나 복원할 수 없게 됩니다.
- iOS에서는 시스템 제공 SecRandomCopyBytes API를 사용해요. 이 API는 암호화에 적합한 안전한 난수를 생성하며, 엔트로피는 Secure Enclave의 하드웨어 기반 true random number generator(TRNG)에서 가져와요.
암호화폐 지갑에서 엔트로피란?
엔트로피는 지갑이 프라이빗 키를 생성할 때 사용하는 순수한 무작위성이에요. 비트 단위로 측정되며, 비트 수가 많을수록 만들 수 있는 키의 경우의 수가 커집니다.
지갑은 최초 설정 시 한 번 엔트로피를 생성해요. 이후의 모든 키, 주소, 서명은 고정된 수학적 규칙에 따라 만들어지므로 새로운 무작위성은 추가되지 않아요.
즉, 생성 단계가 한 번으로 고정돼요. 만약 엔트로피가 낮으면, 이후에 아무리 보강해도 시드 구문에서 파생된 키의 안전성을 높일 수 없어요.
프라이빗 키에는 얼마나 많은 엔트로피가 필요할까요?
충분한 엔트로피가 없으면, 공격자가 키 생성 과정의 패턴이나 편향을 노려 전체 수학적 공간을 무차별 대입하는 것보다 훨씬 효율적으로 키를 추측할 수 있게 돼요.
프라이빗 키는 어떤 공격자에게도 완전히 무작위로 보여야 해요. 엔트로피가 낮으면 실질적인 탐색 공간이 크게 줄어들어, 원래는 불가능에 가까운 문제가 충분한 컴퓨팅 파워나 분석으로 현실적으로 풀릴 수 있게 돼요.
실제로 이 무작위성은 고품질 엔트로피 소스에서 암호학적으로 안전한 난수 생성기로 공급돼요. 만약 소스가 약하다면(예: 타임스탬프, 프로세스 ID, 시스템 노이즈 부족 등), 생성된 프라이빗 키에 숨겨진 구조가 생깁니다.
실제 사례에서도 공격자들이 이런 약점을 이용해, 시드가 부족한 RNG로 만들어진 디바이스에서 비트코인 프라이빗 키를 복구해 대량 키 탈취가 일어난 적이 있어요. 엔트로피가 32비트까지 떨어진 경우도 있었습니다.
충분한 엔트로피는 키의 보안 수준이 알고리즘 자체의 강도와 일치하도록 보장해요. 예를 들어 secp256k1(비트코인 등에서 사용) 같은 타원곡선 키는 수학적 공격에 대해 약 128비트 보안을 제공하므로, 프라이빗 키도 최소 그만큼의 엔트로피가 필요해요. 그렇지 않으면 키 자체가 약점이 될 수 있습니다.
Tangem은 시드 없는 모드에서 어떻게 엔트로피를 생성하나요?
시드 없는 모드에서는 Tangem Card가 프라이빗 키를 보안 칩 내부에서 직접 생성해요. 이 칩에는 하드웨어 true random number generator가 내장되어 있는데, 열 잡음이나 오실레이터 지터 같은 물리적 현상에서 무작위성을 얻어요. 전체 과정은 아래와 같아요.
1단계: TRNG가 물리적 노이즈를 샘플링해요.
하드웨어 true random number generator는 실리콘 내에서 발생하는 예측 불가능한 변동(트랜지스터 수준의 열 잡음, 양자 효과에 의한 전자 노이즈, 고주파 오실레이터의 타이밍 지터 등)에서 엔트로피를 얻어요. 이 단계의 출력은 편향과 상관관계가 남아 있는 원시 비트 스트림이에요.
2단계: 컨디셔닝으로 편향을 제거해요. TRNG는 암호 해시나 화이트닝과 같은 컨디셔닝 알고리즘을 적용해 패턴을 없애고, 모든 값이 균등하게 분포된 결과를 만듭니다. 또한 원시 스트림에 대해 연속적인 헬스 테스트를 수행하고, 노이즈 소스가 약해지면 동작을 멈춰요. 1단계와 함께, 이 과정은 CC EAL 인증 라이브러리를 사용해 수행되며, 칩에 내장되어 있고 인증 과정에서 엄격히 테스트됩니다. 수정되지 않아요.
3단계: 칩이 256비트 값을 추출해요. 컨디셔닝된 출력에서 256비트 시퀀스를 추출합니다. 이 값이 프라이빗 키 후보예요.
4단계: 곡선 오더 범위 내 유효성 검사. 타원곡선 프라이빗 키는 특정 범위 내의 유효한 스칼라여야 해요. secp256k1의 경우, 키는 1 이상 n-1 이하의 정수여야 하며, n은 기본점의 오더로 2^256보다 약간 작아요.
값이 0이거나 n 이상이면 무효로 간주되어 칩이 다시 추출해요. 이런 경우는 2^-128 확률로 매우 드물게 발생합니다.
5단계: 이 값이 마스터 키가 돼요. 이 단계에서 시드 없는 방식이 완성됩니다. 256비트가 바로 마스터 프라이빗 키로 들어가며, 시드 구문은 사용하지 않아요.
6단계: 칩이 공개 키를 계산해요. 공개 키는 프라이빗 키에 secp256k1의 생성점(G)을 곱해 얻어요. 이 연산은 일방향적이고 되돌릴 수 없습니다.
7단계: 공개 키에서 주소를 파생해요. 비트코인의 경우, 경로에 따라 압축 공개 키를 SHA-256, RIPEMD-160 해시를 거쳐 20바이트 해시로 만듭니다. 이 해시의 인코딩 방식에 따라 주소 타입이 결정돼요.
BIP-84 경로의 키는 bech32 인코딩의 P2WPKH 주소가 되고, BIP-44 경로의 키는 Base58Check 인코딩의 P2PKH 주소가 돼요. 두 경로는 서로 다른 키와 주소를 만듭니다.
9단계: 프라이빗 키는 보호된 메모리에만 남아요. 프라이빗 키는 보안 칩 내부에 평생 저장돼요. 칩이 내부적으로 트랜잭션에 서명하고, 서명만 외부로 내보내므로 키가 스마트폰, 앱, 인터넷으로 노출되지 않아요.
Tangem은 시드 구문 모드에서 어떻게 엔트로피를 생성하나요?
시드 구문 모드에서는 Tangem 앱이 스마트폰에서 니모닉을 생성해요. 앱은 플랫폼의 암호학적 난수 생성기에서 무작위 바이트를 요청하는데, iOS는 SecRandomCopyBytes, Android는 SecureRandom을 사용합니다.
두 인터페이스 모두 암호학적으로 안전한 의사난수 생성기예요. 각 생성기는 운영체제의 엔트로피 풀을 시드로 사용하며, 이 풀은 부팅 시와 사용 중에 하드웨어 엔트로피 소스에서 채워져요.
앱은 이 바이트를 BIP-39 표준에 따라 단어로 변환해요. 체크섬을 추가하고, 11비트씩 나눠 2048개 단어 목록 중 하나로 매핑합니다. 12단어는 128비트 엔트로피, 24단어는 256비트 엔트로피를 담아요.
시드 없는 모드는 누군가가 적어둔 시드 구문을 발견하거나 촬영하거나 파기하는 등, 가장 흔한 분실 원인을 없애줘요. 시드 구문 모드는 다른 지갑으로의 이식성을 제공하지만, 칩 외부에 키 복사본이 만들어진다는 점에서 위험이 있습니다.
사용자가 직접 엔트로피를 테스트할 수 없는 이유는?
40비트 엔트로피로 만든 키와 256비트 엔트로피로 만든 키는 겉으로 보면 똑같아요. 둘 다 유효한 주소를 만들고, 동일한 형식의 단어 수를 반환해요.
일반 사용자가 집에서 직접 실행할 수 있는 테스트는 존재하지 않아요. 그래서 엔트로피 결함이 있는 제품이 수년간 출하될 수도 있습니다. 따라서 검증은 구매 전에, 공개된 감사를 통해 또는 제조사의 기술적 설명을 통해 이뤄져야 해요.
엔트로피 공격은 어떻게 작동하나요?
공격자가 공개 주소만으로 프라이빗 키를 계산하는 것은 불가능해요. 이는 이산 로그 문제를 풀어야 하는데, 현실적으로는 계산이 불가합니다.
하지만 엔트로피가 약하면 이런 계산 자체가 필요 없어져요. 공격자는 깨진 난수 생성기가 만들 수 있는 키 후보 집합을 모두 탐색해 각각의 주소를 파생시키고, 그 주소가 블록체인에 잔고가 있는지 확인해요.
주소가 바로 탐색의 기준점이 됩니다. 이것이 엔트로피 공격이 자금이 있는 지갑만 찾는 이유이고, 빈 지갑은 무시하는 이유예요.
하드웨어 지갑 선택 시 꼭 확인해야 할 점
하드웨어 지갑을 고를 때는 프라이빗 키의 예측 불가능성을 결정짓는 강력하고 검증 가능한 엔트로피 생성 기능이 있는 제품을 우선적으로 고려하세요.
최근 엔트로피 공격 사례는 오픈소스 펌웨어가 무조건 더 안전하다고 볼 수 없다는 점을 보여줘요. 대부분의 사용자는 실제로 소스 코드를 직접 감사할 수 없지만, 숙련된 공격자는 오히려 이를 분석해 취약점을 찾고 악용할 수 있습니다.
가장 강력한 접근법은 불필요한 펌웨어 노출은 최소화하면서, 공인된 보안 전문가의 독립적인 감사를 거치는 거예요. 궁극적으로 보안은 강력한 설계, 철저한 테스트, 독립적 검증에서 나옵니다. - Andrey Lazutkin, CTO
인증된 Secure Element와 독립적으로 감사를 받은 펌웨어를 탑재한 하드웨어 지갑 사용을 권장해요. 이 펌웨어가 Secure Element 사용을 관리하며, 구현상의 결함이 있으면 아무리 하드웨어가 안전해도 위험해질 수 있어요. 그래서 모든 펌웨어 업데이트는 신뢰할 수 있는 전문가의 검토가 필요합니다.
Tangem의 보안 설계는 Kudelski Security, Riscure, Cure53 등 업계 최고 수준의 연구소에서 독립적으로 검증받아, 지갑의 전반적인 안전성을 입증받았어요.