MegaSapiens / field

Birthplace of new ilicoins
Other
0 stars 0 forks source link

Верификация пользователей #4

Open STK-bot opened 9 hours ago

STK-bot commented 9 hours ago

Для реализации идентификации пользователя через его крипто-кошелек можно использовать несколько подходов. Давайте рассмотрим один из возможных вариантов реализации с использованием Python и Flask.

Шаг 1: Настройка проекта

Сначала установим необходимые зависимости:

pip install flask cryptography

Шаг 2: Реализация крипто-кошелька

Создадим класс для представления крипто-кошелька:

from cryptography.hazmat.primitives import serialization
from cryptography.hazmat.primitives.asymmetric import rsa
from cryptography.hazmat.backends import default_backend

class CryptoWallet:
    def __init__(self):
        self.private_key = None
        self.public_key = None

    def generate_keys(self):
        private_key = rsa.generate_private_key(
            public_exponent=65537,
            key_size=2048,
            backend=default_backend()
        )

        self.private_key = private_key
        self.public_key = private_key.public_key()

    def save_keys(self):
        pem_private = self.private_key.private_bytes(
            encoding=serialization.Encoding.PEM,
            format=serialization.PrivateFormat.PKCS8,
            encryption_algorithm=serialization.NoEncryption()
        )

        pem_public = self.public_key.public_bytes(
            encoding=serialization.Encoding.PEM,
            format=serialization.PublicFormat.SubjectPublicKeyInfo
        )

        # Здесь можно сохранить ключи в файл или базу данных
        print(f"Private key:\n{pem_private}")
        print(f"Public key:\n{pem_public}")

    def load_keys(self):
        # Здесь можно загрузить ключи из файла или базы данных
        pass

Шаг 3: Реализация идентификации пользователя

Теперь реализуем функционал для идентификации пользователя:

from flask import Flask, request, jsonify
import jwt

app = Flask(__name__)
app.config['SECRET_KEY'] = 'your-secret-key'

crypto_wallet = CryptoWallet()

@app.route('/generate_keys')
def generate_keys():
    crypto_wallet.generate_keys()
    crypto_wallet.save_keys()
    return jsonify({'message': 'Keys generated successfully'}), 200

@app.route('/identify_user', methods=['POST'])
def identify_user():
    data = request.json
    private_key = data.get('private_key')

    if not private_key:
        return jsonify({'error': 'Private key is required'}), 400

    try:
        # Здесь мы предполагаем, что пользователь уже зарегистрирован
        # и у него есть связанный публичный ключ

        # Проверяем совместимость ключей
        public_key = crypto_wallet.public_key.public_bytes(
            encoding=serialization.Encoding.PEM,
            format=serialization.PublicFormat.SubjectPublicKeyInfo
        )

        # Здесь можно добавить дополнительную проверку, например, сравнение хешей ключей
        if public_key == private_key:
            # Генерируем JWT токен
            token = jwt.encode({'id': 'user_id'}, app.secret_key, algorithm='HS256')
            return jsonify({'token': token}), 200
        else:
            return jsonify({'error': 'Invalid key'}), 401
    except Exception as e:
        return jsonify({'error': str(e)}), 500

Шаг 4: Использование идентификации пользователя

Теперь пользователь может использовать этот API для генерации ключей и идентификации:

import requests

def generate_and_identify():
    # Генерация ключей
    response = requests.post('http://localhost:5000/generate_keys')
    print(response.json())

    # Идентификация пользователя
    private_key = """-----BEGIN PRIVATE KEY-----
MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQC...
-----END PRIVATE KEY-----"""
    response = requests.post('http://localhost:5000/identify_user', json={'private_key': private_key})
    print(response.json())

generate_and_identify()

Ключевые моменты реализации:

  1. Мы используем библиотеку cryptography для работы с криптовалютными ключами.
  2. Пользователи могут генерировать свои пары ключей через API.
  3. При попытке идентификации система проверяет совместимость ключей.
  4. Если ключи совместимы, система генерирует JWT токен для дальнейшего использования.

Лучшие практики:

  1. Хранение приватных ключей безопасно. Никогда не передавайте приватный ключ клиенту.
  2. Добавьте дополнительные меры безопасности, такие как двuetапное подтверждение или биометрические данные.
  3. Реализуйте систему регистрации пользователей и связывания ключей с аккаунтами.
  4. Используйте HTTPS для шифрования данных при передаче между клиентом и сервером.
  5. Регулярно обновляйте секретный ключ Flask для повышения безопасности.

