【PRIVGUARD-privguard-artifact-main】代码学习(parser部分)

news2024/10/6 16:22:37

privguard-artifact-main:parser部分简述

1.abstract_domain.py

(1)简介

实现PrivGuard中的抽象域功能。PrivGuard是一个旨在确保Python程序符合特定隐私策略的工具。代码中定义了两种类型的抽象域:闭区间格(ClosedIntervalL)和模式格(SchemaL)。

  1. 闭区间格(ClosedIntervalL):这部分代码定义了一个处理扩展值闭区间的格结构。闭区间格用于表示变量的值范围,例如,一个整数变量可以在1到10之间取值。该格提供了判断子集、计算并集和交集等操作,这对于分析变量值的可能范围以及它们如何影响程序中的隐私策略至关重要。

  2. 模式格(SchemaL):模式格用于表示和处理数据模式,如数据表或数据集的列结构。它通过一组列名来定义模式,并提供了判断子集、并集和交集的功能。这对于分析数据集如何满足特定的隐私策略是必要的,特别是在处理涉及多个数据源和数据结构的复杂数据处理任务时。

当然可以。让我们通过具体的例子来解释上述代码的作用:

(2)示例

i.闭区间格(ClosedIntervalL)示例

假设我们正在处理一个医疗数据集,我们有一个名为“年龄”的字段,我们希望确保分析仅涉及年龄在18至65岁之间的个体,以符合某些隐私规定。在这种情况下,我们可以使用闭区间格(ClosedIntervalL)来表示这个年龄范围:

from typed_value import ExtendV

# 创建年龄范围为18至65的闭区间格实例
age_interval = ClosedIntervalL(ExtendV(18), ExtendV(65))

在这个例子中,ExtendV(18)ExtendV(65)定义了闭区间的下限和上限,表示允许的年龄范围。在数据分析或数据处理过程中,我们可以使用这个闭区间格来检查某个数据集或数据处理操作是否仅包括这个年龄范围内的个体。

ii.模式格(SchemaL)示例

假设我们有一个关于银行客户的数据集,包含客户的姓名、年龄、账户余额等信息。为了遵守隐私政策,我们可能只允许数据分析任务使用年龄和账户余额字段,而不使用姓名字段。在这种情况下,我们可以使用模式格(SchemaL)来表示允许的数据模式:

# 创建一个仅包含“年龄”和“账户余额”的模式格实例
allowed_schema = SchemaL(['年龄', '账户余额'])

在这个例子中,模式格allowed_schema表示了一个仅包含“年龄”和“账户余额”字段的数据结构。通过将数据集与此模式格进行比较,我们可以检查数据集是否符合隐私政策的要求,即不包含不应该使用的敏感信息,如客户的姓名。

2.attribute.py

attribute.py用于描述和处理数据隐私保护策略中的不同属性。PrivGuard旨在帮助确保数据处理程序遵守特定的隐私政策。代码中定义的各种属性类代表数据可以拥有的不同特征和要求,这些特征和要求需要在数据处理和分析中得到满足和尊重。

(1)主要类和作用:

编号类别描述
1Column表示数据库或数据集中的一列,用于识别数据集的特定字段。
2Attribute所有属性类的基类,定义属性的基本接口和行为。
3Satisfied表示一个已经满足的属性,意味着不需要额外的操作来满足这个属性相关的隐私策略要求。
4Unsatisfiable表示一个无法满足的属性,意味着不存在任何方法可以使数据满足这个属性相关的隐私策略要求。
5FilterAttribute表示数据过滤条件,用于追踪程序中对特定列应用的过滤条件。
6RedactAttribute表示数据脱敏操作,用于追踪对特定列应用的脱敏(或红action)操作。
7SchemaAttribute表示数据架构或结构属性,用于追踪投影关系中剩余的列集。
8RoleAttribute表示数据访问者的角色属性,用于限制数据的访问和使用。
9PrivacyAttribute表示应用于数据的特定隐私保护技术,如k匿名、l多样性、t接近性或差分隐私(DP)。
10PurposeAttribute表示数据使用的目的属性,说明数据将如何被使用,还在构建中。

