ERC-20 기반 비수탁형 암호화폐 지갑 앱
개인키를 디바이스에 암호화 저장하는 이더리움 기반 비수탁형 지갑
* 본 이미지는 프로젝트 이해를 돕기 위해 AI로 생성되었습니다.프로젝트 개요
사용자가 개인키(Private Key)를 통해 자산을 직접 통제하는 이더리움 기반 비수탁형(Non-Custodial) 지갑 앱입니다. 중앙 서버에 키를 보관하지 않고, 모바일 OS의 보안 영역인 KeyStore에 개인키를 암호화하여 저장함으로써 최고 수준의 자산 보안을 실현했습니다. Web3.js를 활용해 이더리움 네트워크와 직접 통신하며, 이더(ETH) 및 다양한 ERC-20 토큰의 실시간 잔액 조회와 전송을 지원합니다. 생체 인증(지문/Face ID)을 통한 접근 제어를 더해 편의성과 보안을 동시에 확보했습니다.
주요 기능
- 지갑 생성 및 가져오기: 신규 개인키 생성 또는 기존 Private Key 입력을 통한 지갑 복원
- ERC-20 토큰 관리: 커스텀 토큰 추가 및 실시간 잔액 조회·전송 기능
- 디바이스 KeyStore 암호화 저장: 서버 비보관 방식으로 개인키를 OS 보안 영역에 안전하게 보호
- 생체 인증 연동: 지문 및 Face ID를 활용한 지갑 접근 인증 처리
- Web3.js 기반 온체인 통신: 이더리움 네트워크와 직접 연동하여 트랜잭션 생성 및 서명
해결한 문제
비수탁형 구조 특성상 개인키 분실 시 자산 복구가 불가능하므로, 키 관리의 안전성과 사용자 접근 편의성을 동시에 충족해야 하는 설계 난제가 있었습니다. 또한 모바일 OS별(Android KeyStore / iOS Secure Enclave) 보안 영역의 동작 방식이 달라, 플랫폼 간 일관된 암호화 저장 로직을 구현하는 것이 기술적으로 까다로웠습니다.
솔루션
Android KeyStore와 iOS Secure Enclave 각각의 네이티브 암호화 API를 플랫폼별로 구현하고, 그 위에 통합 인터페이스를 추상화하여 일관된 키 관리 흐름을 확보했습니다. 생체 인증을 키 접근의 필수 관문으로 설정해, 디바이스를 탈취당하더라도 개인키에 접근하기 어려운 다중 보안 구조를 구성했습니다.
성과
- 서버 키 보관 없는 완전한 비수탁형 구조로 중앙화 해킹 위협 원천 차단
- OS 보안 영역(KeyStore/Secure Enclave) 기반 암호화로 금융급 개인키 보호 실현
- ETH 및 ERC-20 토큰 실시간 조회·전송 기능을 단일 앱에서 통합 제공
- 생체 인증 도입으로 보안성을 유지하면서도 간편한 사용자 경험 제공
이런 프로젝트에 적합합니다
자주 묻는 질문
Q. 개인키를 서버에 보관하지 않으면 보안이 더 취약한 것 아닌가요?
오히려 반대입니다. 서버에 키를 보관하면 중앙 서버 해킹 시 모든 사용자의 자산이 한 번에 탈취될 수 있습니다. 이 프로젝트는 개인키를 각 사용자의 디바이스 내 OS 보안 영역(Android KeyStore / iOS Secure Enclave)에만 암호화하여 저장하므로, 중앙화된 해킹 위협을 구조적으로 차단합니다. 여기에 생체 인증을 키 접근의 필수 관문으로 설정해, 디바이스 분실 시에도 개인키 노출을 이중으로 방지합니다.
Q. Android와 iOS의 보안 영역 방식이 다른데, 두 플랫폼에서 동일하게 동작하도록 어떻게 구현했나요?
Android KeyStore와 iOS Secure Enclave는 각각의 네이티브 암호화 API 동작 방식이 달라 플랫폼별로 개별 구현이 필요했습니다. 이를 해결하기 위해 플랫폼별 구현 위에 통합 인터페이스를 추상화 레이어로 설계하여, 앱 상위 로직에서는 플랫폼 차이 없이 일관된 키 관리 흐름으로 동작하도록 구성했습니다. Kotlin(Android)과 Swift(iOS)로 각각 네이티브 구현을 분리한 덕분에 각 OS의 보안 기능을 최대한 활용할 수 있었습니다.
Q. ERC-20 커스텀 토큰은 어떻게 추가하며, 잔액 조회와 전송은 어떤 방식으로 처리되나요?
사용자가 ERC-20 토큰의 컨트랙트 주소를 직접 입력하면 커스텀 토큰으로 등록할 수 있습니다. 잔액 조회와 전송은 Web3.js를 통해 이더리움 네트워크와 직접 통신하며, 트랜잭션 서명 역시 서버를 거치지 않고 디바이스 내에서 개인키로 처리됩니다. 이 구조 덕분에 ETH와 ERC-20 토큰 모두 단일 앱 내에서 실시간으로 조회하고 전송할 수 있습니다.
Q. 비수탁형 지갑의 특성상 개인키 분실 위험이 있는데, 사용자 경험과 보안을 어떻게 균형 있게 설계했나요?
비수탁형 구조에서는 개인키 분실 시 자산 복구가 불가능하기 때문에, 키 접근 편의성과 보안성을 동시에 확보하는 것이 핵심 설계 과제였습니다. 일상적인 지갑 접근은 지문 또는 Face ID 생체 인증으로 간편하게 처리하고, 개인키 자체는 OS 보안 영역에 격리 저장하여 사용자가 직접 노출될 상황을 최소화했습니다. 또한 기존 개인키 입력을 통한 지갑 복원 기능을 제공해 사용자가 직접 키를 안전하게 백업·관리할 수 있는 흐름도 함께 지원합니다.