Этот пример демонстрирует базовую структуру реализации идентификации пользователя через его крипто-кошелек. В реальном проекте вам потребуется дополнить эту функциональность, добавив обработку ошибок, логирование, аутентификацию и авторизацию, а также интеграцию с вашей существующей системой.

Citations: [1] https://blog.typingdna.com/crypto-wallet-two-factor-authentication-python-flask/ [2] https://www.youtube.com/watch?v=jEDfbCADGc4 [3] https://developer.algorand.org/solutions/creating-a-demo-wallet-using-flask/ [4] https://www.youtube.com/watch?v=71EU8gnZqZQ&pp=ygUPI2ZsYXNrZGlyZWN0b3J5 [5] https://flask.palletsprojects.com/ [6] https://www.youtube.com/watch?v=CSHx6eCkmv0 [7] https://www.youtube.com/watch?v=UIJKdCIEXUQ [8] https://flask-user.readthedocs.io/

STK-bot commented 9 hours ago

Для реализации идентификации пользователя через его крипто-кошелек с использованием BIP-39 в Python с Flask, можно следующим образом:

Шаг 1: Настройка проекта

Сначала установим необходимые зависимости:

pip install flask cryptography python-bip39

Шаг 2: Реализация крипто-кошелька с BIP-39

Создадим класс для представления крипто-кошелька с использованием BIP-39:

from flask import Flask, request, jsonify
from cryptography.hazmat.primitives import serialization
from cryptography.hazmat.backends import default_backend
from bip39 import generate_mnemonic, encode_mnemonic, decode_mnemonic

app = Flask(__name__)

class CryptoWallet:
    def __init__(self):
        self.private_key = None
        self.public_key = None
        self.mnemonic = None

    def generate_keys(self):
        mnemonic = generate_mnemonic(256)
        words = encode_mnemonic(mnemonic)

        private_key = self.derive_private_key(words)
        public_key = self.derive_public_key(private_key)

        self.mnemonic = mnemonic
        self.private_key = private_key
        self.public_key = public_key

    def derive_private_key(self, mnemonic):
        # Здесь реализуйте логику получения приватного ключа из словряда
        pass

    def derive_public_key(self, private_key):
        # Здесь реализуйте логику получения публичного ключа из приватного
        pass

@app.route('/generate_wallet', methods=['POST'])
def generate_wallet():
    crypto_wallet = CryptoWallet()
    crypto_wallet.generate_keys()
    return jsonify({
        'mnemonic': crypto_wallet.mnemonic,
        'private_key': crypto_wallet.private_key.hex(),
        'public_key': crypto_wallet.public_key.public_bytes(
            encoding=serialization.Encoding.PEM,
            format=serialization.PublicFormat.SubjectPublicKeyInfo
        ).decode('utf-8')
    }), 200

Шаг 3: Реализация идентификации пользователя

Теперь реализуем функционал для идентификации пользователя:

@app.route('/identify_user', methods=['POST'])
def identify_user():
    data = request.json
    mnemonic = data.get('mnemonic')

    if not mnemonic:
        return jsonify({'error': 'Mnemonic is required'}), 400

    try:
        decoded_mnemonic = decode_mnemonic(mnemonic.split())
        crypto_wallet = CryptoWallet()
        crypto_wallet.mnemonic = mnemonic

        # Проверяем совместимость ключей
        # Здесь можно добавить дополнительную проверку, например, сравнение хешей ключей
        if crypto_wallet.validate_mnemonic():
            # Генерируем JWT токен
            token = jwt.encode({'id': 'user_id'}, app.secret_key, algorithm='HS256')
            return jsonify({'token': token}), 200
        else:
            return jsonify({'error': 'Invalid mnemonic'}), 401
    except Exception as e:
        return jsonify({'error': str(e)}), 500

@app.route('/validate_mnemonic', methods=['POST'])
def validate_mnemonic():
    data = request.json
    mnemonic = data.get('mnemonic')

    if not mnemonic:
        return jsonify({'error': 'Mnemonic is required'}), 400

    try:
        decoded_mnemonic = decode_mnemonic(mnemonic.split())
        crypto_wallet = CryptoWallet()
        crypto_wallet.mnemonic = mnemonic

        return jsonify({'valid': crypto_wallet.validate_mnemonic()}), 200
    except Exception as e:
        return jsonify({'error': str(e)}), 500

