제퍼넷 로고

Kraken 지갑이 모바일 암호화 보안 문제를 해결하는 방법

시간

우리는 가장 안전한 모바일 암호화폐 지갑은 모바일 운영 체제의 본질적인 제약을 극복하는 지갑이라고 믿습니다. 예를 들어 iOS에서 Apple의 CryptoKit은 다음을 지원하지 않습니다. secp256k1 타원 곡선, 비트코인, 이더리움 및 기타 여러 블록체인의 표준입니다.

이러한 제한으로 인해 개발자는 키 저장 및 거래 서명을 위해 장치의 보안 요소를 활용하는 것을 제한합니다. 결과적으로 모바일 암호화폐 지갑은 인터넷에 연결되어 있고 암호화 알고리즘의 소프트웨어 구현을 사용하여 보안 요소 외부의 거래에 서명하기 때문에 핫 지갑으로 분류됩니다.

이는 적어도 서명 중에 샌드박스 앱 환경의 메모리 내에서 개인 키가 노출되어야 함을 의미합니다. 이로 인해 보안 요소를 사용하여 거래에 서명하는 지갑보다 잠재적인 위협에 더 많이 노출됩니다.

보안 요소에 대한 서명을 직접 수행할 수 없어 보호 수준이 향상되었음에도 불구하고 우리는 오픈 소스 보안, 투명성 및 사용자 제어를 우선시하는 모바일 암호화폐 지갑입니다.

우리의 보안 아키텍처는 다음과 같은 목적으로 구축되었습니다.

  • 다중 블록체인 지원
  • 보안을 강화하는 예측 불가능성의 척도인 높은 엔트로피로 개인 키를 생성합니다.
  • 검증된 암호화를 활용하여 사용자의 개인 키를 안전하게 암호화하고 휴대폰의 보안 하드웨어 및 OS 보안 기능을 활용합니다.
  • 추가적인 암호화 수준을 원하는 고급 사용자를 위해 사용자 생성 비밀번호로 향상된 보안을 제공합니다(복호화 키에 대한 OS 키체인 보호 외에).
  • 하드웨어 지갑 및 MPC 쿼럼 기반 시스템과 같은 새로운 키 관리 유형의 향후 통합을 위한 견고한 기반 구축

오픈소스의 장점

기본적인 보안 원칙 중 하나로, 크라켄 지갑 무료이며 오픈 소스 소프트웨어입니다, 아래에 배포됨 MIT 라이센스. 처음부터 새로운 지갑을 구축하면서 오픈 소스와 분산 생태계를 육성하는 것이 우리에게 중요했습니다.

오픈 소스 코드가 없다면 Kraken Wallet은 투명성 없이 많은 양의 신뢰를 요구할 것입니다. 이렇게 하면 클라이언트에 대한 보호 수준이 낮아집니다. 원하는 경우 클라이언트를 직접 확인, 수정 또는 실행할 수 없습니다. “믿지 말고 검증하라!” 이는 단순한 업계 격언이 아니라 우리의 기본 원칙 중 하나입니다.

당사의 소프트웨어를 오픈 소스화하면 당사가 이 제품에 대해 처음에 설정한 두 가지 기본 목표인 검증 가능하고 감사 가능한 신뢰 최소화가 달성됩니다.

  • 검증 가능성 : 이 블로그 게시물에 제시된 보안 가정이 사실인지 확인하는 기능입니다. 누구나 할 수 있다 소스 코드를 봐 이 지갑에서 수행되는 작업과 수행되지 않는 작업을 구체적으로 이해합니다. 
  • 감사 가능성: 보안 구현의 결과가 올바른지 확인하고 그렇지 않은 경우 다시 보고하는 기능입니다. 우리는 출시 전에 여러 차례 보안 감사를 수행하기 위해 내부 및 외부 팀을 참여시켰습니다. 앞으로는 누구나 코드를 감사하고 결과에 대한 보고서를 생성할 수 있습니다.

키 생성 및 키 가져오기

React Native는 강력한 도구이기는 하지만 암호화 모듈이 내장되어 있지 않습니다. 이 문제를 탐색하기 위해 우리는 NodeJS 암호화 모듈의 pure-js 구현(crypto-browserify)을 사용했습니다. 키 생성 중에 필요한 실제 임의 바이트를 생성하는 crypto.randomBytes() 메서드는 반응 네이티브 가져오기 무작위 값 폴리필.

