讓我們假設Bob和Alice希望彼此交換訊息。他們想要分享一些需要在網際網路上交換的資訊。他們害怕這些資訊會被網際網路上的其他人修改。因此,他們在資訊交換之前就決定在他們之間共享一個金鑰。現在,Bob使用金鑰加密訊息並將密文傳遞給Alice。在這個場景中,Bob並不擔心在網際網路上交換這個密文,因為即使有人修改了密文,Alice也會知道訊息被篡改了,可以請求Bob再次傳送密文。只有在金鑰的幫助下,Alice才能將密文解密成Bob傳送的訊息。這是密碼世界裡的老技術了。一些最著名的加密術是Blowfish、AES、RC4、DES、RC5和RC6。廣泛使用的對稱演算法有AES-128、AES-192和AES-256。
非稱加密技術
在相同的場景中,Bob使用Alice共享的公鑰加密訊息並在網際網路上將密文傳送給Alice。Alice使用私鑰將密文解密。現在,如果對密文有任何篡改,Alice可以很容易地用這種加密方法檢測到。這是當今世界最常用的加密機制。廣泛應用的非對稱加密術有RSA、DSA、橢圓曲線密碼學。
因為區塊鏈是一個加密鏈,所以我們在任何地方都可以使用非對稱加密技術來滿足所有的密碼需求。
這個私鑰和公鑰是什麼?私鑰是隨機數字的一個組合。這可以是不同種類的。我們在區塊鏈中使用十六進位制值來建立私鑰。您可以發現,鍵序列將包含從0到9的字元和從a到f的字元,它們將使用不同的隨機數生成器生成。
基於這個私鑰,使用特定的加密演算法生成一個公鑰。公鑰是私鑰的雜湊函式。雜湊函式用於建立一個固定長度的值。這個函式的作用是,它作為輸入字元的不確定長度,並總是產生固定長度的值,這被稱為“摘要”。
下面是生成私鑰、公鑰和錢包地址的python程式碼
import os import ecdsa import hashlib import base58 import codecs from Crypto.Hash import keccak #Create Ethereum Private key private_key = os.urandom(32).encode(“hex”) print(“Private key: “ + private_key) # Create Ethereum Public Key privatekey_bytes = codecs.decode(private_key, ‘hex’) # Get ECDSA public key key = ecdsa.SigningKey.from_string(privatekey_bytes, curve=ecdsa.SECP256k1).verifying_key key_bytes = key.to_string() ethereum_public_key = codecs.encode(key_bytes, ‘hex’) print(“Ethereum Public Key “ + ethereum_public_key) # Create Ethereum Wallet Address public_key_bytes = codecs.decode(ethereum_public_key, ‘hex’) print(“Public Key Bytes “ + public_key_bytes) keccak_hash = keccak.new(digest_bits=256) keccak_hash.update(public_key_bytes) keccak_digest = keccak_hash.hexdigest() print(“Keccak Digest Value “ + keccak_digest) # Take last 20 bytes — Standard Ethereum Address Format wallet_length = 40 wallet = ‘0x’ + keccak_digest[-wallet_length:] print(“Ethereum Wallet Address “ + wallet) |
· 從公鑰開始(128個字元/ 64個位元組)
· 以公鑰的Keccak-256雜湊值為例。現在應該有一個64字元/ 32位元組的字串。
· 取這個公鑰(Keccak-256)的最後40個字元/ 20個位元組。或者,換句話說,刪除前24個字元/ 12個位元組。這40個字元/ 20個位元組就是地址。當字首為0x時,它變成42個字元長。
因此,錢包被建立。用這個錢包我們可以在網上交易。從上面的解釋可以看出,錢包不是我們存放代幣的地方。它本質上是一個公鑰,在使用者之間共享以進行交易。請記住,我們應該更加重視安全地建立私鑰。因為一切都基於私鑰。
私鑰->公鑰->錢包建立
建立私鑰、公鑰和錢包的整個過程都應該非常安全,以確保駭客不會染指我們的錢包;-)。
如果你覺得我錯過了什麼,一定要指出來。因為這是我第一次寫區塊鏈,我可能做了錯誤一些假設,所以我希望你能幫助我改正自己。謝謝。
更多區塊鏈資訊:www.qukuaiwang.com.cn/news