def validate_mnemonic(self):
    # Здесь реализуйте логику проверки корректности словряда
    pass

Шаг 4: Использование идентификации пользователя

Теперь пользователь может использовать этот API для генерации кошелька и идентификации:

import requests

def generate_and_identify():
    # Генерация кошелька
    response = requests.post('http://localhost:5000/generate_wallet')
    print(response.json())

    # Идентификация пользователя
    mnemonic = """word1 word2 word3 word4 word5 word6 word7 word8 word9 word10 word11 word12 word13 word14 word15 word16 word17 word18 word19 word20 word21 word22 word23 word24"""
    response = requests.post('http://localhost:5000/identify_user', json={'mnemonic': mnemonic})
    print(response.json())

generate_and_identify()

Ключевые моменты реализации:

  1. Мы используем библиотеку python-bip39 для работы с словрядами BIP-39.
  2. Пользователи могут генерировать свои пары ключей через API.
  3. При попытке идентификации система проверяет корректность словряда.
  4. Если слова в словряде корректны, система генерирует JWT токен для дальнейшего использования.

Лучшие практики:

  1. Хранение приватных ключей безопасно. Никогда не передавайте приватный ключ клиенту.
  2. Добавьте дополнительные меры безопасности, такие как двuetапное подтверждение или биометрические данные.
  3. Реализуйте систему регистрации пользователей и связывания словрядов с аккаунтами.
  4. Используйте HTTPS для шифрования данных при передаче между клиентом и сервером.
  5. Регулярно обновляйте секретный ключ Flask для повышения безопасности.
  6. Реализуйте механизм восстановления доступа к кошельку на основе частичного словряда.

Этот пример демонстрирует базовую структуру реализации идентификации пользователя через его крипто-кошелек с использованием BIP-39. В реальном проекте вам потребуется дополнить эту функциональность, добавив обработку ошибок, логирование, аутентификацию и авторизацию, а также интеграцию с вашей существующей системой.

Citations: [1] https://stackoverflow.com/questions/75160906/python-code-for-generating-valid-bip-39-mnemonic-words-for-a-bitcoin-wallet-not [2] https://github.com/cayusmatias/mtg-bip39 [3] https://codeandlife.com/2022/02/27/create-and-validate-bip-39-mnemonic-with-python/ [4] https://www.reddit.com/r/Electrum/comments/dld22r/help_generate_bip39_seed_and_wallets_from/ [5] https://developer.algorand.org/solutions/creating-a-demo-wallet-using-flask/ [6] https://github.com/pjkundert/python-slip39 [7] https://bitcoin.stackexchange.com/questions/48082/bip-deterministic-seeds-number-of-words-and-compatible-wallets [8] https://www.youtube.com/watch?v=q_GgEHedfuI [9] https://blog.typingdna.com/crypto-wallet-two-factor-authentication-python-flask/ [10] https://news.ycombinator.com/item?id=40214736

STK-bot commented 9 hours ago

При использовании BIP-39 для создания криптовалютных кошельков существует несколько дополнительных мер безопасности, которые можно применить:

1. Многоканальный хранение

Разделите свой словряд на несколько частей и храните каждую часть отдельно. Например, вы можете записать первые 6 слов на одной карточке, следующие 6 слов на другой и так далее. Это значительно усложнит возможность похищения всего кошелька.

2. Использование физических носителей

Запишите свой словряд на нескольких физических носителях (например, на металлических пластинах, специальных картках или даже на стальных блоках). Это защитит вас от электромагнитных атак и пожара.

3. Криптографическое шифрование

Криптографически зашифруйте свой словряд перед его хранением. Можно использовать симметричный алгоритм шифрования, где ключ будет храниться отдельно от самого словряда.

4. Двухэтапная аутентификация

При использовании кошелька всегда требует дополнительный фактор аутентификации, такой как PIN-код или биометрический сканер.

5. Регулярное изменение словряда

Некоторые кошельки позволяют периодически менять словряд, что делает старый словряд недействительным и предотвращает его использование злоумышленниками.

6. Использование дополнительных проверок

При восстановлении кошелька добавьте дополнительные проверки, например, запрос на подтверждение через смартфон или электронную почту.