(2)例子:

  1. FilterAttribute
    假设有一个数据库表格,其中有一列名为"age",现在想要过滤出所有年龄大于18的记录。在这种情况下,你可以使用FilterAttribute来表示这个过滤条件:

    age_column = Column('age')
    age_filter = FilterAttribute(age_column, Interval(18, None)) # 假设Interval是一个表示数值范围的类
    
  2. RedactAttribute
    假设在处理个人信息时,需要隐藏每个人名字的一部分以保护隐私。可以使用RedactAttribute来标记这个操作:

    name_column = Column('name')
    name_redact = RedactAttribute(name_column, slice_(1, None))  # 假设从第二个字符开始隐藏
    
  3. PrivacyAttribute(隐私属性):
    如果你的数据处理任务需要应用差分隐私技术来保护数据,你可以这样表示:

    dp_privacy = PrivacyAttribute('DP', eps=1.0, delta=1e-5)  # 应用ε=1.0, δ=1e-5的差分隐私
    

3.policy_parser.py

使用Python和pyparsing库编写的Legalease策略解析器。Legalease是一种专门用于定义数据处理和隐私策略的语言。在这个框架中,策略通常用于规定哪些数据字段需要进行过滤、脱敏、保持特定模式、遵守隐私标准、限制特定角色的访问权限、或者符合特定用途。

(1)主要组件及其功能:

i.基本解析器元素
元素描述
COMPARATOR解析比较运算符,如’==', ‘!=’, ‘>’, ‘>=’, ‘<’, ‘<=’。用于条件表达式中比较列值。
COLUMN解析数据中的列名,用于确定需要过滤或脱敏的列。
INTEGER解析整数值,用于条件表达式中的比较,如年龄或薪水等数值条件。
STRING解析字符串值,用于需要比较字符串的策略中,如用户角色或数据类别。
LIST解析逗号分隔的列名列表,指定策略适用的多个数据列。
VARIABLE解析一般的变量名,用于指定角色或目的属性。
ii.属性解析器
属性描述
FilterAttribute根据策略条件构造表示数据过滤需求的属性,例如基于年龄或薪水的过滤。
RedactAttribute创建表示脱敏需求的属性,指示隐藏或替换输出数据中的某些信息,例如姓名的一部分。
SchemaAttribute解析数据模式要求,指定策略中提及的数据列应如何保持。
PrivacyAttribute表示数据应遵守的隐私保护技术,如k匿名性、差分隐私等。
RoleAttribute解析用户角色的要求,确定哪些角色可以访问数据。
PurposeAttribute解析数据用途的规定,指定数据可以用于何种目的。
iii.策略解析器
  • 使用上述定义的属性解析器构建更复杂的策略表达式。策略由一个或多个条款组成,每个条款定义了一组属性和条件。
  • CLAUSE: 代表了策略中的一个允许条款,使用逻辑操作符(如AND、OR)连接不同的属性。
  • policy_parser: 最终的策略解析器,它使用所有上述组件来解析完整的Legalease策略字符串,并将其转换成可用于策略评估的内部表示形式。

(2)示例:

假设有以下Legalease策略字符串:“ALLOW FILTER age >= 18 AND SCHEMA name, email”。这个策略的含义是:

  • 使用FILTER_ATTRIBUTE解析器解析"FILTER age >= 18",结果是一个过滤属性,表示只允许年龄大于或等于18岁的记录。
  • 使用SCHEMA_ATTRIBUTE解析器解析"SCHEMA name, email",结果是一个模式属性,表示数据输出应仅包含"name"和"email"两列。
  • CLAUSE将这两个属性组合在一起,使用AND逻辑,表示两个条件都必须满足。
  • policy_parser将整个字符串解析为一个或多个这样的策略条款。

4.policy_tree.py

定义了Legalease策略的语法树表示和处理方法。代码片段主要涉及几个部分:策略的内部表示、策略转换为析取范式(DNF),以及根据数据处理操作对策略进行更新的方法。

(1)主要组件及其功能:

  1. ConjunctClause(合取子句):

    • 这是构成策略的基本单元,表示一组属性的逻辑“与”(AND)关系。

    • 例如,一个合取子句ConjunctClause([FilterAttribute('age', ClosedIntervalL(18, None)), SchemaAttribute(['name'])])表示“年龄大于等于18并且只包含姓名字段”。

  2. DNF(析取范式):

    • 表示整个策略,策略由一系列合取子句以逻辑“或”(OR)关系连接组成。

    • 例如,DNF([ConjunctClause([...]), ConjunctClause([...])]) 可以表示两种不同的数据处理要求组合。

  3. Policy(策略):

    • 表示一组完整的Legalease策略,提供了一种将策略字符串转换成程序可以理解和操作的形式的方式。
    • 包含用于处理和修改策略的方法,如过滤操作、投影操作(限定列)等。
    • 初始化时可以从字符串、已有的条款列表或DNF形式创建。

