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



Pdf көрінісі
бет16/22
Дата15.04.2023
өлшемі1,65 Mb.
#82715
түріДипломная работа
1   ...   12   13   14   15   16   17   18   19   ...   22
Байланысты:
Кузьмин А.А. ПМИб-1401

2.2 Реализация системы 
2.2.1 Создание ключей и их использование для транзакций 
Создание идентификатора Ethereum и использование его для отправки в 
блокчейн. Идентификатор - это объект с приватным ключом и 
соответствующим открытым ключом и его адресом. Чтобы создать новый 
идентификатор, вызывается функция createIdentity, которая возвращает ее. 
const
EthCrypto 
=
require(
'eth-crypto'
); 
const
identity 
=
EthCrypto.createIdentity(); 
console.dir(identity); 
/* > {
address: '0x3f243FdacE01Cfd9719f7359c94BA11361f32471',
privateKey: 
'0x107be946709e41b7895eea9f2dacf998a0a9124acbb786f0fd1a826101581a07',
publicKey: 'bf1cc3154424dc22191941d9f4f50b063a2b663a2337e5548abea633c1d06ece...'
} */
Рисунок 3.1 – Создание нового идентификатора 


36 
Компоненты идентификатора:
Приватный ключ (privateKey), который никогда не должен 
раскрываться никому. Его можно использовать для подписания и расшифровки 
сообщений и для создания его открытого ключа (publicKey). 
Открытый ключ раскрывается всякий раз, когда что-то 
подписывается с помощью privateKey. Также принято отправлять publicKey 
другим людям, чтобы они могли зашифровать данные с ним, которые затем 
могут быть расшифрованы только с помощью правильного privateKey
Существует два способа представления publicKey сжатым и несжатым. 
EthCrypto всегда создает несжатый ключ, который начинается с 0x04. Сжатые 
ключи начинаются с 0x03 или 0x02. Чтобы представить ключ, мы отделяем 
начало 04 от него и внутренне добавляем его при выполнении 
криптографических вызовов. 
Адрес вычисляется из последних 20 байтов keccak-256 хэширования 
publicKey. Он используется для представления идентификатора. Не существует 
способа вычислить publicKey с адреса. Это означает, что всякий раз, когда 
нужно зашифровать данные для кого-то, мы сначала должны получить 
publicKey. Существует два способа представления адреса. Обычный адрес 
имеет строчный регистр и представляет собой только 20 байтов хэша. Формат 
контрольной суммы содержит прописные буквы, которые предназначены для 
обнаружения ошибок, когда адрес вводится вручную[9]. 
Транзакция Ethereum в основном представляет собой json-объект с 
определенными значениями.
const
rawTransaction 
=

from
:
identity.address, 
// адрес отправителя
to
:
'0x86Fa049857E0209aa7D9e616F7eb3b3B78ECfdb0'

// адрес получателя
value
:
1000000000000000000

// количество wei, которое мы хотим отправить 
(=1 эфир)
nonce
:
0

// инкрементное tx-число. добавляет +1 для каждой транзакции
gasPrice
:
5000000000

gasLimit
:
21000
// нормальный gasLimit для транзакций без кода
}; 
Рисунок 3.2 – Создание транзакции 


37 
Прежде чем транзакция может быть отправлена на узел, она должна быть 
подписана с помощью privateKey и переведена в шестнадцатеричную строку. 
const
serializedTx 
=
EthCrypto.signTransaction( 
rawTransaction, 
identity.privateKey 
); 
console.log(serializedTx); 
// > 'f86c808504a817c80082ea609463dcee1fd1d814858acd4172bb20e1...'
Рисунок 3.3 – Подпись с privateKey 
Теперь строка транзакции может быть отправлена в блокчейн. Для целей 
тестирования создается локальная тестовая цепочка и проверяется там. Чтобы 
создать локальную тестовую сеть, используется ganache-cli и подключается к 
экземпляру web3, чтобы взаимодействовать с ним. 


Достарыңызбен бөлісу:
1   ...   12   13   14   15   16   17   18   19   ...   22




©emirsaba.org 2024
әкімшілігінің қараңыз

    Басты бет