1. принцип работы шифрования и электронной подписиПервое, что я решил сделать это разобраться в принципе работы криптографии, создании публичного и приватного ключа.
Поломав голову и потратив кучу времени я разобрался в криптографии и понял принцип работы ecdsa. Собственно дальше стал писать код на python, который делал одну интересную и важную вещь, создавал:
приватный ключ, публичный, пароль и после чего сохранял это в файл
Это код который выбирает точку на кривой, потом от этой точки выбирает вторую точку на кривой. Вторая точка на кривой и есть наш публичный адрес с которого вы будете платить или получать крипту.
generate_key = ecdsa.SigningKey.generate(curve=ecdsa.SECP256k1)
public_key = generate_key.get_verifying_key() # clear key:
public_key = public_key.to_string().hex()
private_key = binascii.hexlify(generate_key.to_string()).decode() #privat key: 374bc766d11a59a826249fc42f370cee0518e70925c96e73c1848716216d2f64
В данном случае используется уже готовое решение
https://github.com/warner/python-ecdsa, поэтому можно быть спокойным за надежность создаваемых ключей.
Дальше мы кодируем ключ, чтобы сделать его короче, здесь мы не стали далеко ходить и взяли принцип создания адреса из биткоин.
key = base58.b58encode(bytes.fromhex(key))
ripemd160 = hashlib.new('ripemd160')
ripemd160.update(hashlib.sha256(key.encode()).digest())
key = base58.b58encode(ripemd160.digest())
После чего мы пишем в файл wallet.pem в формате "ключ:значение" наши данные (так же как в кошельке Etherium)
wallet_file_content = {
"private_key": private_key,
"public_key": public_key,
"publickey_adress": key}
with open('wallet.pem', 'w') as out:
for key, val in wallet_file_content.items():
out.write('{}:{}\n'.format(key, val))
Конечно кода гораздо больше и он сложнее, это выжимка. Чуть позже выложу на github исходник Atom
upd (26/05/2018): Правильные ответы по криптографии: 2018 год - позже переведу свою крипту на NaCl (libsodium)
upd (07/06/2018): Полезная библиотека для понимания ||
Полезная библиотека для понимания 2 -
это все форки наборов инструментов написанных Виталиком Бутериным