[Day 43] 區塊鏈與人工智能的聯動應用:理論、技術與實踐
區塊鏈的隱私保護機制
隨著區塊鏈技術的廣泛應用,隱私保護成為了一個至關重要的問題。區塊鏈以其去中心化和透明性的特點,為數據管理和交易提供了新的方法。然而,這些特點也帶來了新的挑戰,尤其是在隱私保護方面。本文將深入探討區塊鏈的隱私保護機制,並通過多個代碼範例詳細解釋如何實現這些機制。
區塊鏈的隱私挑戰
在區塊鏈中,所有交易記錄都公開可見,這意味著任何人都可以查看交易的詳情。這種透明性對隱私保護構成了威脅。例如,在比特幣網絡中,雖然交易是匿名的,但通過分析交易模式,仍然有可能追踪到交易雙方的身份。因此,如何在保證區塊鏈的透明性的同時保護用戶的隱私成為了一個重要課題。
零知識證明
零知識證明(Zero-Knowledge Proof,ZKP)是一種密碼學技術,允許一方(證明者)向另一方(驗證者)證明某個陳述為真,而不透露任何除該陳述為真之外的信息。這種技術在區塊鏈隱私保護中具有廣泛應用。
以下是一個簡單的零知識證明範例:
from hashlib import sha256
import random# 設置秘密和哈希
secret = "my_secret"
hashed_secret = sha256(secret.encode()).hexdigest()# 証明者生成隨機數
r = random.randint(1, 100)# 証明者計算哈希(r)
hashed_r = sha256(str(r).encode()).hexdigest()# 验證者接收到hashed_secret和hashed_r,並且知道secret的哈希
# 現在驗證者需要驗證証明者知道secret,而不泄露secret# 証明者發送r和secret的哈希給驗證者
def verify_proof(hashed_secret, secret, r):if sha256(secret.encode()).hexdigest() == hashed_secret and sha256(str(r).encode()).hexdigest() == hashed_r:return Trueelse:return False# 驗證
print(verify_proof(hashed_secret, secret, r))
在這個範例中,証明者(Proof)使用隨機數 rrr 和秘密的哈希值 hashed_secrethashed\_secrethashed_secret 來創建一個證明。驗證者(Verifier)使用這些值來驗證証明者知道秘密,而不泄露秘密本身。
隱私保護機制之範例
區塊鏈隱私保護機制可以通過各種技術來實現。以下是一個使用環簽名(Ring Signature)技術的範例,這種技術可以在不泄露簽名者身份的情況下驗證交易的真實性。
import ecdsa
import hashlib# 環簽名參數設置
num_signers = 5
message = "This is a confidential transaction."# 生成簽名者密鑰對
keys = [ecdsa.SigningKey.generate() for _ in range(num_signers)]
pub_keys = [key.get_verifying_key() for key in keys]# 選擇簽名者
signer_index = 2
signer_key = keys[signer_index]# 簽名消息
def ring_sign(message, keys, signer_index):hashed_msg = hashlib.sha256(message.encode()).digest()signatures = []for i in range(num_signers):if i == signer_index:signatures.append(signer_key.sign(hashed_msg))else:signatures.append(ecdsa.SigningKey.generate().sign(hashed_msg))return signatures# 環簽名驗證
def ring_verify(message, signatures, pub_keys):hashed_msg = hashlib.sha256(message.encode()).digest()for i, pub_key in enumerate(pub_keys):try:pub_key.verify(signatures[i], hashed_msg)except ecdsa.BadSignatureError:return Falsereturn True# 簽名和驗證
signatures = ring_sign(message, keys, signer_index)
print(ring_verify(message, signatures, pub_keys))
在這個範例中,環簽名技術允許交易的簽名者在一組可能的簽名者中隱藏自己的身份。驗證者可以確認消息是由該組中的某個成員簽署的,但無法確定具體是哪一個成員。
Mimblewimble協議
Mimblewimble是一種區塊鏈隱私保護協議,它通過隱藏交易金額和地址來實現更高的隱私性。以下是一個Mimblewimble協議的基本範例:
import secrets# Mimblewimble交易參數設置
amount = 10
blinding_factor = secrets.token_bytes(32)# 創建承諾
def create_commitment(amount, blinding_factor):return hashlib.sha256((str(amount) + str(blinding_factor)).encode()).hexdigest()# 驗證承諾
def verify_commitment(commitment, amount, blinding_factor):return commitment == create_commitment(amount, blinding_factor)# 創建和驗證承諾
commitment = create_commitment(amount, blinding_factor)
print(verify_commitment(commitment, amount, blinding_factor))
在這個範例中,Mimblewimble協議使用盲化因子來隱藏交易金額和地址。交易的有效性通過驗證承諾來確認,而不泄露具體的交易信息。
閃電網絡
閃電網絡(Lightning Network)是一種區塊鏈二層擴展技術,它通過建立支付通道來實現快速且私密的交易。以下是一個簡單的閃電網絡交易範例:
class LightningNetwork:def __init__(self, initial_balance):self.balance = initial_balanceself.transactions = []def create_channel(self, partner, amount):if self.balance >= amount:self.balance -= amountpartner.balance += amountself.transactions.append((-amount, "Channel created"))partner.transactions.append((amount, "Channel created"))else:raise ValueError("Insufficient balance")def make_payment(self, partner, amount):if self.balance >= amount:self.balance -= amountpartner.balance += amountself.transactions.append((-amount, "Payment"))partner.transactions.append((amount, "Payment"))else:raise ValueError("Insufficient balance")# 創建閃電網絡節點
alice = LightningNetwork(100)
bob = LightningNetwork(50)# 創建支付通道並進行支付
alice.create_channel(bob, 20)
alice.make_payment(bob, 10)# 查看交易記錄
print(alice.transactions)
print(bob.transactions)
在這個範例中,Alice和Bob創建了一個支付通道,並在通道中進行交易。通過閃電網絡,這些交易在區塊鏈上不會公開可見,從而保護了交易的隱私。
Zcash與零知識證明
Zcash是一種基於零知識證明技術的加密貨幣,它允許用戶選擇性地隱藏交易信息。以下是一個使用Zcash的零知識證明範例:
from py_ecc import bn128# Zcash交易參數設置
sk = bn128.G1 # 私鑰
pk = bn128.multiply(bn128.G2, sk) # 公鑰
message = b"Confidential transaction"# 創建零知識證明
def create_zkp(sk, pk, message):commitment = bn128.add(bn128.multiply(bn128.G2, int.from_bytes(message, "big")), pk)proof = bn128.multiply(commitment, sk)return commitment, proof# 驗證零知識證明
def verify_zkp(pk, message, commitment, proof):expected_commitment = bn128.add(bn128.multiply(bn128.G2, int.from_bytes(message, "big")), pk)return commitment == expected_commitment and bn128.pairing(bn128.G1, commitment) == bn128.pairing(pk, proof)# 創建和驗證證明
commitment, proof = create_zkp(sk, pk, message)
print(verify_zkp(pk, message, commitment, proof))
在這個範例中,使用Zcash的零知識證明技術來隱藏交易信息。證明者創建一個承諾並生成一個證明,驗證者通過驗證這些值來確認交易的有效性,而不泄露具體的交易信息。
總結
區塊鏈的隱私保護機制是一個複雜且多層次的問題。本文通過多個技術範例詳細說明了如何在區塊鏈中實現隱私保護,包括零知識證明、環簽名、Mimblewimble協議、閃電網絡以及Zcash的零知識證明。這些技術在不同的應用場景中提供了有效的隱私保護方案,為區塊鏈技術的進一步發展奠定了基礎。
相关文章:
[Day 43] 區塊鏈與人工智能的聯動應用:理論、技術與實踐
區塊鏈的隱私保護機制 隨著區塊鏈技術的廣泛應用,隱私保護成為了一個至關重要的問題。區塊鏈以其去中心化和透明性的特點,為數據管理和交易提供了新的方法。然而,這些特點也帶來了新的挑戰,尤其是在隱私保護方面。本文將深入探討…...
【星海随笔】路由器的启动过程
路由器的启动过程 1.加电之后,ROM运行加电自检程序(Post),检查路由器的处理器、接口、内存等硬件设备。2.执行路由器中的启动程序(Bootstrap),搜索操作系统。路由器操作系统扩张部分可以从Flash RAM中装入,也可从 TFT…...
[翻译] Asset Administration Shells
关于资产管理外壳 (AAS) 资产管理外壳 (AAS) 是工业4.0中的关键概念,为产品、资源(如设备)和过程提供信息隐藏和更高层次的抽象。AAS 是技术和设备无关的机器可读描述,提供访问资产属性和功能的统一接口。与现有解决方案不同&…...
linux 常用磁盘维护命令
badblocks 功能说明:检查磁盘装置中损坏的区块。 语 法:badblocks [-svw][-b <区块大小>][-o <输出文件>][磁盘装置][磁盘区块数][启始区块] 补充说明:执行指令时须指定所要检查的磁盘装置,及此装置的磁盘区块数。…...
滑动窗口大总结!!!妈妈以后再也不担心我不会做滑动窗口啦~
写在前面:全部题都源于力扣 讲解题目一:最小覆盖子串题目二:字符串排列题目三:找所有字母异位词题目四:无重复字符的最长子串题目五:滑动窗口的最大值 讲解 滑动窗口算法技巧主要用来解决子数组问题&#…...
从地铁客流讲开来:客流统计与清分释义
一、常见的客流统计 1. 进站客流 定义:指在某个时间段内,乘客进入地铁站的数量。示例:如果某天早上8点到9点之间有5000人次进入地铁站,则这段时间内的进站客流为5000人次。 2. 出站客流 定义:指在某个时间段内&…...
《Excelize权威指南》新书发布
在数据洪流涌动的数字化时代,数据处理与分析已跃升为解锁无限洞察力的金钥匙,赋能商业智慧、重塑医疗健康版图、驱动教育科研创新。然而,当数据量级爆炸式增长,传统工具如 Excel 虽被誉为数据处理领域的常青树,其手动操…...
Go语言加Vue3零基础入门全栈班11 Go语言+gorm用户管理系统实战 2024年08月03日 课程笔记
概述 如果您没有Golang的基础,应该学习如下前置课程。 Golang零基础入门Golang面向对象编程Go Web 基础Go语言开发REST API接口_20240728Go语言操作MySQL开发用户管理系统API教程_20240729Redis零基础快速入门_20231227GoRedis开发用户管理系统API实战_20240730Mo…...
【设计模式】代理模式详解
1.简介 代理模式是常用的Java设计模式,该模式的特点是代理类与委托类共享相同的接口。代理类主要负责预处理消息、过滤消息、将消息转发给委托类,并在事后处理消息等。代理类与委托类之间通常存在关联关系,一个代理类对象与一个委托类对象关…...
Python变量和简单的数据类型
1、变量 massageHello python world! print(massage) massageHello world print(massage) 运行这个代码发现,同一个变量出现两个不同的结果 Hello python world! Hello world 在程序中,可随时修改变量的值&…...
切比雪夫距离
切比雪夫距离(Chebyshev Distance),又称棋盘距离或最大值距离,是一种用于测量两个点之间距离的度量方法。在二维平面上,切比雪夫距离定义为两个点之间的最大坐标差值。其公式如下: DChebyshevmax(∣x2−…...
计算机基础(Windows 10+Office 2016)教程 —— 第4章 计算机网络与Internet(下)
第4章 计算机网络与Internet 4.4 局域网4.4.1 局域网概述4.4.2 以太网4.4.3 令牌环网4.4.4 无线局域网 4.5 Internet4.5.1 Internet 概述4.5.2 Internet 的基本概念4.5.3 Internet 的接入4.5.4 万维网 4.6 Internet的应用4.6.1 电子邮件4.6.2 文件传输4.6.3 搜索引擎 4.4 局域网…...
机器学习用Python还是R?哪个更好一些?
选择使用Python还是R来进行机器学习取决于多个因素,包括个人偏好、项目需求以及可用的资源。这里我可以简要比较一下它们的优缺点: Python的优势: 通用性和灵活性: Python是一种通用编程语言,可以用于多种用途&#…...
4个自定义倒计时
<!DOCTYPE html> <html lang"zh-CN"><head><meta charset"UTF-8"><title>4个自定义倒计时</title><style>* {margin: 0;padding: 0;box-sizing: border-box;user-select: none;body {background: #0b1b2c;}}hea…...
linux系统编程中Shell脚本配置,及linux脚本中的man test
Shell脚本配置是指在脚本中设置各种参数、选项和环境,以确保脚本能够根据预期的需求和环境执行。配置可以包括变量设置、环境变量、命令选项和错误处理等。 1. 脚本开头的配置 Shebang 第一行通常是shebang,它告诉系统使用哪个解释器来执行脚本。例如…...
Win7虚拟机分享(已安装VMware Tools)
前言 之前写过VMware安装Win7并安装VMware tools的博客,但操作仍显繁琐。后来发现可以直接分享已经配置好的虚拟机,所有软件都是安装好的,解压即用。 一. VMware Win7虚拟机配置 已完成的配置和安装的软件 专业版Win7系统(已永久激活)VMware…...
CANOpen EMCY紧急报文介绍
什么是CANOpen紧急报文 CANOpen中的Emcy紧急报文用于当设备出现故障或警告时,向其它节点报告故障或警告使用的。如设备某个设备出现过压或过流时,就可以发送紧急报文。 紧急报文的格式 错误代码:是0x1003索引预定义错误字段的内容ÿ…...
JAVA项目
目录 一、前言 二、技术介绍 三、项目实现流程 四、论文流程参考 五、核心代码截图 专注于大学生实战开发、讲解和毕业答疑等辅导,获取源码后台 一、前言 在数字化音乐时代,个性化推荐已成为提升用户体验、促进音乐消费的重要手段。为此࿰…...
️ LangChain +Streamlit+ Llama :将对话式人工智能引入您的本地设备(下篇)
引言:种下一棵树最好的时间是十年前,其次是现在 书接上回:将对话式人工智能引入您的本地设备成为可能CSDNhttps://mp.csdn.net/mp_blog/creation/editor/140865426 目的:在这个大模型横行的时候,我们常用电脑如何开展大模型的工作…...
Kafka实战(Scala操作)
Kafka基础讲解部分 Kafka基础讲解部分 Kafka实战(Scala操作) 1、引入依赖 版本: <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.report…...
基于大模型的 UI 自动化系统
基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...
CTF show Web 红包题第六弹
提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框,很难让人不联想到SQL注入,但提示都说了不是SQL注入,所以就不往这方面想了 先查看一下网页源码,发现一段JavaScript代码,有一个关键类ctfs…...
智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql
智慧工地管理云平台系统,智慧工地全套源码,java版智慧工地源码,支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求,提供“平台网络终端”的整体解决方案,提供劳务管理、视频管理、智能监测、绿色施工、安全管…...
大型活动交通拥堵治理的视觉算法应用
大型活动下智慧交通的视觉分析应用 一、背景与挑战 大型活动(如演唱会、马拉松赛事、高考中考等)期间,城市交通面临瞬时人流车流激增、传统摄像头模糊、交通拥堵识别滞后等问题。以演唱会为例,暖城商圈曾因观众集中离场导致周边…...
Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)
引言:为什么 Eureka 依然是存量系统的核心? 尽管 Nacos 等新注册中心崛起,但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制,是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...
大语言模型(LLM)中的KV缓存压缩与动态稀疏注意力机制设计
随着大语言模型(LLM)参数规模的增长,推理阶段的内存占用和计算复杂度成为核心挑战。传统注意力机制的计算复杂度随序列长度呈二次方增长,而KV缓存的内存消耗可能高达数十GB(例如Llama2-7B处理100K token时需50GB内存&a…...
return this;返回的是谁
一个审批系统的示例来演示责任链模式的实现。假设公司需要处理不同金额的采购申请,不同级别的经理有不同的审批权限: // 抽象处理者:审批者 abstract class Approver {protected Approver successor; // 下一个处理者// 设置下一个处理者pub…...
MySQL 索引底层结构揭秘:B-Tree 与 B+Tree 的区别与应用
文章目录 一、背景知识:什么是 B-Tree 和 BTree? B-Tree(平衡多路查找树) BTree(B-Tree 的变种) 二、结构对比:一张图看懂 三、为什么 MySQL InnoDB 选择 BTree? 1. 范围查询更快 2…...
图解JavaScript原型:原型链及其分析 | JavaScript图解
忽略该图的细节(如内存地址值没有用二进制) 以下是对该图进一步的理解和总结 1. JS 对象概念的辨析 对象是什么:保存在堆中一块区域,同时在栈中有一块区域保存其在堆中的地址(也就是我们通常说的该变量指向谁&…...
【字节拥抱开源】字节团队开源视频模型 ContentV: 有限算力下的视频生成模型高效训练
本项目提出了ContentV框架,通过三项关键创新高效加速基于DiT的视频生成模型训练: 极简架构设计,最大化复用预训练图像生成模型进行视频合成系统化的多阶段训练策略,利用流匹配技术提升效率经济高效的人类反馈强化学习框架&#x…...