7. Шифрование транзакций

Используйте шифрование для всех транзакций, связанных с вашим кошельком, чтобы защитить их от несанкционированного доступа.

8. Мониторинг активности

Настройте систему мониторинга для обнаружения необычной активности в вашем кошельке.

9. Использование многофакторной аутентификации

Для управления кошельком используйте многофакторную аутентификацию, включая биометрические данные и физические ключи.

10. Регулярное обновление программного обеспечения

Постоянно обновляйте ваш кошелек до последней версии для устранения уязвимостей безопасности.

11. Использование виртуальных кошельков

Для небольших сумм используйте виртуальные кошельки, которые не требуют хранения реального словряда.

12. Дублирование на разных устройствах

Храните копию своего словряда на нескольких независимых устройствах или облачных сервисах.

Эти меры значительно повышают безопасность вашего криптовалютного кошелька при использовании BIP-39. Помните, что безопасность всегда начинается с правильного выбора и хранения словряда. Никогда не делитесь своим словрядом ни с кем, даже если вы доверяете этому человеку.

Citations: [1] https://getcoinplate.com/blog/what-is-a-bip39-passphrase-enhancing-the-security-of-your-crypto-wallet/?srsltid=AfmBOorDOvmwNrWGkDCrklAxLuuATuT237JjC1O6RJTjoD5Tz0woUi-r [2] https://medium.com/@bitcofun/understanding-the-bip39-seed-phrase-encryption-standard-59c18fbc16bf [3] https://www.halborn.com/blog/post/what-is-a-bip39 [4] https://www.reddit.com/r/Bitcoin/comments/z2v8m2/is_bip39_the_new_standard_should_i_expect_it_to/ [5] https://www.ledger.com/academy/bip-39-the-low-key-guardian-of-your-crypto-freedom [6] https://www.linkedin.com/pulse/how-do-bip39-passphrases-your-crypto-wallet-work-vault12-igvee [7] https://medium.com/airgap-it/securing-your-crypto-with-plausible-deniability-and-bip-39-passphrases-3bb80be72e75 [8] https://vault12.com/learn/crypto-security-basics/what-is-bip39/ [9] https://www.nadcab.com/blog/bip39-in-bitcoin-development [10] https://blog.areabitcoin.co/bip39/

STK-bot commented 9 hours ago

При выборе физических носителей для хранения словряда BIP-39 следует учитывать несколько важных аспектов безопасности. Вот некоторые наиболее подходящие варианты:

1. Металлические носители

Металлические носители являются отличным выбором для хранения словряда:

Примеры металлических носителей:

2. Паперовые носители с защитой

Хотя бумага может показаться неудачным выбором, некоторые варианты имеют дополнительные преимущества:

Пример: Fireproof Paper Wallet

3. Файловые сейфы

Файловые сейфы могут быть хорошим вариантом для хранения словряда:

4. Криптовалютные кошельки с встроенным хранением словряда

Некоторые криптовалютные кошельки имеют специальную секцию для хранения словряда:

Лучшие практики хранения:

  1. Храните несколько копий словряда в разных местах.
  2. Избегайте хранения словряда в легко доступных местах или в открытом виде.
  3. Используйте комбинацию физических носителей и цифровых резервных копий.
  4. Регулярно проверяйте целостность ваших копий словряда.
  5. Если вы используете цифровые носители, шифруйте данные перед сохранением.

Помните, что безопасность всегда начинается с правильного выбора и хранения словряда. Никогда не делитесь своим словрядом ни с кем, даже если вы доверяете этому человеку.

Citations: [1] https://www.reddit.com/r/Bitcoin/comments/58zst0/how_do_you_store_a_digital_backup_of_your_bip39/ [2] https://builtoncardano.com/blog/best-practices-for-storing-a-wallets-mnemonic-recovery-seed/ [3] https://b2binpay.com/en/guide-to-10-best-seed-phrase-storage-solutions/ [4] https://getcoinplate.com/blog/the-best-crypto-seed-phrase-storage-the-ultimate-guide/?srsltid=AfmBOoo2WVGXXKKVYuKhA5SvESPxtaLOPFYBuB025gWVc1Bcb1AdI-_P [5] https://unchained.com/blog/how-to-store-bitcoin-seed-phrase-backups/ [6] https://coincodex.com/article/23147/best-metal-crypto-wallets-for-seed-phrase-storage/ [7] https://en.bitcoin.it/wiki/Seed_phrase [8] https://unchained.com/blog/seed-phrase-backup-methods-recording-paper-metal/ [9] https://medium.com/the-bitcoin-hole/how-to-safely-store-your-hardware-wallet-seed-phrase-bf3b984e64b3

