当前位置: 首页 > news >正文

[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 功能说明&#xff1a;检查磁盘装置中损坏的区块。 语 法&#xff1a;badblocks [-svw][-b <区块大小>][-o <输出文件>][磁盘装置][磁盘区块数][启始区块] 补充说明&#xff1a;执行指令时须指定所要检查的磁盘装置&#xff0c;及此装置的磁盘区块数。…...

滑动窗口大总结!!!妈妈以后再也不担心我不会做滑动窗口啦~

写在前面&#xff1a;全部题都源于力扣 讲解题目一&#xff1a;最小覆盖子串题目二&#xff1a;字符串排列题目三&#xff1a;找所有字母异位词题目四&#xff1a;无重复字符的最长子串题目五&#xff1a;滑动窗口的最大值 讲解 滑动窗口算法技巧主要用来解决子数组问题&#…...

从地铁客流讲开来:客流统计与清分释义

一、常见的客流统计 1. 进站客流 定义&#xff1a;指在某个时间段内&#xff0c;乘客进入地铁站的数量。示例&#xff1a;如果某天早上8点到9点之间有5000人次进入地铁站&#xff0c;则这段时间内的进站客流为5000人次。 2. 出站客流 定义&#xff1a;指在某个时间段内&…...

《Excelize权威指南》新书发布

在数据洪流涌动的数字化时代&#xff0c;数据处理与分析已跃升为解锁无限洞察力的金钥匙&#xff0c;赋能商业智慧、重塑医疗健康版图、驱动教育科研创新。然而&#xff0c;当数据量级爆炸式增长&#xff0c;传统工具如 Excel 虽被誉为数据处理领域的常青树&#xff0c;其手动操…...

Go语言加Vue3零基础入门全栈班11 Go语言+gorm用户管理系统实战 2024年08月03日 课程笔记

概述 如果您没有Golang的基础&#xff0c;应该学习如下前置课程。 Golang零基础入门Golang面向对象编程Go Web 基础Go语言开发REST API接口_20240728Go语言操作MySQL开发用户管理系统API教程_20240729Redis零基础快速入门_20231227GoRedis开发用户管理系统API实战_20240730Mo…...

【设计模式】代理模式详解

1.简介 代理模式是常用的Java设计模式&#xff0c;该模式的特点是代理类与委托类共享相同的接口。代理类主要负责预处理消息、过滤消息、将消息转发给委托类&#xff0c;并在事后处理消息等。代理类与委托类之间通常存在关联关系&#xff0c;一个代理类对象与一个委托类对象关…...

Python变量和简单的数据类型

1、变量 massageHello python world! print(massage) massageHello world print(massage) 运行这个代码发现&#xff0c;同一个变量出现两个不同的结果 Hello python world! Hello world 在程序中&#xff0c;可随时修改变量的值&…...

切比雪夫距离

切比雪夫距离&#xff08;Chebyshev Distance&#xff09;&#xff0c;又称棋盘距离或最大值距离&#xff0c;是一种用于测量两个点之间距离的度量方法。在二维平面上&#xff0c;切比雪夫距离定义为两个点之间的最大坐标差值。其公式如下&#xff1a; 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来进行机器学习取决于多个因素&#xff0c;包括个人偏好、项目需求以及可用的资源。这里我可以简要比较一下它们的优缺点&#xff1a; Python的优势&#xff1a; 通用性和灵活性&#xff1a; Python是一种通用编程语言&#xff0c;可以用于多种用途&#…...

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脚本配置是指在脚本中设置各种参数、选项和环境&#xff0c;以确保脚本能够根据预期的需求和环境执行。配置可以包括变量设置、环境变量、命令选项和错误处理等。 1. 脚本开头的配置 Shebang 第一行通常是shebang&#xff0c;它告诉系统使用哪个解释器来执行脚本。例如…...

Win7虚拟机分享(已安装VMware Tools)

前言 之前写过VMware安装Win7并安装VMware tools的博客&#xff0c;但操作仍显繁琐。后来发现可以直接分享已经配置好的虚拟机&#xff0c;所有软件都是安装好的&#xff0c;解压即用。 一. VMware Win7虚拟机配置 已完成的配置和安装的软件 专业版Win7系统(已永久激活)VMware…...

CANOpen EMCY紧急报文介绍

什么是CANOpen紧急报文 CANOpen中的Emcy紧急报文用于当设备出现故障或警告时&#xff0c;向其它节点报告故障或警告使用的。如设备某个设备出现过压或过流时&#xff0c;就可以发送紧急报文。 紧急报文的格式 错误代码&#xff1a;是0x1003索引预定义错误字段的内容&#xff…...

JAVA项目

目录 一、前言 二、技术介绍 三、项目实现流程 四、论文流程参考 五、核心代码截图 专注于大学生实战开发、讲解和毕业答疑等辅导&#xff0c;获取源码后台 一、前言 在数字化音乐时代&#xff0c;个性化推荐已成为提升用户体验、促进音乐消费的重要手段。为此&#xff0…...

️ LangChain +Streamlit+ Llama :将对话式人工智能引入您的本地设备(下篇)

引言&#xff1a;种下一棵树最好的时间是十年前,其次是现在 书接上回&#xff1a;将对话式人工智能引入您的本地设备成为可能CSDNhttps://mp.csdn.net/mp_blog/creation/editor/140865426 目的&#xff1a;在这个大模型横行的时候&#xff0c;我们常用电脑如何开展大模型的工作…...

Kafka实战(Scala操作)

Kafka基础讲解部分 Kafka基础讲解部分 Kafka实战&#xff08;Scala操作&#xff09; 1、引入依赖 版本&#xff1a; <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.report…...

K8S认证|CKS题库+答案| 11. AppArmor

目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作&#xff1a; 1&#xff09;、切换集群 2&#xff09;、切换节点 3&#xff09;、切换到 apparmor 的目录 4&#xff09;、执行 apparmor 策略模块 5&#xff09;、修改 pod 文件 6&#xff09;、…...

LeetCode - 394. 字符串解码

题目 394. 字符串解码 - 力扣&#xff08;LeetCode&#xff09; 思路 使用两个栈&#xff1a;一个存储重复次数&#xff0c;一个存储字符串 遍历输入字符串&#xff1a; 数字处理&#xff1a;遇到数字时&#xff0c;累积计算重复次数左括号处理&#xff1a;保存当前状态&a…...

学校招生小程序源码介绍

基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码&#xff0c;专为学校招生场景量身打造&#xff0c;功能实用且操作便捷。 从技术架构来看&#xff0c;ThinkPHP提供稳定可靠的后台服务&#xff0c;FastAdmin加速开发流程&#xff0c;UniApp则保障小程序在多端有良好的兼…...

Keil 中设置 STM32 Flash 和 RAM 地址详解

文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...

鸿蒙DevEco Studio HarmonyOS 5跑酷小游戏实现指南

1. 项目概述 本跑酷小游戏基于鸿蒙HarmonyOS 5开发&#xff0c;使用DevEco Studio作为开发工具&#xff0c;采用Java语言实现&#xff0c;包含角色控制、障碍物生成和分数计算系统。 2. 项目结构 /src/main/java/com/example/runner/├── MainAbilitySlice.java // 主界…...

Unsafe Fileupload篇补充-木马的详细教程与木马分享(中国蚁剑方式)

在之前的皮卡丘靶场第九期Unsafe Fileupload篇中我们学习了木马的原理并且学了一个简单的木马文件 本期内容是为了更好的为大家解释木马&#xff08;服务器方面的&#xff09;的原理&#xff0c;连接&#xff0c;以及各种木马及连接工具的分享 文件木马&#xff1a;https://w…...

【Linux系统】Linux环境变量:系统配置的隐形指挥官

。# Linux系列 文章目录 前言一、环境变量的概念二、常见的环境变量三、环境变量特点及其相关指令3.1 环境变量的全局性3.2、环境变量的生命周期 四、环境变量的组织方式五、C语言对环境变量的操作5.1 设置环境变量&#xff1a;setenv5.2 删除环境变量:unsetenv5.3 遍历所有环境…...

手机平板能效生态设计指令EU 2023/1670标准解读

手机平板能效生态设计指令EU 2023/1670标准解读 以下是针对欧盟《手机和平板电脑生态设计法规》(EU) 2023/1670 的核心解读&#xff0c;综合法规核心要求、最新修正及企业合规要点&#xff1a; 一、法规背景与目标 生效与强制时间 发布于2023年8月31日&#xff08;OJ公报&…...

tomcat指定使用的jdk版本

说明 有时候需要对tomcat配置指定的jdk版本号&#xff0c;此时&#xff0c;我们可以通过以下方式进行配置 设置方式 找到tomcat的bin目录中的setclasspath.bat。如果是linux系统则是setclasspath.sh set JAVA_HOMEC:\Program Files\Java\jdk8 set JRE_HOMEC:\Program Files…...

零知开源——STM32F103RBT6驱动 ICM20948 九轴传感器及 vofa + 上位机可视化教程

STM32F1 本教程使用零知标准板&#xff08;STM32F103RBT6&#xff09;通过I2C驱动ICM20948九轴传感器&#xff0c;实现姿态解算&#xff0c;并通过串口将数据实时发送至VOFA上位机进行3D可视化。代码基于开源库修改优化&#xff0c;适合嵌入式及物联网开发者。在基础驱动上新增…...