Khóa công khai python để giải quyết
Thư viện Python cho chữ ký và giao dịch tiền điện tử. Chúng tôi có thể đảm bảo cài đặt của nó bằng cách sử dụng
pip cài đặt tiền điện tử Show Thư viện này giúp và hỗ trợ tạo và đẩy các giao dịch thô cho.
Sự miêu tảCó một số ưu điểm và nhược điểm của thư viện pybitcointools Thuận lợi
Nhược điểm
Phương trình đường cong elip của bitcoiny 2 mod p = (x 3 + Trong phương trình này p là hằng số nguyên tố và giá trị là 2 256 – 2 32< – 29 – 28 – 27 – 26 – 24 – 1 Khóa công khai là K = k * G Trong đó G là điểm tạo trên đường cong elip được chỉ định bằng Bitcoin. K là khóa riêng tư và khóa chung được tính toán cũng là một điểm trên đường cong, là điểm khóa chung (x, y ). Khóa công khai thông thường là trực tiếp 04xy. Bằng cách này, '04', hệ thập lục phân của x và hệ thập lục phân của y, được đặt trực tiếp với nhau Cách nén khóa công khaiVì khóa chung là một điểm trên đường cong elip. Chỉ bản ghi x và y có thể được tính theo phương trình. Y trong trường số thực 2 sẽ nhận được cặp nghiệm trái dấu. Bằng một trường hữu hạn dựa trên lũy thừa nguyên tố p, y 2 sẽ thu được hai nghiệm có số chẵn lẻ khác nhau. Ta cần đánh dấu để biết giá trị y của điểm K ban đầu là. Giả sử rằng tọa độ khóa chung là (x, y), địa chỉ khóa chung chung là 04xy và địa chỉ khóa chung được nén là 02x hoặc 03x PHP rất phổ biến trong việc phát triển phần phụ trợ của các trang web hoặc ứng dụng web. PHP có rất nhiều nhà phát triển tin tưởng nó là ngôn ngữ tiếp theo của họ. Trong hướng dẫn này, chúng ta sẽ xem làm thế nào chúng ta có thể Tôi đã tự hỏi sẽ mất bao lâu để tạo tất cả các khóa riêng Ethereum có địa chỉ trên máy tính xách tay của mình Tôi biết phải làm điều này trong một khung thời gian hợp lý, ngay cả trên một máy tính giàu trí tưởng tượng sẽ sử dụng mức năng lượng tối thiểu nhất có thể. Đây là một trải nghiệm học tập nhiều hơn đối với tôi để tìm hiểu thêm về hàm băm SHA-3 và KECCAK, đường cong ECDSA, Khóa công khai và địa chỉ Ethereum Do trình thông dịch chậm, Python thường không phải là một lựa chọn tốt khi viết các ứng dụng hiệu quả. Ngoại lệ là các mô-đun Python sử dụng giao diện gọi mã C/C++. Các mô-đun này thường rất nhanh, ví dụ phổ biến là Tensorflow và Numpy. Để tạo địa chỉ Ethereum, chúng ta có thể sử dụng hai mô-đun Python sau, cả hai đều dựa trên C và có hiệu suất tốt
Tạo địa chỉ Ethereum là một quy trình gồm 3 bước
Lưu ý rằng khóa công khai và địa chỉ Ethereum không giống nhau. Địa chỉ là giá trị băm của khóa công khai. Không thể gửi tiền đến khóa công khai Bước 1. Tạo khóa riêngKhóa riêng của Ethereum dựa trên hàm băm KECCAK-256. Để tạo hàm băm như vậy, chúng tôi sử dụng hàm import secrets from sha3 import keccak_256 private_key = keccak_256(secrets.token_bytes(32)).digest() Lưu ý rằng hàm băm KECCAK không giống với hàm băm SHA-3. KECCAK đã giành chiến thắng trong một cuộc thi để trở thành tiêu chuẩn SHA-3 nhưng đã được sửa đổi một chút trước khi nó trở thành tiêu chuẩn. Một số thư viện SHA3 như pysha3 bao gồm thuật toán KECCAK kế thừa trong khi các thư viện khác, chẳng hạn như mô-đun hashlib Python, chỉ triển khai tiêu chuẩn SHA-3 chính thức Bước 2. Lấy khóa công khai từ khóa riêngĐể lấy khóa công khai, chúng tôi cần ký khóa riêng của mình bằng Thuật toán chữ ký số Elliptic Curve (ECDSA). Ethereum sử dụng đường cong secp256k1 ECDSA. Coincurve sử dụng điều này làm mặc định, vì vậy chúng tôi không cần chỉ định rõ ràng khi gọi hàm from coincurve import PublicKey public_key = PublicKey.from_valid_secret(private_key).format(compressed=False)[1:] Ethereum Yellow Paper nói rằng khóa chung phải là một mảng byte có kích thước 64 Theo mặc định, coincurve sử dụng định dạng nén cho các khóa công khai (libsecp256k1 được phát triển cho Bitcoin, nơi các khóa nén thường được sử dụng) có kích thước 33 byte. Các khóa không nén có kích thước 65 byte. Ngoài ra, tất cả các khóa công khai đều được thêm vào trước một byte để cho biết chúng được nén hay không nén. Điều này có nghĩa là trước tiên chúng tôi cần lấy khóa 65 byte không nén ( Bước 3. Lấy địa chỉ Ethereum từ khóa công khaiBây giờ chúng ta có thể tạo địa chỉ Ethereum của mình addr = keccak_256(public_key).digest()[-20:] Như được chỉ định trong Sách vàng, chúng tôi lấy tối đa 20 byte bên phải của hàm băm KECCAK 32 byte của khóa công khai ECDSA tương ứng Ví dụ đầy đủĐây là mã ví dụ đầy đủ từ các bước trên. Nó tạo một khóa riêng ngẫu nhiên, lấy địa chỉ và in chúng ở định dạng hex from secrets import token_bytes from coincurve import PublicKey from sha3 import keccak_256 private_key = keccak_256(token_bytes(32)).digest() public_key = PublicKey.from_valid_secret(private_key).format(compressed=False)[1:] addr = keccak_256(public_key).digest()[-20:] print('private_key:', private_key.hex()) print('eth addr: 0x' + addr.hex()) ### Output ### # private_key: 7bf19806aa6d5b31d7b7ea9e833c202e51ff8ee6311df6a036f0261f216f09ef # eth addr: 0x3db763bbbb1ac900eb2eb8b106218f85f9f64a13 Phần kết luậnTôi đã sử dụng mô-đun Python Không gian địa chỉ của Ethereum là 2^160. Điều này có nghĩa là bằng cách sử dụng phương pháp này, nó sẽ lấy máy tính xách tay của tôi 643665439999999976814879449351716864 (sáu trăm bốn mươi ba decillion. ) năm để tạo tất cả các khóa riêng Ethereum có địa chỉ |