Tangem: пластиковая карта — железный сейф. Как работает Tangem (две модели кошелька) и что происходит внутри — от энтропии до адреса 🔐🪪
Tangem — как работает аппаратный карточный кошелёк: режимы, безопасность и путь от энтропии до адреса
Введение — что это за кошелёк и почему он особенный
Tangem — это аппаратный криптокошелёк в форм-факторе банковской карты. По сути, Tangem — это мини-HSM (Hardware Security Module) с NFC-интерфейсом: в карте находится сертифицированный Secure Element, который генерирует, хранит и использует приватные ключи так, чтобы эти ключи никогда не покидали чип. Приложение на телефоне — это визуальный интерфейс и «мост» к карте: оно предлагает адреса, показывает балансы и формирует транзакции, а карта подписывает их внутри себя.
Два способа работы с Tangem: с сид-фразой и без неё — что выбрать и почему
1) Режим по умолчанию — без видимой сид-фразы (максимальная физическая безопасность) 🟢
- Как работает: карта генерирует ключи внутри Secure Element (SE) с помощью аппаратного генератора случайных чисел (TRNG). Приватный ключ хранится только в SE и не может быть считан или экспортирован.
- Плюсы: высокий уровень защиты — даже если устройство заражено, приватный ключ не передаётся. Упростённое использование: нет необходимости хранить или запоминать слова.
- Минусы: потеря карты (и всех запасных карт, если они не были сделаны) означает потерю доступа к средствам — восстановление невозможно.
- Когда подходит: для холодного хранения, когда вы готовы полагаться на физическую сохранность карты и/или комплект резервных карт (2/3 и т.п.).
2) Режим с импортом/использованием BIP-39 сид-фразы (совместимость и восстановление) 🟡
- Как работает: пользователь вводит или импортирует BIP-39 фразу (12/24 слова) — эта фраза может быть сгенерирована им заранее или сгенерирована в другом кошельке. Tangem записывает необходимые ключи/seed внутрь SE и использует их для подписей.
- Плюсы: возможность восстановления кошелька в других кошельках (Electrum, MetaMask и т. п.) и гибкость (можно перенести seed на другой носитель). Подходит для пользователей, которым нужна совместимость.
- Минусы: безопасность теперь зависит от того, как ты хранишь сид-фразу — если она окажется в облаке/на фото/в буфере обмена, риск компрометации растёт.
- Когда подходит: если нужна возможность восстановления без физического носителя или совместимость с другими программными/аппаратными кошельками.
Выбор между режимами — это компромисс: либо максимальная физическая защита (нет выводимой сид-фразы), либо восстановимость и совместимость (импорт BIP-39). Для больших сумм часто рекомендуют комбинировать: Tangem + резервная бумажная/металлическая запись seed, либо мультиподпись / аппаратные решения.
Как это работает внутри Tangem — от энтропии до адреса (технический пошаговый разбор)
Я опишу общий, но точный рабочий процесс для аппаратного кошелька типа Tangem. Небольшие вариации возможны в зависимости от прошивки/версии SE, но основные этапы стандартны для современных Secure Element-устройств.
1) Источник энтропии — TRNG (аппаратный генератор случайных чисел)
При создании нового ключа SE использует TRNG — аппаратный источник энтропии, основанный на физических явлениях (шумы, дифракции, джиттер тактового генератора и т.п.). Это не программный PRNG: результат трудно предсказать и воспроизвести извне.
2) Формирование начального секрета — seed / приватный скаляр
- В режиме «без сид-фразы» SE напрямую из энтропии формирует приватный ключ (например, 256-битное число для secp256k1) или мастер-seed, из которого затем выводятся child-keys.
- В режиме «импорт сид-фразы» SE принимает BIP-39 фразу и, при необходимости, BIP39 passphrase, из которых методом PBKDF2/HMAC формируется seed; затем — BIP-32/BIP-44 деривация для получения приватного ключа.
3) Хранение в Secure Element — внутренняя структура
SE хранит:
- приватный ключ или защищённый seed;
- уникальный идентификатор карты (Card ID) и сертификаты производителя;
- метаданные (версия прошивки, счётчики операций, настройки защиты);
- возможные флаги/параметры derivation path, если seed импортирован.
4) Получение публичного ключа
Когда нужно показать адрес или публичный ключ, SE вычисляет публичный ключ по формуле эллиптической криптографии:
Pub = Priv * G
где G — базовая точка кривой (например, secp256k1). Вычисление происходит внутри SE; публичный ключ может быть возвращён в сжатом или несжатом виде в зависимости от сети.
5) Преобразование публичного ключа в адрес — правила для разных сетей
Каждая сеть использует свой набор алгоритмов хеширования и кодирования. Примеры:
- Bitcoin (legacy/P2PKH): SHA-256 → RIPEMD-160 → Base58Check.
- Bitcoin (SegWit/bech32): HASH160 → Bech32 (segwit HRP), контролируемая версия выхода.
- Ethereum: берётся 64-байтовый (uncompressed) публичный ключ → keccak256 → последние 20 байт → hex с префиксом 0x.
- Kaspa (пример): публичный ключ → Blake2b-256 (или другой хеш, указан в спецификации) → Bech32m кодирование → адрес. (Точная цепочка алгоритмов — по спецификации Kaspa.)
Итог: SE возвращает публичный ключ, приложение применяет сетевые правила (хеши/кодирование) и формирует отображаемый адрес.
6) Подпись транзакции — реальный flow
- Пользователь формирует транзакцию в приложении (адрес получателя, сумма, fee).
- Приложение показывает подробности транзакции для подтверждения пользователю.
- После подтверждения приложение шлёт на карту запрос на подпись (через NFC — APDU или собственный протокол).
- SE выполняет проверку (запрошенная операция допустима? нужен ли PIN / passphrase?).
- SE подписывает хеш транзакции приватным ключом внутри себя и возвращает только подпись.
- Приложение собирает полную транзакцию (с подписью) и отправляет её в сеть через RPC/узел.
Ключевой момент: приватный ключ никогда не покидает SE — только подпись передаётся наружу.
7) Импорт и derivation path — совместимость с другими кошельками
Если ты импортировал BIP-39 seed, то для получения тех же адресов в другом кошельке необходимо совпадение derivation path (BIP44/BIP84/BIP49 и т.д.). Некоторые реализации автоматически подбирают распространённые пути, но лучше явно знать путь, который использует Tangem (или исходный кошелёк).
8) Аппаратные и протокольные защиты
- Физическая защита SE: устойчивость к чтению/извлечению ключей, защита от глодирования.
- Анти-клонирование: заводские сертификаты и подписи, которые приложение проверяет.
- Ограничения команд: SE может иметь счётчики, лимиты, требовать PIN/PASS.
- Подпись обновлений: прошивка обновляется подписанными пакетами (в идеале) — проверка подписи перед применением.
Псевдо-псевдо-код: приватный ключ → публичный → адрес (упрощённо)
// упрощённая последовательность (псевдокод)
priv = TRNG_generate_256bit() // внутри SE
pub = EC_mult(priv, G) // публичный ключ
if chain == "ethereum":
address = "0x" + keccak256(pub_uncompressed)[-20:]
elif chain == "bitcoin-segwit":
pk_hash = HASH160(pub)
address = bech32_encode(hrp, witness_version, pk_hash)
elif chain == "kaspa":
hashed = blake2b256(pub)
address = bech32m_encode(kaspa_hrp, hashed)
return address
Этот код — не реальная реализация, но отражает последовательность шагов: генерация приватного ключа → вычисление публичного → применение хеша + кодирования → адрес.
Практическая проверка и рекомендации (как убедиться, что всё честно и безопасно)
- Проверка адреса: сгенерируй адрес в Tangem, затем с помощью оффлайн-инструмента (или другого известного кошелька) выведи адрес по тому же приватному ключу/seed. Они должны совпасть.
- Если импортировал seed: проверь derivation path; импортируй фразу в тестовый кошелёк и сравни адреса и первые транзакции.
- Физическая защита: для больших сумм используй несколько карт (резервные карты), хранение в разных местах, или мультиподпись/аппаратные решения.
- Используй passphrase (BIP39 passphrase), если хочешь добавить ещё один секрет.
- Не хранить seed в цифровом виде: ни фото, ни облако, ни заметки. Лучше металл/бумага в надёжном месте.
- Передавай на подпись только подтверждённые транзакции: проверяй сумму и адрес на экране перед подписью.
Частые вопросы — быстрые ответы
Q: Если украдут карту, смогут ли снять деньги?
A: Если карта не защищена PIN/PASS и у вора есть доступ к NFC и приложению — да, он сможет подписывать транзакции. Если включена passphrase/PIN — нет (пока он не знает секреты).
Q: Можно ли экспортировать приватный ключ из Tangem?
A: Нет. Tangem и похожие SE-устройства специально проектируются так, чтобы приватный ключ оставался внутри и быть неопционально экспортируемым.
Q: Если я импортировал seed в Tangem, кто его генерирует — я или карта?
A: Если ты вводил seed — он твой. Tangem просто получает и хранит его внутри SE. Если же ты создал кошелёк «по умолчанию», seed/priv генерируется картой (TRNG) и не отображается.
Выводы — кратко и по существу
Tangem — это аппаратный защитный слой: карта сама генерирует/хранит приватные ключи и подписывает транзакции внутри чипа. У тебя есть выбор: либо довериться физическому хранению ключа (нет видимой сид-фразы) — высшая степень аппаратной безопасности, либо использовать BIP-39 seed для восстановления и совместимости. Правильный выбор зависит от задач: долгосрочное холодное хранение, совместимость, удобство восстановления. В любом случае, для крупных сумм стоит сочетать аппаратные меры (резервные карты, мультиподпись) и надёжное офлайн-хранение сид-фразы.
Дополнительные материалы и чек-лист (коротко для распечатки)
- Если создаёшь кошелёк на Tangem без сид-фразы — сделай 2–3 карты и храни их раздельно.
- Если импортируешь BIP-39 сид — сохраните его на металле/бумаге в 2 надёжных местах.
- Включи BIP39 passphrase, если готов хранить ещё один секрет.
- Перед крупной операцией протестируй процесс на малой сумме.
- Не сохраняй seed в цифровом виде и не копируй из буфера обмена на подключённом к интернету устройстве.