根据韦氏词典,钱包的定义是“旅行中携带各种物品的袋子”。当我们使用与区块链相关的概念时,我们会使用我们对钱包的预想意义,即携带加密货币。
比特币 向我们大多数人介绍了区块链技术。除了那些有学识的人,我们都总认为区块链和比特币是同义词。我们不区分这两者。但是,比特币只是区块链技术的应用之一。当我冒险进入加密货币世界时,使用了一系列概念都很混乱的术语。其中一个词就是“钱包”。
从我年轻的时候起,我就对钱包情有独钟。我们大多数人都认为这是一种时尚宣言。所以,当区块链钱包被介绍给我的时候,我所想到的就是为了在加密货币世界里酷一点,我应该拥有一个很酷的钱包。仅此而已。
区块链钱包不是存储加密货币的对象,因此您可以随身携带它。这就是我所想的,因为它与“钱包”在世俗意义上是直接相关的,也就是说,在钱包里,代币是存在的。我的印象是,如果我想在加密货币世界里买任何东西,我需要从钱包里拿出代币然后花掉它。但事实远非我所想。
让我向你们介绍一些概念。
Ethereum和Bitcoin基于区块链技术。我将使用Ethereum区块链来解释这些概念,因为我们大多数人都在交易ERC20代币,并且以太坊扫描的有超过10万个令牌正在流通中——https://ethe rs can .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
f rom Crypto.Hash import keccak
#Crea te 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个字符长。
因此,钱包被创建。用这个钱包我们可以在网上交易。从上面的解释可以看出,钱包不是我们存放代币的地方。它本质上是一个公钥,在用户之间共享以进行交易。请记住,我们应该更加重视安全地创建私钥。因为一切都基于私钥。
私钥-》公钥-》钱包创建
创建私钥、公钥和钱包的整个过程都应该非常安全,以确保黑客不会染指我们的钱包;-)。