密码学入门:区块链中的密码学原理

密码学入门:区块链中的密码学原理

大家好,我是欧阳瑞(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对密码学也有自己的理解------它总是用独特的方式标记自己的领地,这也许就是自然界的"数字签名"吧!

如果你对密码学感兴趣,欢迎留言交流!我是欧阳瑞,极客之路,永无止境!


技术栈:密码学 · 哈希函数 · 数字签名 · 区块链

相关推荐
SamChan9012 小时前
WebSocket实现PDF翻译进度实时推送:Go后端+React前端的完整方案
前端·websocket·pdf·c#·react·机器翻译
Web3_Daisy13 小时前
如何在Robinhood Chain创建 Uniswap V3 流动性池
大数据·人工智能·web3·区块链
名字还没想好☜13 小时前
React 受控输入框光标跳到末尾:格式化输入时的 selection 丢失 bug 与修复
前端·javascript·react.js·bug·react·next.js
同花顺期货通13 小时前
期货交割月持仓规则全解析:2026年个人交易者合规指南与展期策略
区块链
潜龙952715 小时前
Web3.0新测试方案
web3·区块链·新测试方案
想你依然心痛16 小时前
HarmonyOS 5.0智慧农业开发实战:构建分布式农业物联网与区块链农产品溯源系统
人工智能·分布式·物联网·区块链·智慧农业·harmonyos·开发实战
2601_962860151 天前
零数科技区块链平台服务六大领域,打造多个国家级示范项目
科技·区块链
The_Ticker1 天前
大宗商品行情API接入教程
开发语言·python·websocket·程序人生·区块链
IvorySQL1 天前
PG 日报|PG20 正式计划移除 refint 模块,官方指引迁移原生外键
数据库·人工智能·postgresql·开源·区块链
科技新芯1 天前
潮汛网:以“资讯前沿、内容多元、阅读便捷”为核心运营理念,成为优质互联网资讯门户
大数据·人工智能·区块链