OneKey Transfer는 OneKey 앱 내 기능으로 소프트웨어 지갑의 개인 키를 기기 간에 안전하게 이동합니다. 이 가이드는 데이터를 보호하는 여러 보안 계층을 설명합니다.
지갑 관련 참고: 이 기능은 현재 소프트웨어 지갑 전용입니다. 하드웨어 지갑 지원은 더 복잡하여 이후 버전에 추가될 예정입니다.
핵심 원칙
당사의 보안은 세 가지 핵심 약속에 기반합니다:
오픈소스 및 신뢰성
앱과 서버의 코드는 공개되어 있습니다. 누구나 이를 검토하여 당사의 보안 주장들을 확인할 수 있습니다.
종단 간 암호화(E2EE)
데이터는 기기에서 암호화되며 목적지 기기에서만 복호화됩니다. 중간에 있는 누구도—OneKey조차도—이를 읽을 수 없습니다.
서버 제로 지식
서버는 기기들을 연결하는 트래픽 중계 역할만 합니다. 전송되는 데이터에 대한 접근이나 지식이 전혀 없습니다.
암호화 키 구성 방법
데이터는 여러 독립적인 요소로 구성된 키로 잠깁니다. 공격자가 암호화를 해제하려면 서로 다른 장소에서 모든 요소를 동시에 탈취해야 합니다.
1. 동적 공유 키 (ECDHE)
정의: 세션 시작 시 두 기기 간에 직접 생성되는 일시적 일회성 공유 키입니다.
핵심 요약: 이 키는 서버로 전송되거나 서버가 볼 수 없습니다. 페어링 코드가 가로채지더라도(예: 화면 녹화) 연결을 안전하게 만듭니다.
2. 페어링 코드
처음 10자: 연결을 원하는 기기를 식별하기 위해 서버로 전송됩니다.
마지막 40자: 최종 암호화 키의 비밀 구성 요소로 사용됩니다. 이 부분은 절대 서버로 전송되지 않습니다.
3. 추가 비밀 요소들
기기(로컬)에서: 기기의 잠금 비밀번호, 전송을 위한 난수, 앱 인스턴스의 고유 ID, 그리고 내장 앱 비밀(솔트).
클라우드(서버)에서: 세션을 위해 서버가 생성한 임시 연결 ID와 또 다른 난수.
요약하면, 이 다중 소스 키 구성은 매우 높은 보안 장벽을 만듭니다. 데이터를 복호화할 가능성을 갖기 위해 공격자는 서버를 동시에 침해(데이터 가로채기, 클라우드 측 키 요소 획득 및 중간자 공격을 통한 ECDHE 키 변조)하고 앱을 화면 캡처(페어링 코드와 다른 로컬 키 요소 탈취)해야 합니다.
방어 및 검증
우리는 공격을 차단하고 사용자가 통제할 수 있도록 여러 적극적인 조치를 사용합니다.
서버 측 보호
무차별 대입 공격 방지:
요청 속도 제한: 단일 기기는 3초에 한 번만 요청할 수 있어 연속 공격을 방지합니다.
시도 제한: 페어링 코드는 10번까지만 시도할 수 있습니다. 10회 실패 후 세션은 종료됩니다.
사용자 제어 검증
잠금 화면 비밀번호 확인
사용자 조치: 전송을 승인하려면 휴대폰 비밀번호를 입력해야 합니다.
중요한 이유: 잠금 해제된 휴대폰을 집어든 사람이 키를 훔쳐가는 것을 방지합니다.
6자리 물리적 확인
사용자 조치: 페어링 후 두 기기 화면에 표시되는 6자리 코드가 일치하는지 직접 확인해야 합니다.
중요한 이유: 이는 중간자 공격을 막습니다. 해커는 두 번째 기기에서 코드를 볼 수 없기 때문에 전송을 완료할 수 없습니다.
일회용 페어링 코드
정의: 페어링 코드는 한 번 성공적으로 사용되면 만료됩니다.
중요한 이유: 이 기능은 '선점 연결' 방어를 제공합니다. 해커가 코드를 훔쳐 먼저 연결하더라도 사용자의 합법적 연결 시도가 해커를 강제로 연결 해제하여 오직 사용자가 진행할 수 있도록 보장합니다.
고급 옵션
오픈소스 코드 덕분에 데이터 전송의 보안과 개인정보 보호를 추가로 강화할 수 있습니다:
서버 자체 호스팅: 서버 코드를 자신의 서버에 배포한 다음 앱에서 '사용자 지정 서버' 옵션을 선택해 연결하세요. 이렇게 하면 데이터에 대한 완전한 통제가 가능합니다.
LAN 전송(곧 제공): 향후 버전에서 OneKey 데스크톱 앱은 로컬 영역 네트워크(LAN) 중계 역할을 할 수 있습니다. 이를 통해 기기들이 공용 인터넷을 거치지 않고 데이터를 전송하여 진정한 물리적 격리를 달성할 수 있습니다.