지갑 사용 가이드 / TERVO
어떻게 작동하는지
분명히 밝힙니다.
이 페이지는 외부 리뷰에서 "미공개"로 지적된 구현 질문에 답합니다. 키 파생, 암호화, 서명, 노드 제공자, USDT 수수료 결제와 TRON 에너지 임대 방식, 실패 처리와 환불입니다. 앱 소스 코드(1.2.0) 또는 2026년 10월 메인넷 테스트로 확인할 수 있는 내용만 적고, 아직 하지 않은 일도 함께 밝힙니다. 확인일: 2026년 10월 13일.
소스 코드, 감사 및 배포
소스 코드는 공개하지 않았고 제3자 보안 감사도 받지 않았습니다. 앱 스토어에 등록하지 않고 이 웹사이트에서 APK로 배포하며 iOS 버전은 없습니다. 직접 확인할 수 있는 것: 각 릴리스 APK의 SHA-256은 다운로드 페이지에 표시되고, 서명 인증서 지문은 바뀌지 않습니다. 정식 버전은 저희 컴퓨터에서 서명하며 서명 키는 빌드 서버에 올리지 않습니다. 앱 내 업데이트는 HTTPS로 내려받고, 파일 SHA-256, 패키지 이름, 버전 번호, 서명 인증서가 설치된 앱과 일치하는지 확인한 뒤 설치합니다.
복구 문구와 파생 경로
복구 문구는 BIP39를 따르며 추가 패스프레이즈는 사용하지 않습니다(빈 값). 새 지갑은 영어 또는 중국어 간체 12단어이고, 가져오기는 12·15·18·21·24단어 영어 문구와 중국어 문구를 지원합니다. 주소는 BIP44를 따르며 Ethereum과 BNB Smart Chain은 m/44'/60'/0'/0/n(두 체인에서 같은 주소), TRON은 m/44'/195'/0'/0/n을 사용합니다. n은 0부터 시작하는 계정 번호로 일반적인 지갑과 같은 구조입니다. 문구를 복원하면 계정 2부터 잔액을 확인하고 빈 계정이 연속 2개 나오면 멈춥니다. 지갑당 최대 20개 계정입니다. 중국어 간체 단어 목록은 BIP39 공식 목록이며 앱이 불러올 때 SHA-256을 검증합니다. 테스트 벡터는 Trezor가 쓰는 참조 구현과 일치하고, 시작 화면에서 파생 자가 점검을 실행합니다.
휴대폰에서의 암호화 방식
복구 문구나 개인 키는 무작위 256비트 데이터 키로 AES-256-GCM 암호화합니다. 암호화할 때마다 SecureRandom으로 새 12바이트 nonce를 만들고 인증 태그는 128비트입니다. 데이터 키는 앱 비밀번호에서 PBKDF2-HMAC-SHA256(12만 회, 무작위 솔트)으로 파생한 키로 감쌉니다. 지문 잠금 해제를 켜면 사용할 때마다 강력한 생체 인증이 필요하고 새 지문을 등록하면 영구 무효가 되는 Android Keystore 키로 한 번 더 감쌉니다. 파일 전체는 기기에 묶인 내보낼 수 없는 Android Keystore 키로 다시 암호화합니다. 파일은 백업 제외 디렉터리에 있고 시스템 백업도 꺼져 있습니다. 하드웨어 기반 키 보호 여부는 기기에 따라 다릅니다.
서명, 노드, 서버가 보는 정보
거래는 휴대폰에서 Trust Wallet Core 4.8.4(오픈 소스, Apache-2.0)로 만들고 서명합니다. 잔액 조회와 서명된 거래는 Cloudflare Workers의 프록시를 거쳐 Alchemy(Ethereum), NodeReal(BNB Smart Chain), TronGrid(TRON)로 전달됩니다. 프록시와 이 제공자들은 IP 주소와 공개 주소를 볼 수 있습니다. 프록시는 전달과 요청 제한만 하며, 개인정보 처리방침에 적은 TRON 유료 주문 기록을 제외하고 요청 내용을 저장하지 않습니다. 환산 가격은 OKX, KuCoin, Gate, Binance의 공개 시세 API에서 가져옵니다. 서버는 복구 문구, 개인 키, 앱 비밀번호를 받지 않으며 사용자 주소로 송금에 서명할 수 없습니다.
Ethereum·BNB Smart Chain: USDT로 수수료 결제
이 방식은 ERC-2771 forwarder를 쓰지 않으며 토큰 승인(approve)도 요구하지 않습니다. 주소는 EIP-7702로 Alchemy의 SemiModularAccount7702 컨트랙트(아래 표 참고)에 위임되고, EntryPoint v0.7을 거치는 ERC-4337 작업 하나로 송금과 수수료를 함께 처리하며 가스는 Alchemy Gas Manager가 냅니다. 두 송금은 함께 성공하거나 함께 실패하므로 송금이 실패하면 수수료가 없습니다. 서명 전에 앱이 수수료 수취 주소, 수수료 상한, 위임 컨트랙트 허용 목록, 콜데이터를 바이트 단위로 확인하고 해시를 직접 다시 계산합니다. 수수료는 서명 전에 확인 화면에 표시되며, 네트워크 가스가 매우 높을 때는 제공되지 않을 수 있습니다. 견적 유효 시간은 BNB Smart Chain 5분, Ethereum 1분입니다. 위임은 이후에도 주소에 남으며 다른 지갑에서 스마트 계정으로 보이거나 변경될 수 있습니다.
TRON: USDT로 수수료 결제
스마트 컨트랙트도 승인도 사용하지 않습니다. 앱은 휴대폰에서 일반 USDT 송금 두 건에 서명합니다. 하나는 수수료를 저희 TRON 수수료 주소로 보내고, 하나는 사용자의 송금입니다. 서버는 두 거래를 바이트 단위로 확인한 뒤 GetBlock을 통해 필요하면 주소를 활성화(아주 적은 TRX 전송)하고 에너지와 대역폭을 약 1시간 위임합니다. 수수료를 먼저 브로드캐스트하고, 수수료가 성공한 뒤에야 사용자의 송금을 브로드캐스트합니다. 수수료에는 활성화(필요 시), 에너지, 대역폭과 서비스 수수료가 포함되며 서명 전에 표시됩니다. 견적은 2분간 유효합니다. 두 거래는 별개이고 브로드캐스트 시점은 서버가 정하므로 이 부분은 저희를 신뢰해야 합니다. 수수료가 온체인에 기록되었는데 송금이 끝내 성공하지 못하면, 확인 후 수수료를 지불한 주소로 환불합니다(이용약관 참고).
TRON: 에너지 임대
TRX를 보유한 사용자용입니다. 앱은 저희 TRON 수수료 주소로 가는 TRX 결제와 사용자의 USDT 송금 두 건에 서명합니다. 서버는 먼저 GetBlock에서 에너지를 임대해 사용자 주소로 위임(건당 최소 30,000 에너지, 약 1시간)한 뒤 결제를 브로드캐스트하고, 결제가 성공한 뒤에야 송금을 브로드캐스트합니다. 결제가 성공하지 않으면 송금은 보내지지 않고 요금도 없습니다. 비용(서비스 수수료 포함)은 서명 전에 표시되며, 같은 에너지를 TRX로 소각하는 것보다 저렴할 때만 제공합니다. 대역폭은 포함되지 않으며 네트워크 규칙에 따라 사용자 TRX로 지불되고 확인 화면에 예상치가 표시됩니다. 결제가 온체인에 기록되었는데 송금이 끝내 성공하지 못한 경우에도 확인 후 환불합니다.
메인넷 실측 결과
2026년 10월 내부 테스트 주소로 실제 USDT를 사용해 TRON의 세 가지 결제 방식을 메인넷에서 테스트했습니다. USDT 송금은 수취인이 USDT를 보유한 경우 64,285 에너지, 보유하지 않은 경우 130,285 에너지를 썼고 건당 대역폭 345를 사용했습니다. USDT 수수료 결제와 에너지 임대에서는 에너지를 위해 TRX가 소각되지 않았습니다. 당시 수취인이 USDT를 보유한 경우의 일반적인 요금은 에너지 임대 약 2.07 TRX(소각 시 약 6.4~6.7 TRX), USDT 수수료 결제 약 1.84 USDT(송금 주소 활성화가 필요하면 약 2.75 USDT)였습니다. BNB Smart Chain과 Ethereum 메인넷에서도 USDT로 수수료를 낸 송금을 각각 한 건 완료했습니다. 이는 실측값이며 고정 가격이 아닙니다. 견적은 네트워크 상황, TRX 가격, 제공자 가격에 따라 달라집니다. 화면 스크린샷의 금액은 예시입니다. 개별 테스트 거래는 공개하지 않습니다.
아직 하지 않은 것
소스 코드 비공개. 제3자 보안 감사 없음. 앱 스토어 등록과 iOS 버전 없음. 버그 바운티 프로그램 없음(보안 제보는 [email protected]). 기능 소개가 다른 인상을 주지 않도록 이를 분명히 적습니다. 어느 하나라도 바뀌면 날짜와 함께 이 페이지를 업데이트합니다.
직접 확인할 수 있는 주소와 지문
| EIP-7702 위임 컨트랙트(허용 목록): Alchemy SemiModularAccount7702 | 0x77021100bd87b7008e5e1989d0eb38555d0d0000Etherscan · BscScan |
|---|---|
| EIP-7702 위임 컨트랙트(허용 목록): Alchemy SemiModularAccount7702 이전 릴리스 | 0x69007702764179f14f51cdce752f4f775d74e139Etherscan · BscScan |
| ERC-4337 EntryPoint v0.7 | 0x0000000071727De22E5E9d8BAf0edAc6f37da032Etherscan · BscScan |
| TRON USDT 컨트랙트 | TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6tTronscan |
| APK 서명 인증서 SHA-256 | bec2a862c0a8b1963c5b7e08a08669dcbe877f7acccc36f455817742ac07a9f7 |
| BIP39 중국어 간체 단어 목록 SHA-256 | 5c5942792bd8340cb8b27cd592f1015edf56a8c5b26276ee18a482428e7c5726 |