React-native-get-random-values는 네이티브 코드를 사용하여 장치에서 사용할 수 있는 CSPRNG(Cryptographically Secure Pseudorandom Number Generator)를 활용하여 난수를 생성합니다. 거의 모든 최신 장치에서 이 난수 생성기는 보안 하드웨어 난수 생성기의 지원을 받습니다.

지갑 초기화 중에 CSPRNG에서 엔트로피를 끌어와 잘 설정된 npm 패키지를 사용하여 이를 니모닉 시드로 변환합니다(BIP32, BIP39).

키는 BIP39 표준에 따라 변환, 저장 및 사용자에게 제공됩니다. 이는 생태계의 대부분의 지갑에 대한 상호 운용성을 갖춘 백업하기 쉬운 니모닉 방법을 제공합니다. 가져오기 기능은 생태계에서 최고의 상호 운용성을 제공하는 BIP39 호환 시드 복구를 지원합니다. 

핵심 관리 

크라켄 지갑은 시드와 니모닉이라는 두 가지 비밀 값과 지갑 주소, 지갑 이름, 거래 설명과 같은 비밀이 아닌(여전히 비공개인) 여러 값을 보유하고 있습니다.

개인 키 자료(시드/니모닉)는 키체인(iOS) 및 키스토어(Android)에 저장됩니다. 공개 키 자료와 중요하지 않은 데이터(확장 공개 키, 주소 및 설명)는 애플리케이션의 암호화된 데이터베이스에 저장됩니다(다음을 사용). 왕국).

데이터를 보호하는 여러 보안 제어가 있습니다.

  • 앱 잠금: 키체인 또는 키 저장소에 저장된 무작위로 생성된 64바이트 문자열입니다. 비밀에 대한 액세스는 생체 인식 또는 비밀번호 인증과 같은 사용자 존재 요구 사항으로 보호됩니다.
  • 비밀번호: 사용자가 제공하며 기기에 보관되지 않습니다. 대신, 사용자는 애플리케이션에서 요청할 때마다 수동으로 비밀번호를 제공해야 합니다. 지갑은 키체인이나 키스토어에 저장된 두 개의 플래그(is_storage_encrypted 및 is_seed_encrypted)를 참조하여 비밀번호가 필요한지 여부를 결정합니다. Argon2 알고리즘은 키 유도 함수로 사용됩니다.
  • 데이터베이스 암호화: 데이터베이스(영역)는 비밀이 아닌 데이터를 저장하는 데 사용됩니다. 데이터는 임의의 64바이트 키로 암호화됩니다.
  • 잠금 메커니즘: 잘못된 비밀번호를 입력하면 후속 비밀번호 시도가 이루어지기까지 지연이 발생합니다. 이 메커니즘은 무차별 암호 공격을 효과적으로 방지합니다. 시도 횟수, 지연 기간 등 잠금 매개변수에 관한 정보는 키체인이나 키스토어에 안전하게 저장됩니다.

시드, 니모닉 및 데이터베이스 암호화 키는 항상 암호화된 형태로 저장됩니다.

  • 보호 기능이 활성화되지 않은 경우: 시드, 니모닉, Realm 암호화 키는 사용자 접근 제어 없이 키체인이나 키스토어에 직접 저장됩니다.
  • 앱 잠금이 활성화된 경우: 니모닉과 시드는 먼저 앱 잠금 비밀로 암호화된 후 키체인이나 키스토어에 안전하게 저장됩니다. Realm 암호화 키는 키체인이나 키 저장소에도 직접 저장됩니다.
  • 비밀번호 보호가 활성화된 경우: 니모닉과 시드는 비밀번호로 암호화되는 반면, Realm 암호화 키는 is_storage_encrypted가 true로 설정된 경우에만 비밀번호로 암호화됩니다.
  • 앱 잠금과 비밀번호 보호가 모두 활성화된 경우: 니모닉과 시드는 비밀번호(1차)와 앱 잠금(2차)으로 암호화됩니다. Realm 암호화 키는 is_storage_encrypted가 true로 설정된 경우에만 비밀번호로 암호화됩니다.

키 사용법

시드/니모닉은 키체인 또는 키 저장소에 저장되며 암호화 작업에서 중요한 역할을 합니다. 새로운 지갑 주소를 생성해야 하거나 거래에 서명해야 할 때, 우리는 이 시드에서 개인 키와 같은 필요한 정보를 파생합니다.