STK-bot commented 8 hours ago

Keystone Tablet Plus - это металлический носитель для хранения словряда BIP-39, который предлагает несколько уникальных особенностей:

Основные характеристики:

  1. Материал: Изготовлен из высококачественной нержавеющей стали (304-grade stainless steel).

  2. Размер: Плоская пластина размером 12 x 18 см (4,7 x 7 дюймов).

  3. Вместимость: Поддерживает до 24 слов BIP-39, что соответствует большинству криптовалютных кошельков.

  4. Дизайн: Имеет встроенные автоматические клещи для удобной вставки букв.

Особенности:

  1. Универсальность: Совместим с любыми криптовалютными кошельками и программами, использующими BIP-39.

  2. Надежность: Предназначен для долговременного хранения словряда в безопасном месте.

  3. Удобство использования: Автоматические клещи упрощают процесс ввода словряда.

  4. Доступность: Можно приобрести как через официальный сайт Keystone, так и на популярных онлайн-площадках, таких как Amazon.

  5. Цена: Оценивается примерно в $49, что делает его относительно доступным вариантом по сравнению с другими металлическими носителями.

Плюсы использования Keystone Tablet Plus:

  1. Высокая степень защиты от физических повреждений благодаря использованию нержавеющей стали.

  2. Удобство использования автоматических клещей.

  3. Компактный размер позволяет легко хранить его в безопасном месте.

  4. Совместимость с широким спектром криптовалютных решений.

  5. Долговечность и устойчивость к коррозии благодаря использованию высококачественной стали.

Keystone Tablet Plus представляет собой хорошее соотношение между безопасностью и удобством для хранения словряда BIP-39. Он особенно подходит для пользователей, которым нужен надежный и простой в использовании вариант для долгосрочного хранения ключей к криптовалютным кошелькам.

Citations: [1] https://keyst.one/shop/products/keystone-tablet-plus?srsltid=AfmBOorQhxFaeaCY8APOdzrJAdaUF8y-VkIP8YEBbz_Vqv0GMTNAhZJt [2] https://www.amazon.com/Keystone-Tablet-Plus-Mnemonic-Compatible/dp/B09DKJ119X [3] https://bitcoinmerch.com/products/cobo-tablet-plus-keystone-tablet-plus-304-grade-stainless-steel-crypto-cold-storage-seed-key-backup-compatible-with-bip39-supports-up-to-24-words?srsltid=AfmBOooFXxFgrsUkyWkSEbRBLMyFZhumy_7XGF25lYY9ulGAekYxM1qT [4] https://www.amazon.com.be/-/en/Keystone-Plus-Steel-Bitcoins-Compatible-Cryptocurrency/dp/B09DKJ119X [5] https://www.macao.ubuy.com/en/product/4031V4VSU-keystone-tablet-plus-304-steel-seed-backup-bitcoin-crypto-cold-storage-support-up-to-24-words-compatible-with-all-bip39-hardware-software [6] https://www.youtube.com/watch?v=QUgL0clNMvY [7] https://www.kmart.com/keystone-crypto-seed-storage-cryptosteel-capsule-metal-wallet-cold-storage-backup-24-words-bitcoin-key-phrase-storage/p-A122478137 [8] https://www.youtube.com/watch?v=5LTRrrvfRZ8 [9] https://isawwwshop.com/products/keystone-tablet-indestructible-steel-crypto-cold-storage-seed-backup [10] https://www.youtube.com/watch?v=sWhd2fAyFf8

STK-bot commented 8 hours ago

При создании металлических носителей для хранения словряда BIP-39 могут использоваться различные материалы, кроме нержавеющей стали. Вот некоторые варианты:

1. Алюминиевый сплав

Алюминий известен своей легкостью, но менее прочным, чем сталь. Его часто используют в сочетании с другими материалами:

Пример: Nukepurse

2. Титановый сплав

Титан обладает высокой прочностью и коррозионной стойкостью:

