Tangem Wallet의 프라이빗 키 백업 방식

Author logo
Andrey Lazutkin
Post image

암호화폐 지갑을 분실해도 자산 접근 권한을 잃지 않으려면 프라이빗 키를 복사해 백업해 두는 것이 중요해요. 일반적으로 시드 구문(시드 문구)을 사용해 백업하지만, 누구든 시드 구문을 손에 넣으면 자산을 가져갈 수 있기 때문에 매우 위험해요.
 

이 때문에 Tangem Wallet은 안전한 프라이빗 키 복제(클로닝) 방식을 제공해요. 프라이빗 키를 한 장 또는 두 장의 백업 Tangem Card로 복제할 수 있어, 카드 중 하나를 잃어버리거나 도난당해도 걱정하지 않아도 돼요.

그렇다면 이 백업 방식은 얼마나 안전할까요? Tangem Wallet이 어떻게 이를 구현하는지 살펴볼게요.
 

프라이빗 키 생성 과정

활성화 전에는 Tangem Wallet에 프라이빗 키(Kpriv, 다이어그램 참고)가 존재하지 않아요. Tangem Wallet을 구매하면 아직 활성화되지 않은 패키지를 받게 되고, 이때는 프라이빗 키도 없기 때문에 전 세계 어디에도 복사본이 존재하지 않는다는 점을 확실히 알 수 있어요. 존재하지 않는 것은 복사할 수 없으니까요.
 

지갑을 활성화할 때 Tangem 칩이 인증된 하드웨어 난수 생성기(TRNG)가 만든 숫자 시퀀스를 바탕으로 새로운 프라이빗 키를 생성해요(다이어그램 참고). 이 과정이 궁금하다면 아래 글을 참고해 주세요. 시드 구문이 있을 때와 없을 때 암호화폐 지갑의 프라이빗 키 생성 방법.

이 단계에서는 프라이빗 키가 단 하나만 존재해요. 이후 안전하게 백업을 위해 한두 개의 복사본을 만들어야 해요.

백업 준비 과정

백업 과정에서는 프라이빗 키가 다른 카드로 안전하게 전달되어야 하며, 사용자는 프라이빗 키 복사본의 개수를 완전히 통제할 수 있어야 해요.

이 때문에 프라이빗 키 백업 과정은 두 가지 단계로 나뉘어요:

  1. 먼저, 키가 다른 Tangem Card로 제대로 전달됐는지 확인해야 해요.
     
  2. 전송 중에는 키가 가로채기 당하지 않도록 보호되어야 하며, 이를 위해 키는 암호화되어 오직 수신 카드만 복호화할 수 있어야 해요.

카드가 제조될 때 칩은 자체 키 쌍을 생성해요: Kcardpriv (프라이빗 키)와 Kcardpub (퍼블릭 키). 이 키들은 각 카드마다 고유하며, 향후 지갑 사용자의 지갑과는 연결되어 있지 않아요. 이 키들은 Tangem에서 제조된 정품 카드임을 증명하고 앱에 알려주기 위해 필요해요.

이 키 쌍의 퍼블릭 키는 Tangem이 제조사 프라이빗 키 KTangempriv로 서명해요. 이렇게 생성된 Cert_Card 인증서는 카드의 진위를 검증하는 데 사용돼요.

제조사 퍼블릭 키 KTangempub도 칩에 기록돼요. 이 키는 모든 카드에서 동일하며, 소스 카드와 목적지 카드 간의 '신뢰 체인'의 출발점이 돼요.

 

How Tangem Wallet backs up private keys

 

첫 번째 단계: 상호 인증

백업 과정에서 각 카드는 상대 카드가 진짜 Tangem Wallet 카드임을 확인해야 해요. 이를 위해 카드의 키와 서명을 바탕으로 암호학적 '신뢰 체인'을 구축해요.