그러나 이러한 작업 중에 개인 키가 메모리에 로드되어야 한다는 점에 유의하는 것이 중요합니다. 이러한 필요성은 앞에서 언급한 모바일 지갑의 제약과 거래 서명을 위한 보안 요소에 대한 직접 액세스가 부족하기 때문에 발생합니다.

  • 거래 서명(토큰 보내기)
  • WalletConnect 데이터 서명(세션 요청 처리)
  • 새 지갑 추가
  • 테스트넷 체인 활성화(테스트넷 지갑 추가)
  • 니모닉 표시
  • 니모닉 확인
  • 앱 잠금 활성화 및 비활성화
  • 비밀번호 활성화 및 비활성화

다음 기능에 대해 추가 생체 인증이 수행됩니다.

  • 앱 잠금 활성화
  • 모든 데이터 삭제
  • 지갑(계정) 삭제
  • 비밀번호 활성화 또는 비활성화(앱 잠금 검색에 추가)
  • 애플리케이션 열기
  • 애플리케이션을 포그라운드로 이동
  • 확장 공개 키 보기
  • 분산형 애플리케이션(dApp)에 연결

또한 애플리케이션을 열 때 비밀번호가 필요할 수도 있습니다. 키체인과 키스토어는 항상 다음을 통해 사용됩니다. 반응 네이티브 키체인 싸개:

  • 래퍼는 모든 항목에 대해 키체인 또는 키 저장소에 새 키를 생성합니다.
  • 래퍼는 키체인 및 키 저장소에 대한 올바른 구성 플래그를 전달하는 역할을 담당합니다.
  • 지갑은 항상 키에 액세스하려면 장치를 잠금 해제해야 하도록 플래그를 구성하도록 래퍼에 요청합니다.
  • 사용자 존재(생체 인식) 확인은 시간 기반으로 구성되며 확인은 5초 동안 유효합니다. 사용자 존재 확인은 액세스별로 수행되지 않습니다.

암호화 알고리즘은 모든 항목에 대해 동일합니다.

  • 키는 NFC 정규화된 비밀에서 Argon2id로 파생됩니다.
  • Argon2id의 솔트는 장치의 고유 ID입니다.
  • 암호화 모드는 AES-GCM입니다.
  • AES의 초기화 벡터(IV)는 16개의 임의 바이트입니다.
  • AES의 인증 태그 길이는 16바이트여야 합니다.

거래 서명

키 저장, 생체 인식 및 비밀번호 보호와 관련하여 앞서 언급한 조치 외에도 거래 서명은 지속적인 개선을 위한 중요한 초점 영역으로 남아 있습니다. 초기 단계로 우리는 이 영역에서 다음을 포함하여 몇 가지 주목할만한 조치를 구현했습니다.

거래 시뮬레이션

우리는 외부 API 서비스(예: 복어 및 기타) 거래가 사용자에게 가져올 수 있는 "심각도"의 가능한 수준(위험 점수)을 확인합니다. 이는 가능한 악의적인 거래(또는 메시지 서명)에 대한 전체 블록 화면에서 거래에 서명하거나 확인하기 전에 사용자가 가져야 할 다양한 수준의 주의에 대한 경고로 이어집니다. 

다른 조치는 다음과 같습니다.

  • 잘못된 주소로 보내지 않도록 주소 확인
  • 사용자가 주소 구성과 관련된 특정 공격의 대상이 되지 않도록 항상 전체 주소가 표시되는 주소
  • 사용자가 잘못된 네트워크로 전송하지 않도록 네트워크 유효성 검사 및 경고
  • 사용자가 거래에 대해 초과 지불하지 않도록 수수료 건전성 검사

네트워킹 개인 정보 보호

이 데이터가 네트워크 요청, 특히 제3자 서비스에 유출되지 않는 방식으로 사용자의 개인 정보 및 개인 데이터를 보호하기 위해 요청을 프록시하는 API 게이트웨이를 개발했습니다. 이 프록시를 사용하면 사용자 요청을 제3자 서비스에 전달하지 못하고 클라이언트의 IP를 외부 또는 공개 공급자에게 공개하지 않습니다. 

이 백엔드 서비스는 기본적으로 퍼블릭 블록체인 데이터를 쿼리하기 위한 API입니다. 지갑 보안 아키텍처 내에서 그 목적은 모든 블록체인에 걸쳐 공통 API 뒤에 이 기능을 캡슐화하여 Kraken 지갑이 데이터 쿼리를 위해 블록체인별 동작을 구현할 필요가 없도록 하는 것입니다.

이 백엔드 서비스는 이 공통 API를 정의합니다. 궁극적으로 실제 데이터를 가져오는 다른 당사자에게 요청을 프록시합니다. 블록체인 자체를 색인화하지도 않고 상태를 유지하지도 않습니다.

보안 가정