(2)策略转换和处理方法:

  1. 策略转换(policy2DNF & clause2DNF):

    • clause2DNFpolicy2DNF函数将Legalease策略从其原始或嵌套列表形式转换为更结构化和标准化的析取范式(DNF)。
    • 这种转换是处理和应用策略的基础,因为DNF形式容易与程序执行的具体数据操作相结合。
    • 例如,策略“ALLOW FILTER age >= 18 OR FILTER income > 5000”将被分解成两个合取子句。
  2. 策略更新方法(runFilter, runProject等):

    • 这些方法根据数据操作动态更新策略。例如:
      • runFilter(col, val, op)根据过滤条件更新策略,如只保留满足特定条件的记录。
      • runProject(cols)根据投影操作更新策略,确保只有指定的列被保留。
    • 这些方法通过考虑操作的效果来调整策略,去除因操作已满足而变得不必要的策略要求,或添加新的要求以确保策略的一致性和完整性。
    • 例如,如果策略要求“年龄必须大于18”,而程序过滤出所有年龄大于20的记录,那么这个策略要求已被满足,因此可以更新为一个空操作(或视为满足)。

示例:

假设Legalease策略:

policy_str = "ALLOW FILTER age >= 18 AND (SCHEMA age OR (FILTER gender == 'M' AND (ROLE MANAGER OR FILTER age <= 90)))"

此策略表示允许数据记录,如果用户的年龄大于等于18岁,并且符合以下条件之一:只包含年龄字段、性别为男性并且是管理者角色或年龄不超过90岁。

通过以下代码初始化一个Policy对象,并且打印其内部表示:

policy = Policy(policy_str)
print(policy)

若执行过滤操作,只留下年龄大于等于18岁的记录,可以使用以下代码:

print(policy.runFilter('age', 18, 'ge'))

这会更新策略,以反映过滤操作的结果。

通过这些方法,可以使得策略动态地适应数据处理操作的变化,帮助确保数据处理过程遵守初设的隐私保护规则。

5.typed_value.py

定义了PrivGuard策略中支持的数据类型,以及对这些数据类型进行操作的函数和类。这些数据类型和操作是处理和评估Legalease策略中的条件和规则的基础。

(1)主要组件及其功能

i.Val类
  • 通用值的基类,用于PrivGuard策略中的所有值类型。它定义了基本值(如整数、字符串、日期等)共有的比较方法(小于、等于、大于等),使得不同类型的值可以在策略评估时进行比较和逻辑判断。
  • 功能:
    • 提供了标准的比较运算符方法(__lt__, __le__, __eq__, __ne__, __ge__, __gt__),允许值之间进行比较。
    • 通过重载这些方法,任何继承自Val的子类可以用于比较运算。
ii.IntegerV类
  • 这是Val类的子类,代表整数值。这使得策略中可以包含和处理整数值,例如年龄、计数等。
  • 功能:
    • 继承了Val类的所有方法,并增加了特定于整数的操作,如加法(__add__)和减法(__sub__)。
    • 通过这些操作,可以构建表示范围、条件或对整数值的数学运算的策略表达式。
iii.StringV类
  • 继承自Val类,表示字符串值。用于处理策略中的文本内容,如姓名、地址等。
  • 功能:
    • 与IntegerV类似,它继承了Val类的比较方法,但专用于字符串类型的值。
    • 在策略中使用StringV类可以对字符串值进行逻辑和条件判断。
iv.DateV类
  • 代表日期值,也是Val类的一个子类。它使策略可以处理和评估基于日期的条件,例如出生日期、事务日期等。
  • 功能:
    • 允许将日期值包含在策略条件中。
    • 支持与其他日期值或日期范围的比较。
v. ExtendV类
  • 这是一个特殊的类,用于创建可以表示无穷大(inf)和无穷小(ninf)的值。这对于定义没有明确上限或下限的条件非常有用。
  • 功能:
    • 通过提供无穷大和无穷小的概念,可以在策略中表达如“大于某个值”或“小于某个值”的开放区间。
    • 支持与其他扩展值的比较运算。
vi. min_exval 和 max_exval 函数
  • 这两个函数用于比较扩展值,并返回两者之间的最小值或最大值。这对于处理范围和界限特别有用。
  • 功能:
    • min_exval(v1, v2): 返回两个扩展值之间的最小值。
    • max_exval(v1, v2): 返回两个扩展值之间的最大值。
    • 这些函数允许策略中的条件逻辑涉及无穷大或无穷小的情况,使得策略可以更灵活地表达条件范围。

