30.11.2021 ForkLog
#приватные ключи#шифрование
Почти любой криптовалютный кошелек позволяет сделать бэкап — сохранить приватный ключ в специальном файле, чтобы восстановить доступ в случае потери или поломки устройства. Но это создает новые проблемы: файл могут украсть злоумышленники.
Разработчики криптокошелька Cake Wallet рассказывают об открытом программном обеспечении для безопасного хранения и шифрования приватных ключей.
Ломаем кошелек за три минуты
Десктопные, мобильные и браузерные кошельки хранят приватные ключи на устройстве пользователя. Например, криптокошелек Exodus помещает их в папку AppRoaming на Windows и в Application Support — на macOS.
Самое важное в них — файлы seed.seco и passphrase.json. В первом находится приватный ключ, а во втором — фраза для его дешифровки.
Содержимое папки exodus.wallet в Application Support. Для доступа к ней нужно включить отображение скрытых папок.
Если хакер скопирует файлы на свой компьютер, то получит доступ к кошельку. Мы проделали такие действия в примере ниже.
Перенос файлов на другой компьютер. Биткоин-адреса совпадают.
Это не значит, что Exodus и другие десктопные кошельки ненадежные. Мы специально не использовали пароли, шифрование и 2FA, чтобы показать механизм кражи.
Большинство кошельков предлагает шифровать файлы с ключами паролем. Но даже в этом случае они останутся в очевидном месте и будут уязвимы к атаке полного перебора.
Украсть файлы из смартфона сложнее: iOS и Android не предоставляют полный доступ к файловой системе. Мы установили на смартфон кошельки Cake Wallet, MyEtherWallet и TON Surf, но не смогли найти папки с ключами без root-доступа.
Однако телефон можно потерять или разбить, и таким образом лишиться криптовалюты. На этот случай стоит сделать бэкап кошелька: сохранить приватный ключ или мнемоническую фразу на отдельном устройстве, а затем зашифровать их.
Кроме того, резервные копии позволяют безопасно использовать десктопные кошельки. Для этого нужно превратить их в некастодиальные: каждый раз вручную импортировать приватный ключ, а по завершении работы чистить папки.
Для чего нужен закрытый ключ
Отправка криптовалютных транзакций
Приватный ключ выполняет две основные функции. Первая — это надежное хранение криптовалюты, так как только тот, кто знает закрытый ключ биткоина, может проводить операции с этими активами. Вот почему нужно быть предельно внимательным при его создании, и ни в коем случае не показывать его третьим сторонам, а также не хранить в интернете, и в идеале даже на компьютерах, которые подключены к интернету.
Вторая функция — это подпись транзакций. Приватный ключ также является цифровой подписью. Как уже было сказано выше, к каждому приватному ключу привязан уникальный публичный ключ или адрес. При отправке транзакции в сеть ноды проверяют соответствие адреса отправителя с его закрытым ключом, при этом информация о последнем остается секретной для всех, даже для валидаторов. Как только будет получено необходимое количество подтверждений, транзакция будет доставлена получателю.
Как правильно сделать бэкап
Для доступа к кошельку нужны приватный ключ или сид-фраза — можно сохранить что-то одно.
Лучше выбрать сид-фразу. Она состоит из английских слов, а значит меньше вероятность сделать ошибку при создании бэкапа.
Сид-фразы и приватные ключи примерно одинаково устойчивы к брутфорсу — методу взлома путем перебора возможных комбинаций.
Данные можно обезопасить четырьмя способами:
- записать в менеджер паролей;
- сохранить в файл и зашифровать его;
- загрузить в зашифрованное облачное хранилище;
- разбить на части с помощью секрета Шамира.
Мы покажем их на примере инструментов с открытым исходным кодом: KeePassXC, PGPTool, Cryptomator и ASecuritysite.
Помните, что абсолютно безопасного способа хранения ключей не существует. Но на взлом защищенного кошелька понадобятся месяцыа, а на взлом незащищенного — несколько минут.
Как правильно хранить приватные ключи
Хранение приватных ключей
Важно не только создать надежный ключ, но и правильно его хранить. В общем есть три варианта хранения: на бумаге (металле), на электронных носителях, в памяти. При этом какой бы способ вы не выбрали, важно помнить, что доступ приватному ключу должен быть только у вас.
А теперь расскажем, какие есть варианты хранения приватного ключа биткоина:
- На бумаге или металле. Этот способ больше всего актуален для бумажных кошельков, однако так можно хранить закрытый ключ, созданный любым методом — нужно просто переписать его. Однако такое хранение не безопасно: вы можете потерять лист, он может сгореть или размокнуть. Для большей прочности его можно заламинировать или сделать копию из металла;
- На флешке. Это один из самых надежных способов. Нужно использовать отдельную флешку (желательно новую и проверенную на отсутствие вирусов) и выполнять все операции в оффлайн-режиме. Есть несколько вариантов хранения: в виде текстового документа, скриншота или оригинального файла в формате wallet.dat. Также обязательно нужно поставить на флешку пароль;
- На компьютере. Это также достаточно надежный вариант хранения, если устройство не подключено к интернету и исправно работает. В противном случае он или может стать жертвой злоумышленников, или «полететь». Также рекомендуется поставить надежный пароль на сам файл и на компьютер;
- В памяти. Это, пожалуй, самый безопасный способ. Однако он подойдет только в том случае, если вы использовали мнемоническую фразу. Потому что запомнить набор из рандомных чисел и букв просто нереально.
Менеджер паролей KeePassXC
Менеджер паролей — приложение для хранения большого количества пар «ключ-значение». По сути, это зашифрованная база данных, которую можно открыть только с помощью мастер-ключа.
Мы покажем работу менеджера паролей на примере KeePassXC — бесплатного приложения с открытым исходным кодом для Windows, Linux и macOS.
При первом запуске KeePassXC предложит создать базу данных. Введите ее название в поле Database Name.
Поле с описанием можно оставить пустым. Вы увидите его только в настройках.
На втором шаге настройте время, которое понадобится на каждую попытку подбора мастер-ключа (Decryption Time). Значение по умолчанию — 1 секунда, рекомендуемое значение — 5 секунд.
Идеальный вариант времени дешифровки — пять секунд. В этом случае хакер будет проверять по 20-30 паролей в минуту.
Затем введите и подтвердите мастер-ключ. Он должен быть уникальным — не используйте существующие или похожие пароли. Учтите, что KeePassXC поддерживает символы вроде ©, ✓ или ⌀, которые не встречаются в стандартных раскладках клавиатуры и словарях для брутфорса.
После этого присвойте имя файлу с базой данных и выберите место, где его сохранить.
Выбирайте папку или устройство, где точно не потеряете файл с базой данных.
Для создания бэкапа нажмите плюсик на верхней панели инструментов. Задайте название записи, например seed phrase. Если не хотите оставлять подсказку для хакеров, оставьте поле пустым.
Введите сид-фразу или приватный ключ в любое поле и нажмите кнопку ОК. Рекомендуем использовать поле Password: KeePassXC скрывает его содержимое при просмотре базы данных.
Поля Title, Username, URL и Notes можно оставить пустыми. Они помогают ориентироваться в содержимом базы данных.
Чтобы скопировать ключ или сид-фразу, кликните правой кнопкой мыши на записи и выберите пункт Copy Password в раскрывающемся списке.
KeePassXC скрывает длину пароля, поэтому вместо символов в поле Password отображаются точки.
Базу данных стоит скопировать на флешку или загрузить в облако на случай, если жесткий диск выйдет из строя.
Как выглядит приватный ключ биткоина
Давайте посмотрим на примере биткоина, как выглядит приватный ключ. В основе Bitcoin лежит алгоритм криптовалют SHA-256, который создает 256-битное число, состоящее из нуля и единицы.
Однако пользоваться таким длинным набором очень неудобно и, к тому же, ключ должен быть зашифрован. Поэтому закрытый ключ от биткоин-аккаунта создается в виде 32-байтного числа, который состоит из 64 символов. На каждый символ приходится два значения (ноль или единица) из вышеназванного 256-битного числа. При этом используются цифры от 1 до 9 и буквенные символы от A до F.
☝️
Пример приватного ключа биткоина: B4653223363AA61F20BD08FC233AC37262
Угадать или подобрать его методом «brute force» практически невозможно. По сути он представляет собой число в диапазоне от 1 до 10 в 77-ой степени. Если представить, что у человека появилась возможность перебирать один триллион чисел в секунду, то на поиск одного приватного ключа ушло бы как минимум миллион возрастов существования планеты Земля.
Но некоторые исследователи полагают, что с развитием и усовершенствованием квантовых технологий, появятся способы взлома блокчейна.
Также стоит сказать, что с развитием криптосферы, появились разные форматы для хранения приватных ключей биткоина. Это альтернативные форматы, которые называются «Форматом Импорта Кошелька». Их три:
- Hex: 1E99674A4CA27608A45A1813ABB0E9E52CFA330AC563EDBB32C8AAC6A964AECA.
- WIF: 5J3nBbAG58CuQ346RNLpPUA
- WIF-сжатый: KxFC1jnghCoACiATWZ3oXa748VN6ac3TYzGkd7YbsqGLY
В этих форматах хранится один и тот же ключ. Каждый формат может быть легко преобразован в любой другой.
Шифровальщик PGPTool
PGP (Pretty Good Privacy) — название библиотеки функций для шифрования данных и приложений на ее основе.
PGP-шифрование позволяет защитить содержимое электронных писем, жестких дисков и отдельных файлов. PGP-приложения работают, как криптокошельки: шифруют информацию публичными ключами и расшифровывают приватными.
Мы сделаем бэкап текстового файла с сид-фразой с помощью PGPTool — десктопного PGP-клиента с открытым исходным кодом. Для запуска понадобится любая операционная система с поддержкой Java Runtime Environment.
Запишите приватный ключ или сид-фразу в текстовый файл и сохраните его на компьютере. Установите и запустите PGPTool.
Нажмите кнопку Key ring, чтобы создать новую пару из открытого и приватного ключей.
PGP используют для шифрования электронных писем, поэтому многие приложения просят ввести имя, пароль и email. Необязательно указывать настоящие данные: в нашем случае это название пары ключей.
После заполнения основной информации задайте пароль и нажмите кнопку Create.
Если вы не хотите указывать настоящий почтовый адрес, введите любую комбинацию букв с @gmail.com.
Создайте бэкап: нажмите на кнопку Encrypt File и выберите файл с сид-фразой.
Выключите флажок Use same folder и укажите место для сохранения. В противном случае PGPTool поместит бэкап в папку с исходным файлом.
Нажмите кнопку Encrypt.
Если включить флажок Delete source file, клиент удалит исходный файл после шифрования.
По завершении шифрования PGPTool покажет сообщение «File was encrypted successfully». Бэкап готов. Сделайте копию этого файла на случай потери или повреждения основного устройства.
Чтобы расшифровать бэкап и прочитать сид-фразу, нажмите кнопку Decrypt file и выберите зашифрованный файл. Введите пароль, который задали при создании пары ключей.
В поле Key отображаются имя и адрес электронной почты, а не сам ключ.
Выберите папку для сохранения дешифрованного файла и нажмите кнопку Decrypt.
Обязательно сохраните PGP-ключ на внешний накопитель, чтобы не потерять кошелек при повреждении жесткого диска.
Нажмите кнопку Key ring, щелкните правой кнопкой мыши на ключе и выберите пункт Export private key в раскрывающемся списке. Укажите папку для хранения файла с ключом и нажмите кнопку Save.
PGP-клиент сохранит ключ в файле формата asc.
После этого удалите приватный ключ из клиента, выбрав в списке пункт Remove key. Если хакер все же получит доступ к компьютеру, он не сможет расшифровать файл.
Как генерировать свой собственный ключ Bitcoin
Автор оригинала: Timur Badretdinov.
В Cryptootogurns, закрытый ключ позволяет пользователю получать доступ к своему кошельку. Человек, который держит закрытый ключ, полностью контролирует монеты в этом кошельке. По этой причине вы должны держать его в секрете. И если вы действительно хотите создать ключ самостоятельно, имеет смысл генерировать его безопасно.
Здесь я предоставим введение в частные ключи и покажу вам, как вы можете создать свой собственный ключ, используя различные криптографические функции. Я предоставим описание алгоритма и кода в Python.
Мне нужно создать закрытый ключ?
Большую часть времени вы этого не делаете. Например, если вы используете веб-кошелек, такой как Coinbase или Blockchain.info, они создают и управляют закрытым ключом для вас. Это то же самое для обменов.
Кошельки для мобильных и настольных компьютеров обычно также генерируют закрытый ключ для вас, хотя у них может быть возможность создать кошелек из своего собственного ключа.
Так зачем все равно создавать это? Вот причины, которые у меня есть:
- Вы хотите убедиться, что никто не знает ключ
- Вы просто хотите узнать больше о криптографии и поколении случайных чисел (RNG)
Что именно является закрытым ключом?
Формально закрытый ключ для биткойна (и многие другие криптовалюты) представляет собой серию из 32 байтов. Теперь есть много способов записать эти байты. Это может быть строка 256 и нули (32 *) или 100 рулонов для костей. Это может быть двоичная строка, Base64, A Ключ WiF , Мноническая фраза или, наконец, шестигранная строка. Для наших целей мы будем использовать шестигранную строку длиной 64 символов.
Почему ровно 32 байта? Отличный вопрос! Видите ли, чтобы создать открытый ключ от частного, биткойна использует ECDSA или алгоритм цифровой подписи эллиптической кривой. Более конкретно, он использует одну конкретную кривую под названием secp256k1 Отказ
Теперь эта кривая имеет порядок 256 битов, принимает 256 битов в качестве ввода и выводит 256-битных целых чисел. И 256 бит ровно 32 байта. Итак, чтобы поставить его другим способом, нам нужны 32 байта данных для корма на эту кривую алгоритм.
Для закрытого ключа есть дополнительное требование. Поскольку мы используем ECDSA, ключ должен быть положительным и должен быть меньше порядка кривой. Орден ecp256k1 – FFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAEEDCE6AF48A03BBFD25E8CD0364141 , который довольно большой: почти любой 32-байтовый номер будет меньше, чем он.
Наивный метод
Итак, как мы создаем 32-байтовое целое число? Первое, что приходит к уму, это просто использовать библиотеку RNG на вашем языке выбора. Python даже обеспечивает милый способ генерации достаточно лишь битов:
import random bits = random.getrandbits(256) # 30848827712021293731208415302456569301499384654877289245795786476741155372082 bits_hex = hex(bits) # 0x4433d156e8c53bf5b50af07aa95a29436f29a94e0ccc5d58df8e57bdc8583c32 private_key = bits_hex[2:] # 4433d156e8c53bf5b50af07aa95a29436f29a94e0ccc5d58df8e57bdc8583c32
Выглядит хорошо, но на самом деле, это не так. Видите ли, обычные библиотеки RNG не предназначены для криптографии, так как они не очень безопасны. Они генерируют номера на основе семян, и по умолчанию семя – точное время. Таким образом, если вы знаете примерно, когда я сгенерировал биты выше, все, что вам нужно сделать, это грубые заставить несколько вариантов.
Когда вы генерируете закрытый ключ, вы хотите быть чрезвычайно безопасным. Помните, что если кто-то узнает закрытый ключ, они могут легко украсть все монеты из соответствующего кошелька, и у вас нет шансов, чтобы когда-либо их вернуть.
Так что давайте постараемся сделать это более безопасно.
Криптографически сильный RNG.
Наряду со стандартным методом RNG языки программирования обычно предоставляют RNG специально предназначенные для криптографических операций. Этот метод, как правило, гораздо более безопасен, потому что он рисует энтропию прямо из операционной системы. Результатом такого RNG гораздо сложнее воспроизвести. Вы не можете сделать это, зная время поколения или имея семена, потому что нет семян. Ну, по крайней мере, пользователь не входит в семену – скорее, он создан программой.
В Python, криптографически сильный RNG реализован в Секреты модуль. Давайте изменим код выше, чтобы заставить конфиденциальный ключ генерации в безопасности!
import secrets bits = secrets.randbits(256) # 46518555179467323509970270980993648640987722172281263586388328188640792550961 bits_hex = hex(bits) # 0x66d891b5ed7f51e5044be6a7ebe4e2eae32b960f5aa0883f7cc0ce4fd6921e31 private_key = bits_hex[2:] # 66d891b5ed7f51e5044be6a7ebe4e2eae32b960f5aa0883f7cc0ce4fd6921e31
Это удивительно. Могу поспорить, вы не сможете воспроизвести это даже с доступом к своему ПК. Но мы можем пойти глубже?
Специализированные сайты
Есть сайты, которые генерируют случайные номера для вас. Мы рассмотрим всего два здесь. Один из них Random.org , известный генератор случайного числа общего назначения. Еще один это Bitaddress.org , который разработан специально для генерации ключевого ключа биткойнов.
Может Random.org Помогите нам генерировать ключ? Определенно, как у них есть Сервис Для генерации случайных байтов. Но здесь возникают две проблемы. Random.org Претензии быть по-настоящему случайным генератором, но вы можете доверять этому? Можете ли вы быть уверены, что это действительно случайно? Можете ли вы быть уверены, что владелец не записывает все результаты поколений, особенно те, которые выглядят как частные ключи? Ответ зависит от вас. О, и вы не можете запустить его локально, что является дополнительной проблемой. Этот метод не закреплен на 100%.
Теперь Bitaddress.org это совершенно другая история. Это открытый источник, так что вы можете увидеть, что находится под его капюшоном. Это на стороне клиента, так что вы можете скачать его и запустить ее локально, даже без подключения к Интернету.
Итак, как это работает? Он использует вас – да, вы – как источник энтропии. Он просит вас переместить мышь или нажать случайные клавиши. Вы делаете это достаточно долго, чтобы сделать его невозможным воспроизводить результаты.
Вы заинтересованы в том, чтобы увидеть, как Bitaddress.org работает? Для образовательных целей мы посмотрим на свой код и попытаемся воспроизвести его в Python.
Bitaddress: специфики
Bitaddress создает энтропию в двух формах: движение мыши и ключевым давлением. Мы поговорим о обоих, но мы сосредоточимся на ключевых прессах, так как трудно реализовать отслеживание мыши в Python Lib. Мы ожидаем, что конечный пользователь вводит кнопки, пока у нас будет достаточно энтропии, а затем мы создадим ключ.
Bitaddress делает три вещи. Инициализирует байтовый массив, пытаясь получить столько же энтропий, насколько это возможно с вашего компьютера, он заполняет массив с помощью пользовательского ввода, а затем он генерирует закрытый ключ.
Bitaddress использует 256-байтовый массив для хранения энтропии. Этот массив переписан в циклах, поэтому, когда массив заполнен впервые, указатель выходит на ноль, и процесс заполнения запускается снова.
Программа инициирует массив с 256 байтами из window.crypto Отказ Затем он пишет временной метку, чтобы получить дополнительные 4 байта энтропии. Наконец, он получает такие данные как размер экрана, ваш часовой пояс, информацию о плагинах браузера, вашего языка и многого другого. Это дает ему еще 6 байтов.
После инициализации программа постоянно ждет для пользовательского ввода, чтобы переписать исходные байты. Когда пользователь перемещает курсор, программа записывает положение курсора. Когда пользователь нажимает кнопки, программа записывает код CHAR нажатой кнопки.
Наконец, Bitaddress использует накопленную энтропию для генерации закрытого ключа. Это должно генерировать 32 байта. Для этой задачи Bitaddress использует алгоритм RNG, называемый ARC4. Программа инициализирует ARC4 с текущим временем и собранной энтропией, затем получает байты один на один 32 раза.
Это все упрощение того, как работает программа, но я надеюсь, что вы получите идею. Вы можете проверить алгоритм в полной детализации на Github Отказ
Делать это сам
Для наших целей мы построим более простую версию BitAddress. Во-первых, мы не будем собирать данные о машине и местоположении пользователя. Во-вторых, мы будем вводить энтропию только через текст, так как вполне сложно постоянно получать позицию мыши с помощью сценария Python (Check Pyautogui Если вы хотите это сделать).
Это приводит нас к формальной спецификации нашей библиотеки генератора. Во-первых, он инициализирует байтовый массив с криптографическим RNG, затем он заполнит временную метку, и, наконец, он заполнит созданную пользователем строку. После заполнения семенного пула в библиотеке позволит разработчику создать ключ. На самом деле, они смогут создать столько личных ключей, поскольку они хотят, все закрепленные собранной энтропией.
Инициализация пула
Здесь мы поставили байты из криптографического RNG и временем времени. __seed_int и __seed_byte являются двумя помощниками, которые вставляют энтропию в наш массив бассейна. Обратите внимание, что мы используем Секреты Отказ
def __init_pool(self): for i in range(self.POOL_SIZE): random_byte = secrets.randbits(8) self.__seed_byte(random_byte) time_int = int(time.time()) self.__seed_int(time_int) def __seed_int(self, n): self.__seed_byte(n) self.__seed_byte(n >> self.__seed_byte(n >> 16) self.__seed_byte(n >> 24) def __seed_byte(self, n): self.pool[self.pool_pointer] ^= n & 255 self.pool_pointer += 1 if self.pool_pointer >= self.POOL_SIZE: self.pool_pointer = 0
Посев с входом
Здесь мы сначала поставьте временную метку, а затем входную строку, символ по символу.
def seed_input(self, str_input): time_int = int(time.time()) self.__seed_int(time_int) for char in str_input: char_code = ord(char) self.__seed_byte(char_code)
Генерация закрытого ключа
Эта часть может выглядеть усердно, но это на самом деле очень просто.
Во-первых, нам нужно создать 32-байтовый номер, используя наш пул. К сожалению, мы не можем просто создать наших собственных Случайные Объект и использовать его только для ключевого поколения. Вместо этого есть общий объект, который используется любым кодом, который работает в одном скрипте.
Что это значит для нас? Это означает, что в каждый момент, в любом месте кода, один простой Random.seed (0) Может уничтожить всю нашу собранную энтропию. Мы не хотим этого. К счастью, Python предоставляет Гутрите и SetState методы. Итак, чтобы сохранить нашу энтропию каждый раз, когда мы создаем ключ, мы помним состояние, которое мы остановились и установили его в следующий раз, когда мы хотим сделать ключ.
Во-вторых, мы просто убедимся, что наш ключ находится в диапазоне (1, Curve_order ). Это требование для всех частных ключей ECDSA. Curve_Order это порядок кривой TECP256K1, который является FFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAEEDCE6AF48A03BBFD25E8CD0364141 Отказ
Наконец, для удобства мы преобразуем в Hex, и разделите часть «0x».
def generate_key(self): big_int = self.__generate_big_int() big_int = big_int % (self.CURVE_ORDER — 1) # key < curve order big_int = big_int + 1 # key > 0 key = hex(big_int)[2:] return key def __generate_big_int(self): if self.prng_state is None: seed = int.from_bytes(self.pool, byteorder=’big’, signed=False) random.seed(seed) self.prng_state = random.getstate() random.setstate(self.prng_state) big_int = random.getrandbits(self.KEY_BYTES * self.prng_state = random.getstate() return big_int
в действии
Давайте попробуем использовать библиотеку. На самом деле, это действительно просто: вы можете генерировать закрытый ключ в трех строках кода!
kg = KeyGenerator() kg.seed_input(‘Truly random string. I rolled a dice and got 4.’) kg.generate_key() # 60cf347dbc59d31c1358c8e5cf5e45b822ab85b79cb32a9f3d98184779a9efc2
Вы можете увидеть это самостоятельно. Ключ случайно и полностью действителен. Более того, каждый раз, когда вы запускаете этот код, вы получаете разные результаты.
Заключение
Как видите, есть много способов генерировать частные ключи. Они отличаются простотой и безопасностью.
Генерация закрытого ключа – это только первый шаг. Следующим шагом является извлечение открытого ключа и адреса кошелька, который вы можете использовать для получения платежей. Процесс генерации кошелька отличается для биткойна и Ethereum, и я планирую написать еще две статьи на эту тему.
Если вы хотите играть с кодом, я опубликовал это для этого Github Repository Отказ
Я делаю курс по криптовалютам здесь на новостях FreeCodeCamp. То первая часть это подробное описание блокчана.
Я также публикую случайные мысли о Crypto On Твиттер Так что вы можете проверить это.
Облачное хранилище Cryptomator
Cryptomator — бесплатный инструмент для создания зашифрованных облачных хранилищ в OneDrive, Google Drive, iCloud и на жестком диске устройства.
Чтобы сделать бэкап, установите версию Cryptomator для вашей операционной системы. Приложение работает на Windows, macOS, Linux, Android и iOS.
Запустите Cryptomator, нажмите кнопку Add Vault и введите имя хранилища.
Слева отображаются доступные хранилища.
Выберите место для хранения файлов — облако или папку. Cryptomator предложит облачные сервисы, приложения которых установлены на устройстве. Мы создали хранилище в iCloud.
При создании хранилища в облаке Cryptomator все запишет файлы в папку, которую облачный клиент использует для синхронизации.
Задайте пароль и включите флажок Yes, чтобы получить секретную фразу для его восстановления.
Запишите фразу для восстановления пароля в текстовый файл или в блокнот.
Перед тем, как перенести файл в хранилище, получите к нему доступ: нажмите кнопку Unlock Now и введите пароль.
Иконка слева показывает статус хранилища: закрытый замок — зашифровано, открытый — расшифровано.
Cryptomator откроет в проводнике виртуальный накопитель. Поместите в него файл с сид-фразой. Приложение сразу отправит его в облако.
Cryptomator отображает хранилище в виде виртуального накопителя localhost.
После этого закройте хранилище: выберите его в Cryptomator и нажмите кнопку Lock.
Если закрыть приложение или выключить компьютер, Cryptomator автоматически зашифрует открытые хранилища: скопирует содержимое накопителя в облако и удалит виртуальное устройство из системы.
Сделайте бэкап хранилища, чтобы не потерять доступ при поломке устройства. Перейдите в папку Cryptomator, и найдите папку с названием хранилища.
В папке d находятся зашифрованные файлы, которые затем попадут в хранилище. В нее нельзя ничего добавлять вручную: сломается структура шифра и файлы в хранилище станут нечитаемыми.
Скопируйте все файлы на внешний накопитель. В случае поломки компьютера установите Cryptomator на новое устройство и импортируйте хранилище. Для этого нажмите кнопку Add Vault, а затем — Existing Vault. В открывшемся окне укажите путь к файлам masterkey и vault.
Чтобы Cryptomator открыл бэкап, в папке с masterkey и vault обязательно должна находиться папка d с зашифрованными файлами.
При импорте хранилища Cryptomator потребует ввести пароль. Если хакер украдет бэкап, то получит доступ к вашим бэкапам только после брутфорс-атаки.
Схема Шамира в ASecuritysite
Схема Шамира (секрет Шамира) — алгоритм, который разбивает информацию на зашифрованные фрагменты. Для восстановления исходных данных понадобится несколько таких фрагментов. Их количество называется пороговым значением.
Работу алгоритма можно объяснить на примере задачи на построение кривой. Допустим, Алиса задала пять точек, через которые проходит только одна кривая. Боб может взять координаты любых трех точек Алисы (пороговое значение) и построить такую же кривую.
Бэкап по схеме Шамира можно сделать в онлайн-конвертерах с открытым исходным кодом. Мы использовали первый сайт в поисковой выдаче — ASecuritysite.
Перейдите на страницу с шифрованием по схеме Шамира. Вставьте приватный ключ или сид-фразу в поле Secret Message.
Введите количество фрагментов в поле No of shares и пороговое значение в поле Threshold. Нажмите кнопку Determine.
Пороговое значение должно составлять больше 50% от количества фрагментов. Если фрагментов семь, задавайте пороговое значение четыре, если восемь — пять.
Конвертер запишет зашифрованные фрагменты в поле Shares и разделит их знаком «=».
Конвертер помещает дешифрованное сообщение в поле Reconstructed, чтобы доказать правильную работу алгоритма.
Сохраните фрагменты на разных носителях: один запишите в блокнот, второй — в облако, третий — в менеджер паролей и т.д.
Хакер не сможет восстановить данные, если получит один фрагмент. Но если вы потеряете один фрагмент, то сможете расшифровать данные для доступа к кошельку.
Чтобы прочитать информацию в бэкапе, перейдите на страницу с декодером. Вставьте несколько фрагментов в поле Secret shares и нажмите кнопку Determine.
Не забудьте разделить фрагменты отступами, чтобы декодер воспринимал их как отдельные строки.
Первые попытки дешифровки будут выглядеть как наборы случайных битов. Это нормально: декодер пробует восстановить оригинал по первому фрагменту, а затем добавляет новые и повторяет попытки. Он выдаст исходное сообщение при достижении порогового значения.