우리의 보안 아키텍처는 최적의 보호를 위해 몇 가지 주요 가정에 따라 운영됩니다. 우리는 다음과 같이 추정합니다:

  • 사용자의 장치는 루팅되지 않았으며 OS도 오래되지 않았으며 공격자에게 장치 메모리에 대한 액세스 권한을 부여할 수 있는 심각한 취약점에 취약하지도 않았습니다.
  • 키체인 또는 키 저장소 패키지는 충분히 강력한 보호 기능을 제공합니다.
  • 모바일 OS는 앱 프로세스 간에 견고한 샌드박싱을 제공하여 시드와 같은 민감한 데이터가 포함된 메모리가 적절하게 관리되도록 보장합니다.

추가 기능

  • 앱은 지갑을 운영하기 위해 필요한 최소한의 데이터만을 저장하는 원칙으로 운영됩니다.
  • 클라이언트에는 타사 분석 또는 충돌 보고 소프트웨어 개발 키트(SDK)가 사용되지 않습니다.
    • 데이터를 제3자에게 유출하지 않으려는 노력으로 인해 추가 데이터 추적을 포함하는 것은 의미가 없습니다. 즉, 클라이언트에서 분석 또는 충돌 보고 소프트웨어를 찾을 수 없음을 의미합니다.
  • 무선 업데이트(일반 AppStore/Play 스토어 업데이트 흐름 외부)는 코드베이스에서 허용되거나 구현되지 않습니다.
    • 사용자는 사전 동의 없이 업데이트할 수 없는 컴파일된 소프트웨어를 기대할 수 있습니다.
  • 토큰 목록 및 평판 시스템
    • 사용자의 토큰 관리를 돕기 위해 우리는 Kraken 및 기타 제3자가 제공하는 자산을 기반으로 목록 및 평판 시스템을 구현했습니다.
  • NFT 스팸
    • 지속적으로 개선할 계획인 초기 노력은 스팸 및 스팸 관련 공격 탐지로, 스팸은 자동으로 사용자 폴더에 보관됩니다.

외부 보안 감사

자체 보관 지갑의 보안은 업계에서 유명한 보안 감사 회사인 Trail of Bits의 감사를 통해 엄격하게 평가되었습니다. 이 감사에는 잠재적인 보안 취약점을 식별하고 해결하는 것을 목표로 코드베이스와 클라이언트 아키텍처에 대한 자세한 검사가 포함되었습니다.

투명성을 보장하고 플랫폼 보안에 대한 통찰력을 제공하기 위해 이 감사 결과는 공개적으로 제공됩니다. 이러한 공개 액세스를 통해 사용자와 이해관계자는 Trail of Bits가 수행한 보안 분석 결과를 검토할 수 있습니다. 이 보고서는 우리가 시행하고 있는 보안 조치와 사용자를 위한 안전한 환경을 유지하려는 우리의 약속을 이해하는 데 중요한 리소스 역할을 합니다.

보안, 투명성 및 사용자 제어 우선순위

크라켄 지갑은 플랫폼 고유의 제약에도 불구하고 편의성과 강력한 보호 사이에서 미묘한 균형을 유지합니다. 우리의 접근 방식은 항상 널리 인정받는 상호 운용 가능한 지갑 구조에서 시작되었습니다. 이 견고한 기반은 사용자에게 암호화폐 자산을 자체 관리할 수 있도록 끊임없이 진화하는 최고 수준의 보안 솔루션을 제공한다는 목표로 혁신하고 새로운 기능을 추가할 수 있는 기반을 마련합니다.

이러한 자료는 일반 정보 제공 목적으로만 제공되며 투자 조언이나 암호화폐 구매, 판매, 스테이크 또는 보유 또는 특정 거래 전략 참여에 대한 권장 또는 권유가 아닙니다. 크라켄은 제공하는 특정 암호화폐의 가격을 높이거나 낮추기 위해 노력하지 않으며 앞으로도 그렇게 하지 않을 것입니다. 일부 암호화폐 제품 및 시장은 규제되지 않으며, 귀하는 정부 보상 및/또는 규제 보호 제도로 보호받지 못할 수도 있습니다. 암호화폐 시장의 예측 불가능한 특성으로 인해 자금 손실이 발생할 수 있습니다. 세금은 귀하의 암호화폐 자산 가치 상승 및/또는 신고에 대해 납부될 수 있으며, 귀하는 귀하의 과세 입장에 대해 독립적인 조언을 구해야 합니다. 지리적 제한이 적용될 수 있습니다.

spot_img

최신 인텔리전스

spot_img