Пример: Titanium Blockchain Wallet

3. Медный сплав

Медь известна своей проводимостью и коррозионной стойкостью:

Пример: CryptoSteel Wallet

4. Керамика

Керамика может использоваться для создания более легких и прочных носителей:

Пример: Some ceramic seed storage solutions

5. Композитные материалы

Композиты из различных материалов могут создавать уникальные свойства:

Пример: Carbon fiber reinforced materials

6. Специальные пластмассы

Некоторые специализированные пластмассы могут использоваться для создания водостойких носителей:

Пример: Waterproof plastic wallets

Ключевые факторы при выборе материала:

  1. Прочность и долговечность
  2. Коррозионная стойкость
  3. Электропроводимость (для некоторых применений)
  4. Цена производства
  5. Удобство использования и транспортировки
  6. Соотношение цены и качества

При выборе материала важно учитывать не только его технические характеристики, но и удобство использования, стоимость производства и потенциальное влияние на безопасность хранения словряда. Металлические сплавы, особенно нержавеющая сталь, по-прежнему остаются популярным выбором благодаря их надежности и широкому диапазону свойств.

Citations: [1] https://www.blockplate.com/pages/bip-39-wordlist?srsltid=AfmBOopwsx6WdAr5WumoxIpgCxyPfXEKGlMAcVEd6yBK3eudPd27Iz9q [2] https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki [3] https://www.halborn.com/blog/post/what-is-a-bip39

STK-bot commented 8 hours ago

Золотой материал действительно может рассматриваться как потенциальный вариант для создания носителей для хранения словряда BIP-39, хотя он не является распространенным выбором в этой области. Вот несколько соображений по поводу использования золота:

Преимущества использования золота:

  1. Высокая прочность и долговечность: Золото обладает высокой устойчивостью к коррозии и механическим повреждениям.

  2. Электропроводимость: Золотые носители могли бы быть электропроводными, что потенциально полезно для определенных криптовалютных операций.

  3. Альтернативная инвестиция: Золотые носители могли бы служить одновременно и средством хранения словряда, и инвестицией.

  4. Эстетический вид: Золотые носители могли бы иметь привлекательный внешний вид.

Недостатки и ограничения:

  1. Стоимость: Золото значительно дороже других материалов, таких как нержавеющая сталь или титан.

  2. Тяжеловесность: Золотые носители могли бы быть очень тяжелыми, что затруднит их транспортировку.

  3. Сложность обработки: Работа с золотом требует специальных навыков и оборудования.

  4. Необходимость дополнительного покрытия: Золото легко окисляется, поэтому его могли бы потребовать защитить дополнительным покрытием.

  5. Не соответствует стандартам безопасности: Большинство существующих металлических носителей уже обеспечивают высокий уровень защиты, поэтому использование золота может быть излишним.

Заключение:

Хотя теоретически золотой материал мог бы использоваться для создания носителей для хранения словряда BIP-39, он не является практическим выбором из-за высокой стоимости и сложностей использования. Современные металлические носители, такие как те, которые упоминаются в предыдущих ответах, уже предоставляют высокий уровень безопасности и долговечности, необходимые для надежного хранения криптовалютных ключей.

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

Citations: [1] https://cryptotag.io/blog/list-of-all-bip39-wallets/?srsltid=AfmBOoqm_qFt1ZrfcJeFkjuoo6qRMNThTOpRNpAra6LMvQs7Sx_kpEEP [2] https://www.amazon.sa/-/en/Mnemonic-Storage-Protection-Back-Up-Suitable/dp/B0995J2B7S [3] https://www.reddit.com/r/ledgerwallet/comments/c4vcpv/bip_39_not_safe/ [4] https://coincodex.com/article/23147/best-metal-crypto-wallets-for-seed-phrase-storage/ [5] https://www.coolwallet.io/blog/coolwallet-unveils-coolkey-crypto-steel-wallet/ [6] https://www.amazon.com/Mnemonic-Storage-Protection-Back-Up-Suitable/product-reviews/B0995J2B7S?reviewerType=all_reviews [7] https://www.bitcoinsafety.com/blogs/bitcoin/seed-phrase-list [8] https://coinbureau.com/analysis/best-hardware-wallets/ [9] https://www.ngrave.io/ [10] https://learnmeabitcoin.com/technical/keys/hd-wallets/mnemonic-seed/