區(qū)塊鏈錢包的定義及相關(guān)概念解析
根據(jù)韋氏詞典,錢包的定義是“旅行中攜帶各種物品的袋子”。當(dāng)我們使用與區(qū)塊鏈相關(guān)的概念時(shí),我們會(huì)使用我們對錢包的預(yù)想意義,即攜帶加密貨幣。
比特幣向我們大多數(shù)人介紹了區(qū)塊鏈技術(shù)。除了那些有學(xué)識(shí)的人,我們都總認(rèn)為區(qū)塊鏈和比特幣是同義詞。我們不區(qū)分這兩者。但是,比特幣只是區(qū)塊鏈技術(shù)的應(yīng)用之一。當(dāng)我冒險(xiǎn)進(jìn)入加密貨幣世界時(shí),使用了一系列概念都很混亂的術(shù)語。其中一個(gè)詞就是“錢包”。
從我年輕的時(shí)候起,我就對錢包情有獨(dú)鐘。我們大多數(shù)人都認(rèn)為這是一種時(shí)尚宣言。所以,當(dāng)區(qū)塊鏈錢包被介紹給我的時(shí)候,我所想到的就是為了在加密貨幣世界里酷一點(diǎn),我應(yīng)該擁有一個(gè)很酷的錢包。僅此而已。
區(qū)塊鏈錢包不是存儲(chǔ)加密貨幣的對象,因此您可以隨身攜帶它。這就是我所想的,因?yàn)樗c“錢包”在世俗意義上是直接相關(guān)的,也就是說,在錢包里,代幣是存在的。我的印象是,如果我想在加密貨幣世界里買任何東西,我需要從錢包里拿出代幣然后花掉它。但事實(shí)遠(yuǎn)非我所想。
讓我向你們介紹一些概念。
Ethereum和Bitcoin基于區(qū)塊鏈技術(shù)。我將使用Ethereum區(qū)塊鏈來解釋這些概念,因?yàn)槲覀兇蠖鄶?shù)人都在交易ERC20代幣,并且以太坊掃描的有超過10萬個(gè)令牌正在流通中——https://etherscan.io/token
私鑰、公鑰和錢包
密碼學(xué)包含兩種類型——對稱和非對稱。在對稱密碼體制中,相同的密鑰用于加密和解密數(shù)據(jù),而在非對稱密碼體制中,不同的密鑰用于不同的加密和解密。讓我詳細(xì)解釋一下。
對稱加密技術(shù)
讓我們假設(shè)Bob和Alice希望彼此交換消息。他們想要分享一些需要在互聯(lián)網(wǎng)上交換的信息。他們害怕這些信息會(huì)被互聯(lián)網(wǎng)上的其他人修改。因此,他們在信息交換之前就決定在他們之間共享一個(gè)密鑰?,F(xiàn)在,Bob使用密鑰加密消息并將密文傳遞給Alice。在這個(gè)場景中,Bob并不擔(dān)心在互聯(lián)網(wǎng)上交換這個(gè)密文,因?yàn)榧词褂腥诵薷牧嗣芪?,Alice也會(huì)知道消息被篡改了,可以請求Bob再次發(fā)送密文。只有在密鑰的幫助下,Alice才能將密文解密成Bob發(fā)送的消息。這是密碼世界里的老技術(shù)了。一些最著名的加密術(shù)是Blowfish、AES、RC4、DES、RC5和RC6。廣泛使用的對稱算法有AES-128、AES-192和AES-256。
非稱加密技術(shù)
在相同的場景中,Bob使用Alice共享的公鑰加密消息并在互聯(lián)網(wǎng)上將密文發(fā)送給Alice。Alice使用私鑰將密文解密?,F(xiàn)在,如果對密文有任何篡改,Alice可以很容易地用這種加密方法檢測到。這是當(dāng)今世界最常用的加密機(jī)制。廣泛應(yīng)用的非對稱加密術(shù)有RSA、DSA、橢圓曲線密碼學(xué)。
因?yàn)閰^(qū)塊鏈?zhǔn)且粋€(gè)加密鏈,所以我們在任何地方都可以使用非對稱加密技術(shù)來滿足所有的密碼需求。
這個(gè)私鑰和公鑰是什么?私鑰是隨機(jī)數(shù)字的一個(gè)組合。這可以是不同種類的。我們在區(qū)塊鏈中使用十六進(jìn)制值來創(chuàng)建私鑰。您可以發(fā)現(xiàn),鍵序列將包含從0到9的字符和從a到f的字符,它們將使用不同的隨機(jī)數(shù)生成器生成。
基于這個(gè)私鑰,使用特定的加密算法生成一個(gè)公鑰。公鑰是私鑰的哈希函數(shù)。哈希函數(shù)用于創(chuàng)建一個(gè)固定長度的值。這個(gè)函數(shù)的作用是,它作為輸入字符的不確定長度,并總是產(chǎn)生固定長度的值,這被稱為“摘要”。
下面是生成私鑰、公鑰和錢包地址的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是什么?網(wǎng)址:https://keccak.team/keccak。Keccak是一個(gè)通用的密碼函數(shù)。它最著名的是哈希函數(shù),不過它也可以用于身份驗(yàn)證、(經(jīng)過身份驗(yàn)證的)加密由偽隨機(jī)數(shù)生成。其結(jié)構(gòu)是極其簡單的海綿結(jié)構(gòu),內(nèi)部使用創(chuàng)新的Keccak-f密碼排列。
正如我之前解釋的那樣,哈希函數(shù)需要無限個(gè)字符,并產(chǎn)生256位輸出。
同時(shí),
8位= 1字節(jié)
256位將產(chǎn)生32字節(jié)的數(shù)據(jù)。
地址創(chuàng)建過程解釋如下:
· 從公鑰開始(128個(gè)字符/ 64個(gè)字節(jié))
· 以公鑰的Keccak-256哈希值為例。現(xiàn)在應(yīng)該有一個(gè)64字符/ 32字節(jié)的字符串。
· 取這個(gè)公鑰(Keccak-256)的最后40個(gè)字符/ 20個(gè)字節(jié)?;蛘?,換句話說,刪除前24個(gè)字符/ 12個(gè)字節(jié)。這40個(gè)字符/ 20個(gè)字節(jié)就是地址。當(dāng)前綴為0x時(shí),它變成42個(gè)字符長。
因此,錢包被創(chuàng)建。用這個(gè)錢包我們可以在網(wǎng)上交易。從上面的解釋可以看出,錢包不是我們存放代幣的地方。它本質(zhì)上是一個(gè)公鑰,在用戶之間共享以進(jìn)行交易。請記住,我們應(yīng)該更加重視安全地創(chuàng)建私鑰。因?yàn)橐磺卸蓟谒借€。
私鑰-》公鑰-》錢包創(chuàng)建
創(chuàng)建私鑰、公鑰和錢包的整個(gè)過程都應(yīng)該非常安全,以確保黑客不會(huì)染指我們的錢包;-)。