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 암호화 키를 생성해요. 이처럼 두 카드 모두 같은 Ktrans 키를 얻게 돼요. 이것이 Diffie–Hellman 프로토콜의 원리예요.
 

만약 공격자가 사용자의 휴대폰을 장악해 카드 교환을 '도청'하더라도, KlinkpubKcardpub 공개 키만 알 수 있어요. 이 키들만 카드 간에 전송되고, Klinkpriv 키는 외부에 노출되지 않으니, 공격자는 동일한 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.