(2)示例:

  1. 比较两个整数值

    int_val1 = IntegerV(10)
    int_val2 = IntegerV(20)
    print(int_val1 < int_val2)  # 输出 True,因为 10 小于 20
    
  2. 创建一个字符串值并比较

    str_val = StringV('hello')
    print(str_val == 'hello')  # 输出 True,因为字符串相等
    
  3. 使用扩展值处理无穷大和无穷小

    extended_val1 = ExtendV('inf')  # 代表无穷大
    extended_val2 = ExtendV(100)
    print(extended_val1 > extended_val2)  # 输出 True,因为无穷大大于任何有限数
    
  4. 计算两个扩展值的最小值和最大值

    ext_val1 = ExtendV(5)
    ext_val2 = ExtendV('inf')
    print(min_exval(ext_val1, ext_val2))  # 输出 e5,因为5小于无穷大
    print(max_exval(ext_val1, ext_val2))  # 输出 einf,因为无穷大大于5
    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1514578.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

霹雳学习笔记——6.1.2 ResNeXt

相比于ResNet&#xff0c;更新了block 效果&#xff1a;错误率低于ResNet&#xff0c;并且计算量一样。 对比卷积和组卷积&#xff0c;参数个数会变成1/g倍&#xff0c;g是分成了g组 最终输出的channel与卷积核的个数相同。 &#xff08;好像是。。。好像之前听过这个&#xff…

【LeetCode热题100】73. 矩阵置零(矩阵)

一.题目要求 给定一个 m x n 的矩阵&#xff0c;如果一个元素为 0 &#xff0c;则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 二.题目难度 中等 三.输入样例 示例 1&#xff1a; 输入&#xff1a;matrix [[1,1,1],[1,0,1],[1,1,1]] 输出&#xff1a;[[1,0…

文字弹性跳动CSS3代码

文字弹性跳动CSS3代码&#xff0c;源码由HTMLCSSJS组成&#xff0c;记事本打开源码文件可以进行内容文字之类的修改&#xff0c;双击html文件可以本地运行效果&#xff0c;也可以上传到服务器里面&#xff0c;重定向这个界面 下载地址 文字弹性跳动CSS3代码

Rust 构建开源 Pingora 框架可以与nginx媲美

一、概述 Cloudflare 为何弃用 Nginx&#xff0c;选择使用 Rust 重新构建新的代理 Pingora 框架。Cloudflare 成立于2010年&#xff0c;是一家领先的云服务提供商&#xff0c;专注于内容分发网络&#xff08;CDN&#xff09;和分布式域名解析。它提供一系列安全和性能优化服务…

4.MAC平台Python的下载、安装(含Python2.7+Python3.12双版本环境变量配置)——《跟老吕学Python编程》

4.MAC平台Python的下载、安装&#xff08;含Python2.7Python3.12双版本环境变量配置&#xff09;——《跟老吕学Python编程》&#xff09;——跟老吕学Python编程 一、下载MAC版Python1.Python官网2.MAC版Python下载网址 二、在MAC安装Python1.在MAC安装Python2.阅读Python重要…

【Ubuntu-20.04】OpenCV-3.4.16的安装并对图片与视频处理

【Ubuntu-20.04】OpenCV-3.4.16的安装并对图片与视频处理 一、安装OpenCV-3.4.161.下载OpenCV-3.4.16安装包2.将安装包放到/home&#xff0c;并解压3.使用 cmake 安装 opencv4.配置环境5.查看 opencv 的版本信息 二、处理图片&#xff08;一&#xff09;创建文件夹 code &#…

【TB作品】MSP430,波形发生器,单片机,Proteus仿真

文章目录 题目效果梯形波100个点产生方法锯齿波100个点产生方法c代码和proteus仿真 题目 114 波形发生器的制作 设计要求 设计一个能产生正弦波、方波、三角波、梯形波、锯齿波的波形发生器。设置5个开关K1~K5(从 上到下),分别对应正弦波、方波、三角波、梯形波、锯齿波,按一下…

Redis中缓存和数据库双写数据不一致

先更新数据库&#xff0c;还是先更新缓存? 1.先更新数据库&#xff0c;再更新缓存 2.先更新缓存&#xff0c;再更新数据库 1.先更新数据库&#xff0c;再更新缓存 举个例子&#xff0c;比如【请求A】和【请求B】两个请求&#xff0c;同时更新【同一条】数据&#xff0c; 则…

分布式搜索引擎elasticsearch(2)

