date: 2022-01-16T03:00:00Z
# Як генеруються гаманці LocalCryptos
гаманці LocalCryptos – це криптогаманці, які не зберігаються. На відміну від централізованих бірж, LocalCryptos ніколи не знає приватні ключі гаманця; ми не беремо під опіку криптовалюту користувачів. До секретних ключів отримують доступ виключно користувацькі пристрої, а інтерфейс LocalCryptos використовує Web Cryptography API для цифрового підпису транзакцій.
У цій технічній статті описано, як ці закриті ключі генеруються за допомогою детермінованого процесу отримання ключів і як вони шифруються.
Якщо ви раніше створили резервну копію гаманця LocalCryptos та вам потрібно відновити свою криптовалюту, ви можете скористатися безкоштовним інструментом з відкритим вихідним кодом LocalCryptos Wallet Backup Explorer. Просто перейдіть за цим посиланням і прочитайте інструкції.
Поточний стандарт (не HD)
Гаманці LocalCryptos організовані таким чином, що відрізняються від інших гаманців. Вони не дотримуються ієрархічного детермінованого (HD) стандарту, якому відповідають багато інших гаманців.
Рішення не впроваджувати формат гаманця HD бере свій початок у 2017 році, коли LocalCryptos був відомий як LocalEthereum, програма для торгівлі P2P, що працює в мережі Ethereum. На той час ми вирішили використовувати «простіший» тип гаманця — детермінований, але не ієрархічно-детермінований процес генерації ключів — оскільки функції, які надають гаманці BIP32-HD, не були б корисними для ранніх користувачів LocalEthereum.
Після запуску торгівлі біткойнами P2P на LocalCryptos ми зрозуміли, що рішення не використовувати формат гаманця HD було помилкою дизайну, оскільки це означало, що резервні копії гаманця LocalCryptos несумісні безпосередньо з інші основні гаманці, що призводить до тривалої процедури відновлення для користувачів і доступу до ключів, збережених у резервній копії.
У майбутньому ми плануємо перейти на стандартизований формат гаманця HD та вирішити дану проблему. Однак, оскільки так багато гаманців вже було створено за допомогою нашого стандарту, відмінного від HD, перехід на інший формат є складним оновленням. Коли ми зробимо це оновлення, ми оновимо цю статтю.
Найважливіша відмінність ієрархічного детермінованого гаманця від неієрархічної детермінованої системи гаманців, яку використовує LocalCryptos, полягає в тому, що ієрархічні гаманці використовують головну систему відкритих ключів. Головний відкритий ключ дозволяє спостерігачам обчислювати інші адреси гаманця, дивлячись на один відкритий ключ. У детермінованій, реалізованої LocalCryptos, неможливо обчислити інші адреси з одного відкритого ключа, оскільки між відкритими ключами немає криптографічного зв’язку.
Хоча гаманці LocalCryptos не є «ієрархічно» детермінованими, вони все ще детерміновані. Це означає, що кожен гаманець містить практично нескінченну кількість адрес, оскільки кожен ключ є похідним від одного початкового значення. Немає необхідності створювати резервні копії кожної адреси окремо.
Генерація ключів за допомогою рейчингу
Кожна адреса в гаманці LocalCryptos містить присвоєний індексний номер, починаючи з нуля. Цей номер індексу відомий як n
. Не може бути пропущених індексів.
Кожен гаманець LocalCryptos починається з випадкового 32-байтового початкового коду, відомого як ключ ланцюга з нульовим індексом (chainKey0
).
Засіб можна використовувати для визначення приватного ключа для першої адреси гаманця (address0
) і будь-яких наступних адрес, що робить систему детермінованою гаманець.
Закритий ключ для addressn
можна визначити з chainKeyn
, а chainKeyn
можна визначити з chainKeyn-1
. Отже, якщо ви знаєте chainKeyn
, ви можете визначити addressm
, де m
– будь-яке число від n
до нескінченності.
Для цього простого алгоритму храпового механізму ми використовуємо звичайну односторонню функцію хешування під назвою HMAC-SHA256. Розрахунки для кожного ключа n
-індексного ланцюга:
- Закритий ключ адреси
n
-index (addressn
) це HMAC-SHA256(chainKeyn, 0x0001)
. - Наступний ключ ланцюга (
chainKeyn+1
) це HMAC-SHA256(chainKeyn, 0x02)
.
Ця проста храпова система показана на схемі нижче. Пам’ятайте, що кожна стрілка представляє односторонню функцію хешування; за жодною стрілкою не можна йти назад.
Як ви можете бачити з ілюстрації, випадкове розголошення приватного ключа однієї адреси не вплине на решту вашого гаманця через односпрямований характер процесів отримання ключів. Як ви можете бачити з ілюстрації, випадкове розголошення приватного ключа однієї адреси не вплине на решту вашого гаманця через односпрямований характер процесів отримання ключів.
Зберігання ключів
Ключі ланцюга шифруються за допомогою AES-256 до кореневого ключа шифрування вашого облікового запису. Після шифрування зашифрований текст передається в API LocalCryptos для довгострокової доступності, що забезпечує синхронність між пристроями.
Тільки перший ключ ланцюга (chainKey0
) потрібно зашифрувати та зберегти під час першого створення гаманця, однак збереження додаткових ключів означатиме, що старі ключі від ланцюга можна буде безпечно стерти в майбутньому.
Оскільки ключі перед завантаженням шифруються на стороні клієнта, LocalCryptos не може отримати до них доступ.
Резервні копії гаманця
Створення резервної копії гаманця LocalCryptos означає просто експортувати перший доступний ключ ланцюга. Приклад файлу резервної копії може виглядати так:
{
"export": {
"version": "1.0",
"created_at": "2018-01-01"
},
"wallet": {
"id": "08ff9422-552e-4803-a808-8ebb054950f6",
"version": "1.0"
},
"first_address": {
"address": "0x153eac21fc4e66ede5fcae1c763e094dd8e96dc6",
"wallet_address_n": 0
},
"chain_private_key": "08ff942248034f6019cc63550f053300871b1f4ea18ef48035c3611cb9b25b4f"
}
Важливою частиною є chain_private_key
, за допомогою якого ви можете обчислити кожну адресу в гаманці.
Щоб перевірити, чи правильно ви використовуєте ключі та правильно обчислюєте адреси, першою адресою у файлі резервної копії має бути first_address → address
. Номер first_address → wallet_address_n
є найранішим індексом, доступним на момент створення резервної копії.
Як я можу відновити резервну копію гаманця LocalCryptos?
Ви можете скористатися безкоштовним інструментом з відкритим вихідним кодом LocalCryptos Wallet Backup Explorer, щоб перевірити файл резервної копії гаманця та витягти приватні ключі окремих адрес. Ці закриті ключі адрес можна буде імпортувати в інші гаманці.