Hướng dẫn python mnemonic to private key - python ghi nhớ thành khóa riêng tư

Về cơ bản tôi đã làm theo các hướng dẫn ở đây làm thế nào để tạo địa chỉ sợi nấm từ 12 từ trong Python

Vì vậy, mã của tôi tương tự:

from bip32utils import BIP32Key
from bip32utils import BIP32_HARDEN
from bip32utils import Base58
import os, bip39

strength_bits = 128
entropy = os.urandom(strength_bits // 8)
wallet_generator = bip39.Mnemonic('english')
mnemonic = wallet_generator.to_mnemonic(entropy)
assert wallet_generator.to_entropy(mnemonic) == entropy  # see, bijective!

# Or specify the mnemonic directly if you prefer:
mnemonic = 'aware report movie exile buyer drum poverty supreme gym oppose float elegant'
passphrase = 'test'

seed = bip39.Mnemonic.to_seed(mnemonic, passphrase=passphrase)
key = BIP32Key.fromEntropy(seed)
account_number = 0
i = 0
print "Address: " + key.ChildKey(44 + BIP32_HARDEN) \
         .ChildKey(0 + BIP32_HARDEN) \
         .ChildKey(account_number + BIP32_HARDEN) \
         .ChildKey(0) \
         .ChildKey(i) \
         .Address()

Và tôi đã xác minh nó bằng cách sử dụng https://iancoleman.io/bip39/#english rằng địa chỉ được tạo thực sự là địa chỉ đầu tiên mà trang web này được tạo. Tuy nhiên, tôi cũng muốn có được các cặp khóa công khai và riêng tư bằng cách sử dụng cùng một thư viện này. Ban đầu tôi đã thử:

print "Public Key: " + Base58.check_encode(key.ChildKey(44 + BIP32_HARDEN) \
         .ChildKey(0 + BIP32_HARDEN) \
         .ChildKey(account_number + BIP32_HARDEN) \
         .ChildKey(0) \
         .ChildKey(i) \
         .PublicKey())

print "Private Key: " + Base58.check_encode(key.ChildKey(44 + BIP32_HARDEN) \
         .ChildKey(0 + BIP32_HARDEN) \
         .ChildKey(account_number + BIP32_HARDEN) \
         .ChildKey(0) \
         .ChildKey(i) \
         .PrivateKey())

Tuy nhiên, đầu ra của hai cuộc gọi này không giống với các cuộc gọi được cung cấp bởi trang web ở trên cho cùng một địa chỉ.

Vì vậy, câu hỏi của tôi là: cách thích hợp để tôi tạo ra các cặp khóa công khai và riêng tư là gì?

Chỉnh sửa: Để làm rõ, để biết chính xác ghi nhớ và cụm mật khẩu ở trên, trang web tôi đang sử dụng để tham khảo cho tôi biết địa chỉ đầu tiên và bàn phím nên là:

Hướng dẫn python mnemonic to private key - python ghi nhớ thành khóa riêng tư

Mặc dù đầu ra của mã Python ở trên là:

Address: 1K6WQtD7bLQ5nQ14GyBV33mBWSbkiRKhQs
Public Key: 62Yi9HBYYagf8CY1Ve2fquHKjBqAA7GFjGUUtkUHbkP5PHzv3W
Private Key: EGHMsAp7nY7Jo9F589zCU227KBLTDhiwRq5vYVvRVZxJNPJn4

Vì vậy, địa chỉ khớp, nhưng không phải là bàn phím.

python-mnemonic

Ví BIP32 là gì?

BIP 32 là đề xuất cải tiến Bitcoin đã đưa ra tiêu chuẩn của ví xác định phân cấp (HD) và các khóa mở rộng cho Bitcoin. BIP 32 là một cải tiến đáng kể cho ví bitcoin theo nhiều cách.

Việc thực hiện tham chiếu BIP-0039: Mã ghi nhớ để tạo khóa xác định

trừu tượng

Giấy Bip

Xem https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki để biết thông số kỹ thuật đầy đủ

Cài đặt

Để cài đặt thư viện này và các phụ thuộc của nó sử dụng:

print "Public Key: " + Base58.check_encode(key.ChildKey(44 + BIP32_HARDEN) \
         .ChildKey(0 + BIP32_HARDEN) \
         .ChildKey(account_number + BIP32_HARDEN) \
         .ChildKey(0) \
         .ChildKey(i) \
         .PublicKey())

print "Private Key: " + Base58.check_encode(key.ChildKey(44 + BIP32_HARDEN) \
         .ChildKey(0 + BIP32_HARDEN) \
         .ChildKey(account_number + BIP32_HARDEN) \
         .ChildKey(0) \
         .ChildKey(i) \
         .PrivateKey())
7

Ví dụ sử dụng

Nhập thư viện vào dự án Python thông qua:

from mnemonic import Mnemonic

Khởi tạo thể hiện lớp, chọn từ từ điển có sẵn:

  • Anh
  • chinese_simplified
  • chinese_traditional
  • người Pháp
  • người Ý
  • tiếng Nhật
  • Hàn Quốc
  • người Tây Ban Nha

mnemo = Mnemonic(language)
mnemo = Mnemonic("english")

Tạo danh sách từ được đưa ra sức mạnh (128 - 256):

words = mnemo.generate(strength=256)

Đưa ra danh sách từ và cụm mật khẩu tùy chỉnh (ví dụ trống), tạo hạt giống:

seed = mnemo.to_seed(words, passphrase="")

Đưa ra danh sách từ, tính toán entropy gốc:

entropy = mnemo.to_entropy(words)

Thư viện tiện ích BIP

Hướng dẫn python mnemonic to private key - python ghi nhớ thành khóa riêng tư

Giới thiệu

Gói này cho phép tạo ra mnemonics, hạt giống, khóa riêng/công cộng và địa chỉ cho các loại tiền điện tử khác nhau. Đặc biệt:

  • MNEMONIC VÀ SEED SVERATION Theo định nghĩa của BIP-0039
  • Mã hóa khóa/giải mã riêng tư như được định nghĩa bởi BIP-0038
  • Khóa dẫn phái từ được định nghĩa bởi:
    • BIP-0032
    • SLIP-0010
    • BIP32-ED25519 (Khovratovich/Law)
  • Đạo hàm của một hệ thống các phím như được định nghĩa bởi:
    • BIP-0044
    • BIP-0049 (Bitcoin Segwit)
    • BIP-0084 (Segwit bản địa Bitcoin)
    • BIP-0086 (Bitcoin Taproot)
    • CIP-1852
  • MNEMONIC VÀ SEED SENTRATION CHO NỀN TẢNG (Hệ sinh thái Polkadot/Kusama)
  • Khóa dẫn xuất cho chất nền (Hệ sinh thái Polkadot/Kusama, cùng của Polkadot-JS)
  • Chìa khóa và địa chỉ Thế hệ cho Cardano (Byron-Legacy, Byron-Icarus và Shelley, cùng sổ cái và ví Adalite/Yoroi)
  • MNEMONIC VÀ SEED SVERATION cho Monero
  • Chìa khóa và địa chỉ/thế hệ phụ cho Monero (cùng một ví Monero chính thức)
  • Mnemonic và tạo hạt cho Algorand (Algorand 25 từ Mnemonic)
  • MNEMONIC VÀ SEED SELEATION như ví điện tử (V1 và V2)
  • Khóa dẫn xuất như ví điện (V1 và V2)

Các chức năng được triển khai khác:

  • Phân tích con đường dẫn xuất BIP-0032
  • Đường dẫn dẫn xuất phát cơ chất
  • Tuần tự hóa khóa mở rộng như được định nghĩa bởi SLIP-0032
  • Mã hóa/giải mã địa chỉ cho tất cả các đồng tiền được hỗ trợ
  • Mã hóa/giải mã wif
  • Encode/Decode Base58 và Base58 Monero
  • Mã hóa/giải mã SS58
  • Mã hóa/giải mã bech32 và bech32m
  • Mã hóa/giải mã Bitcoin Cash Bech32
  • Nhận địa chỉ tài khoản mã thông báo cho mã thông báo SPL (tức là mã thông báo Solana)

Phụ thuộc gói:

  • CBOR2 để mã hóa/giải mã CBOR
  • CRCMOD cho tính toán CRC
  • pycryptodome cho các chức năng mật mã
  • trùng khớp với đường cong Secp256K1
  • ECDSA cho các đường cong NIST256P1 và SECP256K1
  • ED25519-BLAKE2B cho đường cong ED25519-BLAKE2B
  • Pynacl cho đường cong ED25519
  • PY-SR25519-Bindings cho đường cong SR25519

Xin lưu ý rằng, đối với thư viện PY-SR25519-Bindings, phải cài đặt Rust được cài đặt.

Tiền hỗ trợ

Tiền BIP được hỗ trợ:

  • Mạng Akash
  • Algorand
  • Avalanche (tất cả 3 chuỗi)
  • Axelar
  • Giao thức ban nhạc
  • Chuỗi binance
  • Chuỗi thông minh Binance
  • Bitcoin (và mạng thử nghiệm liên quan)
  • Bitcoin Cash (và mạng thử nghiệm liên quan)
  • Bitcoin Cash Simple Sổ cái Sổ cái (và mạng thử nghiệm liên quan)
  • BitcoInsv (và mạng thử nghiệm liên quan)
  • Cardano (Byron-Legacy, Byron-Icarus và Shelley)
  • Celo
  • Certik
  • Vũ trụ
  • Dash (và mạng thử nghiệm liên quan)
  • Dogecoin (và mạng thử nghiệm liên quan)
  • ECASH (và mạng thử nghiệm liên quan)
  • Elrond
  • EOS
  • ERGO (và mạng thử nghiệm liên quan)
  • Ethereum
  • Ethereum Classic
  • Fantom Opera
  • Filecoin
  • Harmony One (Địa chỉ Ethereum và Cosmos)
  • Chuỗi Huobi Heco
  • Mạng Iris
  • Kava
  • Kusama (dựa trên BIP44 và ED25519 SLIP-0010, như TrustWallet, nó sẽ không tạo ra cùng một địa chỉ của Polkadot-JS)
  • Litecoin (và mạng thử nghiệm liên quan)
  • Monero (dựa trên BIP44 và SECP256K1 hoặc ED25519 SLIP-0010, nó sẽ không tạo ra các địa chỉ tương tự của ví chính thức, nhưng nó hỗ trợ thế hệ con)
  • Nano
  • Giao thức gần
  • Neo
  • Chuỗi OKEX (Địa chỉ Ethereum và Cosmos)
  • Bản thể học
  • Thẩm thấu
  • Polkadot (dựa trên BIP44 và ED25519 Slip-0010, như TrustWallet, nó sẽ không tạo ra các địa chỉ tương tự của Polkadot-JS)
  • Đa giác
  • Gợn sóng
  • Mạng bí mật
  • Solana
  • Thuộc về sao
  • TERRA
  • Tezos
  • Mạng Theta
  • Tron
  • Vechain
  • Bờ vực
  • ZCASH (và mạng thử nghiệm liên quan)
  • Zilliqa

Các đồng tiền được hỗ trợ:

  • Acala
  • BIFROST
  • Chainx
  • Phần mềm
  • Karura
  • Kusama
  • Mặt trăng
  • Dòng sông trăng
  • Mạng phala
  • Mạng plasm
  • Sora
  • Stafi
  • Polkadot
  • Đồng xu cơ chất chung

Đối với những gì liên quan đến Monero, cũng có thể tạo ra các địa chỉ tương tự của ví chính thức mà không cần sử dụng đạo hàm BIP44.

Rõ ràng, đối với những đồng tiền hỗ trợ các hợp đồng thông minh (ví dụ: Ethereum, Tron, ...), các khóa và địa chỉ được tạo là hợp lệ cho tất cả các mã thông báo liên quan.

Cài đặt gói

Đối với đường cong SECP256K1, có thể sử dụng thư viện Coincurve hoặc ECDSA. Coincurve nhanh hơn nhiều vì đây là một trình bao bọc Python cho thư viện SecP256K1 C, trong khi ECDSA là một triển khai Python thuần túy. Theo mặc định Coincurve sẽ được sử dụng, nhưng có thể vô hiệu hóa nó khi cài đặt.
By default coincurve will be used, but it's possible to disable it when installing.

Để cài đặt gói:

  • Cài đặt mặc định (Coincurve sẽ được sử dụng cho SECP256K1)

    • Sử dụng PIP, từ thư mục này (cục bộ):

        pip install .
      
    • Sử dụng PIP, từ PYPI:

        pip install bip_utils
      
  • Cài đặt thay thế (ECDSA sẽ được sử dụng cho SECP256K1)

    • Sử dụng setuptools:

      print "Public Key: " + Base58.check_encode(key.ChildKey(44 + BIP32_HARDEN) \
               .ChildKey(0 + BIP32_HARDEN) \
               .ChildKey(account_number + BIP32_HARDEN) \
               .ChildKey(0) \
               .ChildKey(i) \
               .PublicKey())
      
      print "Private Key: " + Base58.check_encode(key.ChildKey(44 + BIP32_HARDEN) \
               .ChildKey(0 + BIP32_HARDEN) \
               .ChildKey(account_number + BIP32_HARDEN) \
               .ChildKey(0) \
               .ChildKey(i) \
               .PrivateKey())
      
      0
    • Sử dụng PIP, từ thư mục này (cục bộ):

      print "Public Key: " + Base58.check_encode(key.ChildKey(44 + BIP32_HARDEN) \
               .ChildKey(0 + BIP32_HARDEN) \
               .ChildKey(account_number + BIP32_HARDEN) \
               .ChildKey(0) \
               .ChildKey(i) \
               .PublicKey())
      
      print "Private Key: " + Base58.check_encode(key.ChildKey(44 + BIP32_HARDEN) \
               .ChildKey(0 + BIP32_HARDEN) \
               .ChildKey(account_number + BIP32_HARDEN) \
               .ChildKey(0) \
               .ChildKey(i) \
               .PrivateKey())
      
      1
    • Sử dụng PIP, từ PYPI:

      print "Public Key: " + Base58.check_encode(key.ChildKey(44 + BIP32_HARDEN) \
               .ChildKey(0 + BIP32_HARDEN) \
               .ChildKey(account_number + BIP32_HARDEN) \
               .ChildKey(0) \
               .ChildKey(i) \
               .PublicKey())
      
      print "Private Key: " + Base58.check_encode(key.ChildKey(44 + BIP32_HARDEN) \
               .ChildKey(0 + BIP32_HARDEN) \
               .ChildKey(account_number + BIP32_HARDEN) \
               .ChildKey(0) \
               .ChildKey(i) \
               .PrivateKey())
      
      2

Cài đặt thay thế (ECDSA sẽ được sử dụng cho SECP256K1) if you are using an Apple M1, please make sure to update coincurve to version 17.0.0 otherwise it won't work.

Sử dụng setuptools:

print "Public Key: " + Base58.check_encode(key.ChildKey(44 + BIP32_HARDEN) \
         .ChildKey(0 + BIP32_HARDEN) \
         .ChildKey(account_number + BIP32_HARDEN) \
         .ChildKey(0) \
         .ChildKey(i) \
         .PublicKey())

print "Private Key: " + Base58.check_encode(key.ChildKey(44 + BIP32_HARDEN) \
         .ChildKey(0 + BIP32_HARDEN) \
         .ChildKey(account_number + BIP32_HARDEN) \
         .ChildKey(0) \
         .ChildKey(i) \
         .PrivateKey())
3

Lưu ý: Nếu bạn đang sử dụng Apple M1, vui lòng đảm bảo cập nhật Coincurve lên phiên bản 17.0.0 nếu không nó sẽ không hoạt động.

print "Public Key: " + Base58.check_encode(key.ChildKey(44 + BIP32_HARDEN) \
         .ChildKey(0 + BIP32_HARDEN) \
         .ChildKey(account_number + BIP32_HARDEN) \
         .ChildKey(0) \
         .ChildKey(i) \
         .PublicKey())

print "Private Key: " + Base58.check_encode(key.ChildKey(44 + BIP32_HARDEN) \
         .ChildKey(0 + BIP32_HARDEN) \
         .ChildKey(account_number + BIP32_HARDEN) \
         .ChildKey(0) \
         .ChildKey(i) \
         .PrivateKey())
4

Để chạy các bài kiểm tra:

print "Public Key: " + Base58.check_encode(key.ChildKey(44 + BIP32_HARDEN) \
         .ChildKey(0 + BIP32_HARDEN) \
         .ChildKey(account_number + BIP32_HARDEN) \
         .ChildKey(0) \
         .ChildKey(i) \
         .PublicKey())

print "Private Key: " + Base58.check_encode(key.ChildKey(44 + BIP32_HARDEN) \
         .ChildKey(0 + BIP32_HARDEN) \
         .ChildKey(account_number + BIP32_HARDEN) \
         .ChildKey(0) \
         .ChildKey(i) \
         .PrivateKey())
5

Hoặc bạn có thể cài đặt TOX:
For quick test:

print "Public Key: " + Base58.check_encode(key.ChildKey(44 + BIP32_HARDEN) \
         .ChildKey(0 + BIP32_HARDEN) \
         .ChildKey(account_number + BIP32_HARDEN) \
         .ChildKey(0) \
         .ChildKey(i) \
         .PublicKey())

print "Private Key: " + Base58.check_encode(key.ChildKey(44 + BIP32_HARDEN) \
         .ChildKey(0 + BIP32_HARDEN) \
         .ChildKey(account_number + BIP32_HARDEN) \
         .ChildKey(0) \
         .ChildKey(i) \
         .PrivateKey())
6

Và sau đó chỉ cần chạy nó:

  • BIP-0039
  • Điều này sẽ chạy phạm vi bảo hiểm mã với các phiên bản Python khác nhau và thực hiện phân tích mã và kiểu mã. Để kiểm tra nhanh:
  • Mô -đun Mô tả
  • Algorand Mnemonic
  • BIP-0038
  • BIP-0032
  • BIP-0044
  • Electrum mnemonic
  • Monero Mnemonic
  • Cardano
  • Electrum
  • Monero

Cơ chất

Thư viện tiện ích

Tài liệu

Tài liệu thư viện có sẵn tại BIP-UTILS.READTHEDOCS.IO.

Ví dụ mã

Đối với một số ví dụ mã hoàn chỉnh (từ tạo khóa đến tạo khóa), hãy tham khảo thư mục ví dụ.

  • Mua cho tôi một ly cà phê
  • Bạn biết đấy, tôi là người Ý và tôi thích uống cà phê (đặc biệt là trong khi mã hóa 😃). Vì vậy, nếu bạn muốn mua cho tôi một cái:

BTC:

print "Public Key: " + Base58.check_encode(key.ChildKey(44 + BIP32_HARDEN) \
         .ChildKey(0 + BIP32_HARDEN) \
         .ChildKey(account_number + BIP32_HARDEN) \
         .ChildKey(0) \
         .ChildKey(i) \
         .PublicKey())

print "Private Key: " + Base58.check_encode(key.ChildKey(44 + BIP32_HARDEN) \
         .ChildKey(0 + BIP32_HARDEN) \
         .ChildKey(account_number + BIP32_HARDEN) \
         .ChildKey(0) \
         .ChildKey(i) \
         .PrivateKey())
8

ERC20/BEP20: print "Public Key: " + Base58.check_encode(key.ChildKey(44 + BIP32_HARDEN) \ .ChildKey(0 + BIP32_HARDEN) \ .ChildKey(account_number + BIP32_HARDEN) \ .ChildKey(0) \ .ChildKey(i) \ .PublicKey()) print "Private Key: " + Base58.check_encode(key.ChildKey(44 + BIP32_HARDEN) \ .ChildKey(0 + BIP32_HARDEN) \ .ChildKey(account_number + BIP32_HARDEN) \ .ChildKey(0) \ .ChildKey(i) \ .PrivateKey()) 9

Cảm ơn bạn rất nhiều vì sự hỗ trợ của bạn.

Làm thế nào tôi có thể nhận được một cụm từ ghi nhớ từ một khóa riêng?

Description..
Java. // Sử dụng ghi nhớ để khôi phục khóa riêng. PrivateKey PrivateKey = PrivateKey. FromMnemonic (Mnemonic); ....
JavaScript. // Sử dụng một bản ghi nhớ được phục hồi để khôi phục khóa riêng. const recomedMnemonic = Await Mnemonic. từ chống chống (Mnemonic. ....
Đi. RecoveredKey, err: = Hedera. PrivateKeyFrommnemonic (Mnemonic, "").

Mnemonic có giống như khóa riêng không?

2 |Nói cách khác, cụm từ ghi nhớ là một dạng khác của khóa riêng, nó chuyển đổi khóa riêng 64 bit thành một số từ tiếng Anh phổ biến để dễ ghi nhớ hơn.the mnemonic phrase is another form of the private key, it converts a 64-bit private key into several common English words to be easier to memorize.

Python ghi nhớ là gì?

Python-mnemonic Nó bao gồm hai phần: tạo ra mnenomic và chuyển đổi nó thành hạt nhị phân.Hạt này sau đó có thể được sử dụng để tạo ví xác định bằng BIP-0032 hoặc các phương pháp tương tự.generating the mnenomic, and converting it into a binary seed. This seed can be later used to generate deterministic wallets using BIP-0032 or similar methods.

Ví BIP32 là gì?

BIP 32 là đề xuất cải tiến Bitcoin đã đưa ra tiêu chuẩn của ví xác định phân cấp (HD) và các khóa mở rộng cho Bitcoin.BIP 32 là một cải tiến đáng kể cho ví bitcoin theo nhiều cách.the Bitcoin Improvement Proposal which introduced the standard of Hierarchical Deterministic (HD) wallets and extended keys to Bitcoin. BIP 32 was a significant improvement for Bitcoin wallets in several ways.