根據韋氏詞典,錢包的定義是“旅行中攜帶各種物品的袋子”。當我們使用與區塊鏈相關的概念時,我們會使用我們對錢包的預想意義,即攜帶加密貨幣。
比特幣向我們大多數人介紹了區塊鏈技術。除了那些有學識的人,我們都總認為區塊鏈和比特幣是同義詞。我們不區分這兩者。但是,比特幣只是區塊鏈技術的應用之一。當我冒險進入加密貨幣世界時,使用了一系列概念都很混亂的術語。其中一個詞就是“錢包”。
從我年輕的時候起,我就對錢包情有獨鐘。我們大多數人都認為這是一種時尚宣言。所以,當區塊鏈錢包被介紹給我的時候,我所想到的就是為了在加密貨幣世界里酷一點,我應該擁有一個很酷的錢包。僅此而已。
區塊鏈錢包不是存儲加密貨幣的對象,因此您可以隨身攜帶它。這就是我所想的,因為它與“錢包”在世俗意義上是直接相關的,也就是說,在錢包里,代幣是存在的。我的印象是,如果我想在加密貨幣世界里買任何東西,我需要從錢包里拿出代幣然后花掉它。但事實遠非我所想。
讓我向你們介紹一些概念。
Ethereum和Bitcoin基于區塊鏈技術。我將使用Ethereum區塊鏈來解釋這些概念,因為我們大多數人都在交易ERC20代幣,并且以太坊掃描的有超過10萬個令牌正在流通中——https://etherscan.io/token
私鑰、公鑰和錢包
密碼學包含兩種類型——對稱和非對稱。在對稱密碼體制中,相同的密鑰用于加密和解密數據,而在非對稱密碼體制中,不同的密鑰用于不同的加密和解密。讓我詳細解釋一下。
對稱加密技術
讓我們假設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)
公開密鑰-》地址
keccak是什么?網址:https://keccak.team/keccak。Keccak是一個通用的密碼函數。它最著名的是哈希函數,不過它也可以用于身份驗證、(經過身份驗證的)加密由偽隨機數生成。其結構是極其簡單的海綿結構,內部使用創新的Keccak-f密碼排列。
正如我之前解釋的那樣,哈希函數需要無限個字符,并產生256位輸出。
同時,
8位= 1字節
256位將產生32字節的數據。
地址創建過程解釋如下:
· 從公鑰開始(128個字符/ 64個字節)
· 以公鑰的Keccak-256哈希值為例。現在應該有一個64字符/ 32字節的字符串。
· 取這個公鑰(Keccak-256)的最后40個字符/ 20個字節。或者,換句話說,刪除前24個字符/ 12個字節。這40個字符/ 20個字節就是地址。當前綴為0x時,它變成42個字符長。
因此,錢包被創建。用這個錢包我們可以在網上交易。從上面的解釋可以看出,錢包不是我們存放代幣的地方。它本質上是一個公鑰,在用戶之間共享以進行交易。請記住,我們應該更加重視安全地創建私鑰。因為一切都基于私鑰。
私鑰-》公鑰-》錢包創建
創建私鑰、公鑰和錢包的整個過程都應該非常安全,以確保黑客不會染指我們的錢包;-)。
評論
查看更多