Как резервируется приватный ключ в Tangem Wallet

Чтобы не потерять доступ к криптовалюте в случае, если вы утратите ваш криптокошелек, приватный ключ надо забэкапить (сделать резервные копии). Обычно эту задачу решают с помощью seed-фразы. Но это крайне небезопасно — seed-фразой может воспользоваться любой человек, которому она попадет в руки.

Поэтому в Tangem Wallet предусмотрена технология защищенного клонирования приватного ключа. Вы можете склонировать ваш приватный ключ на вторую и третью карту Tangem и не беспокоиться об утере или краже одной из карт.

Но безопасен ли такой способ бэкапа? Давайте разберемся, как это работает в Tangem Wallet.

Создание приватного ключа

Изначально, до активации, в кошельке Tangem приватного ключа (K PRIV на схеме) нет. Покупатель получает неактивированный Tangem Wallet, в котором еще не появился приватный ключ, и поэтому может быть уверен, что никаких «неучтенных» экземпляров ключа в природе нет. Невозможно скопировать то, чего еще не существует.

В процессе активации кошелька чип Tangem создает новый приватный ключ на основе числовой последовательности, полученной от сертифицированного аппаратного генератора случайных чисел (TRNG на схеме). Как это происходит, мы уже писали в статье « Как создается приватный ключ в кошельках с seed-фразой и без нее ».

На этом этапе существует только один экземпляр приватного ключа. Но нужно еще создать несколько копий — то есть сделать бэкап. И сделать его следует безопасно.

Подготовка к бэкапу

В процессе бэкапа надо передать приватный ключ на другие карты так, чтобы его нельзя было украсть и чтобы пользователь полностью контролировал количество существующих копий своего приватного ключа.

Поэтому резервирование приватного ключа содержит две подзадачи:

  • нужна абсолютная уверенность в том, что ключ будет передаваться именно на другую карту Tangem;
  • следует защитить ключ от перехвата в процессе передачи, для этого его надо зашифровать так, чтобы расшифровать могла только карта-приемник.

Когда карту изготавливают на фабрике, чип генерирует собственную ключевую пару из закрытого ключа Kcard priv и открытого ключа Kcard pub . Эти ключи уникальны для каждой карты. Они никак не связаны с кошельком будущего пользователя карты и нужны только для того, чтобы карта могла доказать свою аутентичность — то есть, что ее выпустил именно Tangem.

Открытый ключ из этой пары Tangem подписывает закрытым ключом производителя KTangem priv . Получившийся сертификат Cert_Card в дальнейшем используется для валидации карты.

Также в чип записывается открытый ключ производителя KTangem pub . Этот ключ один для всех карт, начиная с него, каждая карта выстраивает «цепочку доверия» от себя до другой карты.

NEW_01.png

Задача первая: взаимная аутентификация

Чтобы каждая карта во время процедуры бэкапа была «уверена» в том, что на той стороне находится настоящая карта Tangem, между ними нужно выстроить криптографическую «цепочку доверия» из ключей и подписей к ним.

Во время активации каждая карта создает одноразовую ключевую пару для связи — Klink pub и Klink priv — и открытый ключ из этой пары подписывает своим закрытым ключом Kcard priv , получая в результате подпись Sign_Attest.

NEW_02_ru.png

После этого карта отправляет другой карте Sign_Attest, Klink pub и Kcard pub .

В итоге выстраивается такая цепочка доверия: KTangem pub — Kcard pub — Klink pub . Открытый ключ производителя KTangem pub известен каждой карте. Им карта проверяет сертификат Сеrt_Card другой карты, и если он соответствует Kcard pub другой карты, то этим Kcard pub она проверяет подпись Sign_Attest другой карты. Если Sign_Attest соответствует Klink pub другой карты, значит на той стороне канала находится настоящая карты Tangem, ее ключ Klink pub никто не подменил, и его можно использовать для вычисления общего ключа бэкапа Ktrans.

NEW_03_ru.png

Задача вторая: получение общего ключа шифрования

На этом этапе обеим картам нужно сгенерировать общий симметричный ключ Ktrans, которым карта-источник будет шифровать приватный ключ пользователя, а карта-приемник — расшифровывать. Так как канал связи между ними обеспечивает недоверенное устройство, то просто сгенерировать ключ в одной карте и передать его другой нельзя. Поэтому для решения этой задачи используется протокол Диффи-Хеллмана.

Напомним, карты только что обменялись ключами Klink pub , которые проверили и которым доверяют. Каждая карта из своего Klink priv и Klink pub другой карты генерирует симметричный ключ шифрования Ktrans, и у обеих карт он оказывается одинаковым! Так работает магия протокола Диффи-Хеллмана .

Причем если некий злоумышленник перехватит контроль над телефоном и сможет «подслушать» обмен карт, он узнает всего-то открытые ключи Klink pub и Kcard pub , так как карты передают только их. Закрытые ключи Klink priv ему не получить — а значит, сгенерировать такой же Ktrans у него не получится.

NEW_04_ru.png

Шифрованная передача ключа

Получившимся симметричным ключом Ktrans первая карта шифрует набор данных, в который входит приватный ключ пользователя, заданный пользователем код доступа и количество бэкапов приватного ключа (2 либо 3). Полученную зашифрованную посылку ENC карта передает второй карте, которая расшифровывает ENC тем же Ktrans. Если в этот момент кто-либо сумеет перехватить ENC, это ничего ему не даст — Ktrans он не знает и расшифровать посылку не сможет.

NEW_05_ru.png

При выполнении бэкапа на третью карту вся процедура точно такая же — но при этом карты генерируют новые пары Klink, и поэтому Ktrans тоже получается другой, нежели при бэкапе на вторую карту.

В прошивку чипа Tangem заложено выполнение одного бэкапа. То есть отдав либо получив приватный ключ, карта больше не будет участвовать в процедуре бэкапа. Приватный ключ становится неизвлекаемым.

Конечно же, если вы выполните сброс кошелька Tangem на заводские настройки, чип забудет K priv , и кошелек можно будет заново активировать, создать новый ключ и выполнить бэкап. Но прежний ключ после сброса настроек будет уничтожен.

Заказ в один клик

Я ознакомлен и согласен с условиями оферты и политики конфиденциальности.