密码学入门:区块链中的密码学原理
大家好,我是欧阳瑞(Rich Own)。今天想和大家聊聊密码学这个重要话题。作为一个Web3探索者,密码学是区块链的基础。今天就来分享一下区块链中常用的密码学原理。
为什么密码学很重要?
| 场景 | 说明 |
|---|---|
| 身份认证 | 验证用户身份 |
| 数据加密 | 保护敏感数据 |
| 数字签名 | 验证数据完整性 |
| 零知识证明 | 无需泄露信息证明 |
哈希函数
什么是哈希函数?
哈希函数将任意长度的数据转换为固定长度的哈希值。
特性
| 特性 | 说明 |
|---|---|
| 确定性 | 相同输入产生相同输出 |
| 单向性 | 无法从哈希值还原输入 |
| 抗碰撞 | 难以找到两个不同输入产生相同哈希 |
常用哈希函数
python
import hashlib
# SHA-256
hash = hashlib.sha256(b"Hello World").hexdigest()
print(hash)
# Keccak-256 (以太坊使用)
from Crypto.Hash import keccak
k = keccak.new(digest_bits=256)
k.update(b"Hello World")
print(k.hexdigest())
数字签名
ECDSA签名
python
from ecdsa import SigningKey, VerifyingKey, NIST256p
# 生成密钥对
sk = SigningKey.generate(curve=NIST256p)
vk = sk.get_verifying_key()
# 签名
message = b"Hello World"
signature = sk.sign(message)
# 验证
assert vk.verify(signature, message)
EdDSA签名
python
from cryptography.hazmat.primitives.asymmetric.ed25519 import Ed25519PrivateKey
# 生成密钥对
private_key = Ed25519PrivateKey.generate()
public_key = private_key.public_key()
# 签名
message = b"Hello World"
signature = private_key.sign(message)
# 验证
public_key.verify(signature, message)
非对称加密
python
from cryptography.hazmat.primitives.asymmetric import rsa, padding
from cryptography.hazmat.primitives import serialization, hashes
# 生成密钥对
private_key = rsa.generate_private_key(public_exponent=65537, key_size=2048)
public_key = private_key.public_key()
# 加密
message = b"Secret message"
ciphertext = public_key.encrypt(
message,
padding.OAEP(
mgf=padding.MGF1(algorithm=hashes.SHA256()),
algorithm=hashes.SHA256(),
label=None
)
)
# 解密
plaintext = private_key.decrypt(
ciphertext,
padding.OAEP(
mgf=padding.MGF1(algorithm=hashes.SHA256()),
algorithm=hashes.SHA256(),
label=None
)
)
零知识证明
zk-SNARKs
python
# 简化示例
class ZKProof:
def __init__(self, secret):
self.secret = secret
def prove(self):
# 生成证明
commitment = hash(self.secret)
challenge = hash(commitment)
response = self.secret + challenge
return (commitment, response)
def verify(commitment, response):
challenge = hash(commitment)
return hash(response - challenge) == commitment
实战案例:区块链交易签名
python
from ecdsa import SigningKey, NIST256p
import hashlib
class Transaction:
def __init__(self, sender, receiver, amount):
self.sender = sender
self.receiver = receiver
self.amount = amount
def sign(self, private_key):
data = f"{self.sender}{self.receiver}{self.amount}"
hash_data = hashlib.sha256(data.encode()).digest()
return private_key.sign(hash_data)
def verify_signature(self, public_key, signature):
data = f"{self.sender}{self.receiver}{self.amount}"
hash_data = hashlib.sha256(data.encode()).digest()
return public_key.verify(signature, hash_data)
总结
密码学是区块链的基石。从哈希函数到零知识证明,密码学保证了区块链的安全性和可靠性。
我的鬃狮蜥Hash对密码学也有自己的理解------它总是用独特的方式标记自己的领地,这也许就是自然界的"数字签名"吧!
如果你对密码学感兴趣,欢迎留言交流!我是欧阳瑞,极客之路,永无止境!
技术栈:密码学 · 哈希函数 · 数字签名 · 区块链