활성화 시 각 카드는 다른 카드와 통신하기 위해 일회용 키 쌍 KlinkpubKlinkpriv를 생성하고, 이 쌍의 퍼블릭 키를 자신의 Kcardpriv로 서명해 Sign_Attest 서명을 만들어요.

 

How Tangem Wallet backs up private keys_2

이후 카드는 Sign_Attest, Klinkpub, Kcardpub 정보를 상대 카드로 전송해요.

이 과정에서 KTangempub — Kcardpub — Klinkpub 순서의 신뢰 체인이 만들어져요. 모든 카드는 제조사 퍼블릭 키 KTangempub,를 알고 있으며, 이를 통해 Cert_Card 인증서를 검증해요. 인증서가 상대 카드의 Kcardpub과 일치하면, 해당 키로 그 카드의 Sign_Attest 서명을 검증할 수 있어요. 

 

Sign_Attest가 상대 카드의 Klinkpub과 일치하면, 통신 채널 반대편 카드가 실제 Tangem에서 생산된 것이며 누구도Klinkpub 키를 변경하지 않았다는 의미예요. 이 키는 공유 Ktrans 백업 키를 계산하는 데 사용돼요.

NEW_03_en.png

두 번째 단계: 공유 암호화 키 생성

이제 두 카드는 소스 카드가 사용자의 프라이빗 키를 암호화하고, 목적지 카드는 이를 복호화할 수 있도록 공유 대칭 키 Ktrans를 생성해야 해요. 카드 간 통신은 신뢰할 수 없는 기기를 통해 이뤄지기 때문에, 한 카드에서 키를 만들어 다른 카드로 단순히 전송하는 것은 불가능해요. 이 문제는 Diffie–Hellman 키 교환 프로토콜로 해결돼요.
 

카드들은 방금 검증된 Klinkpub 키를 교환했고, 각 카드는 자신의 Klinkpriv와 상대 카드의 Klinkpub을 이용해 동일한 대칭 Ktrans 암호화 키를 생성해요. 이로써 두 카드 모두 같은 키를 얻게 돼요. 이것이 바로 Diffie–Hellman 방식의 핵심이에요.
 

만약 공격자가 사용자의 휴대폰을 장악해 카드 간 교환을 '도청'하더라도, KlinkpubKcardpub 퍼블릭 키 정보만 알 수 있어요. 이 정보만으로는 Ktrans를 생성할 수 없으므로, 공격자는 프라이빗 키에 접근할 수 없어요.

 

How Tangem Wallet backs up private keys_3

 

암호화된 키 교환

얻어진 Ktrans 대칭 키를 사용해, 첫 번째 카드는 사용자의 프라이빗 키와 접근 코드, 프라이빗 키 백업 개수(2장 또는 3장)를 포함한 데이터 세트를 암호화해요. 
 

카드는 암호화된 ENC 메시지를 두 번째 카드로 전송하고, 두 번째 카드는 동일한 Ktrans로 이를 복호화해요. 이때 누군가 ENC 메시지를 가로채더라도, Ktrans 키 없이는 패키지를 해독할 수 없으니 정보를 알 수 없어요.
 

How Tangem Wallet backs up private keys_4

세 번째 카드 백업도 동일한 절차로 진행되지만, 이때는 카드가 새로운 Klink 쌍을 생성하므로 Ktrans 키도 두 번째 카드 때와 달라져요.


Tangem 칩 펌웨어는 한 번의 백업만 허용해요. 프라이빗 키를 주거나 받은 뒤에는 카드가 더 이상 백업 절차를 시작하지 않으며, 프라이빗 키는 복구할 수 없게 돼요.
 

Tangem Wallet에서 공장 초기화를 실행하면 칩이 Kpriv 키를 잊어버려요. 이후 지갑을 다시 활성화해 새로운 키를 생성하고 새 백업을 완료할 수 있지만, 이전 키는 초기화 후 완전히 삭제돼요.

Author logo
작가 Andrey Lazutkin

Chief Technology Officer at Tangem.

Author logo
검토자: Andrey Lazutkin

Chief Technology Officer at Tangem.