1.DSL查询文档 elasticsearch的查询依然是基于JSON风格的DSL来实现的。 1.1.DSL查询分类 Elasticsearch提供了基于JSON的DSL&#xff08;[Domain Specific Language](https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl.html)&#xff09;来定义查…

python爬虫实战——小红书

目录 1、博主页面分析 2、在控制台预先获取所有作品页的URL 3、在 Python 中读入该文件并做准备工作 4、处理图文类型作品 5、处理视频类型作品 6、异常访问而被中断的现象 7、完整参考代码 任务&#xff1a;在 win 环境下&#xff0c;利用 Python、webdriver、JavaS…

让手机变相机,微单变全画幅的外设-斯莫格摄影套装开箱

大家好&#xff0c;我是Circaboy&#xff0c;近期给我的手机和相机入了一整套专业的摄影外设套装&#xff0c;然后我发现专业设备加持下的摄影着实是比我之前的要好很多&#xff0c;所以我就写了个文章做个简单的介绍和专业外设加持下的摄影对比。 本次入手的是斯莫格摄影套装…

Linux学习(4)——使用编辑器

1.gedit编辑器 简单易懂&#xff0c;依赖图形界面。可以使用ctrlc ctrlv等快捷键&#xff0c;ctrls进行保存&#xff0c;与windows系统中相类似。 2.vi/vim编辑器 vi/vim可以直接通过控制台的终端完成文本的编辑&#xff0c;不依赖图形界面&#xff0c;使用范围更广。它的编辑…

cesiumlab中shp转3dtiles白模效果一

安装cesiumlab 如果没有安装cesiumlab&#xff0c;去官网下载安装一个即可 http://www.cesiumlab.com/cesiumlab.html 效果 步骤 1、准备shp面数据 2、打开cesiumlab软件转换 选择shp面数据 设置高度&#xff0c;如果shp面中有高度字段&#xff0c;可以用高度字段&#xff…

ASP.NET排课实验室排课,生成班级课表实验室课表教师课表(vb.net)-214-(代码+说明)

转载地址: http://www.3q2008.com/soft/search.asp?keyword214 要看成品演示 请联系客服发给您成品演示 课题&#xff1a;实验课排课系统 计算机 上机课 一周上5天课&#xff0c;周一到周五 一周上5天课&#xff0c;周一到周五 因为我排的是实验课&#xff0c;最好1&#xf…

javaweb day16 mysql

mysql 安装&#xff1a; 企业开发使用方法 安装虚拟机代替服务器 数据模型 创建数据库 写法 sql简介

【考研数学】打基础用张宇《30讲》还是武忠祥《基础篇》?

基础课不太可能所有的东西全都覆盖&#xff0c;还是先搭起一个知识框架&#xff0c;然后不断的填充和完善。 所以不必太过于在意少一些东西&#xff0c;我们不可能一口吃成胖子&#xff0c;基础知识肯定不会遗漏的&#xff0c;只可能一些技巧不到位。 从自己的情况考虑&#…

HTTP压测工具wrk安装与使用

一、前言 wrk是一个基于C语言开发的用于HTTP性能测试的开源工具&#xff0c;它可以模拟多个并发连接&#xff0c;测量服务器的响应时间和吞吐量&#xff0c;并且会给出较为全面的测试结果 1、本文主要内容 在Windows、macOS、Linux&#xff08;CentOS & Ubuntu等&#xff…

使用ChatGPT高效完成简历制作[中篇]-有爱AI实战教程(五)

演示站点&#xff1a; https://ai.uaai.cn 对话模块 官方论坛&#xff1a; www.jingyuai.com 京娱AI 导读&#xff1a;在使用 ChatGPT 时&#xff0c;当你给的指令越精确&#xff0c;它的回答会越到位&#xff0c;举例来说&#xff0c;假如你要请它帮忙写文案&#xff0c;如果没…

上海亚商投顾:沪指震荡调整 飞行汽车概念股持续爆发

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 一.市场情绪 沪指昨日震荡调整&#xff0c;深成指走势稍强&#xff0c;创业板指一度涨超1%&#xff0c;黄白二线走势分化&a…

Nginx怎么去做负载均衡?

一.什么是负载均衡&#xff1f; 负载均衡是一种在计算机网络中分配工作负载的技术&#xff0c;旨在将请求或任务均匀地分配给多个服务器、计算资源或其他设备&#xff0c;以避免单个节点过载&#xff0c;并提高系统的可靠性、稳定性和性能。负载均衡通常用于分布式系统、网络服…