“验证程序”的版本间差异
Andrew Parno(讨论 | 贡献) 小 |
Andrew Parno(讨论 | 贡献) |
||
(未显示2个用户的5个中间版本) | |||
第1行: | 第1行: | ||
验证程序是一种特殊的微应用,用于披露数据某些维度的信息,以供买方参考。通常,验证程序不会披露额外的信息,这是由隐私计算技术保证的。 | |||
本文说明了典枢中各种验证程序的细节信息。 | 本文说明了典枢中各种验证程序的细节信息。 | ||
''未来,典枢还将支持用户自定义验证程序。'' | |||
=== 概述 === | |||
验证程序在典枢平台提供的可信执行环境(TEE)中执行,TEE保证了验证程序的执行过程是不可见,包括内存的数据、处理器的状态等,从而保证了典枢平台方无法获得非相关的数据。 | |||
验证程序的输入为卖方的加密数据,该数据在验证程序内解密,解密所使用的密钥(枢私钥)使用验证程序内的密钥加密后传输到验证程序内部。因此,典枢平台无法获得用户的密钥或卖方提供的数据。 | |||
验证程序的输出为申请方的枢公钥加密后的报告。当申请方为平台时,验证报告在典枢平台上公开;当申请方为用户时,该报告仅对用户可见。不同的验证程序所生成的验证报告内容也不尽相同。通常,验证程序是针对特定的数据格式的,例如针对CSV格式的数据;也可以针对更加特定的情况。一个数据格式下可能存在多个不同的验证程序,用于展示数据的不同信息。 | |||
验证报告是基于数据和验证程序生成的,因此是客观、真实的,能够直接反映数据本身的情况。例如验证报告中可以包含视频的截图,买方可以从截图中知道视频是否和描述信息一致;验证报告中还可以包含表格的统计信息,买方可以从统计信息中知道表格中的数据是否是伪造的。这些验证报告都能够为买方的购买决策提供强力的支持。 | |||
以下是典枢平台上的一些验证程序。 | |||
=== CSV统计程序 === | === CSV统计程序 === | ||
[https://github.com/YeeZTech/verification-programs/tree/main/src/dianshu2.0/csv 开源地址] | [https://github.com/YeeZTech/verification-programs/tree/main/src/dianshu2.0/csv 开源地址] | ||
传入csv格式的文件,本算法将对文件的数据进行质量评估的统计,并在算法结束后将统计结果输出。统计结果包括csv的行数,列数,总缺失值数,列缺失值数量统计、行缺失值数量统计。算法将以列数最多的行为起点统计缺失值情况。 | |||
CSV统计程序运行后输出结果的结构如下所示:<syntaxhighlight lang="json" line="1"> | |||
{ | |||
"rows": 58, | |||
"cols": 6, | |||
"totalNulls": 48, | |||
"NullProportion": 13.79, | |||
"col_nulls": [ | |||
{ "null_num": 6, "count": 1 }, | |||
{ "null_num": 7, "count": 1 }, | |||
{ "null_num": 8, "count": 2 }, | |||
{ "null_num": 9, "count": 1 }, | |||
{ "null_num": 10, "count": 1 } | |||
], | |||
"row_nulls": [ | |||
{ "null_num": 0, "count": 34 }, | |||
{ "null_num": 1, "count": 16 }, | |||
{ "null_num": 2, "count": 2 }, | |||
{ "null_num": 3, "count": 1 }, | |||
{ "null_num": 4, "count": 1 }, | |||
{ "null_num": 5, "count": 3 }, | |||
{ "null_num": 6, "count": 1 } | |||
] | |||
} | |||
</syntaxhighlight>输出的内容有 | |||
* '''<code>rows</code>''':csv中的总行数 | |||
* '''<code>cols</code>''':csv中的总列数 | |||
* '''<code>totalNulls</code>''':总缺失值的数量 | |||
* '''<code>NullProportion</code>''':缺失值百分比,该缺失值精确到小数点后两位。 | |||
* '''<code>col_nulls</code>''':每列中有多少个缺失行的数量统计 | |||
** '''<code>null_num</code>''':表示缺失x行 | |||
** '''<code>count</code>''':缺失x行的数据共有多少列 '''注''':若缺失x行的数量为0时'''<code>(count=0)</code>,将不会输出''';<code>null_num > 1000</code> 时的统计将统一存储在<code>null_num=1001</code>的条目中。这两个条件对缺失列的数据统计同样适用。 | |||
* '''<code>row_nulls</code>''':每行中有多少个缺失列的数量统计 | |||
** '''<code>null_num</code>''':表示缺失x列 | |||
** '''<code>count</code>''':缺失x列的数据共有多少行 | |||
=== 文本抽样程序 === | === 文本抽样程序 === | ||
传入txt格式的文本文件,本算法将对txt文件进行质量评估,将txt文件的前中后位置上的部分内容打包输出到一个json文件中。目前的算法中,当输入txt文件后,将返回该txt内容的前10%内容(最多150字),中间20%内容(最多300字),尾部10%内容(最多150字)作为质量验证报告。 | |||
注:在分析中,一个“字”表示一个 英文字母/汉字/符号/操作符 等内容。 | |||
文本抽样运行后输出结果的结构如下所示:<syntaxhighlight lang="json"> | |||
{ | |||
"head": "#include \"user_type.h\"\n#include \"string_process.h\"\n#include \"ypc/core_t/analyzer/data_source.h\"\n#include \"ypc/stbox/ebyte.h\"\n#include \"ypc/stbox/stx_c", | |||
"mid": "一个batch的所需长度\n int start_pos = total_size / 2 - 50; // 中间的100字节的起始位置\n int mid_batch_no = start_pos / batch_max_size; // 中间的100字节所在的batch的编号\n \n start_pos = start_pos % batch_max_size; // 中间的100字节的起始位置在batch中的位置\n\n LOG(INFO) << \"Batch Num: \" << batch_num;\n LOG(INFO) << \"Start Position:", | |||
"tail": " process_string(middle_100) + \"\\\"}\";\n return result;\n }\n\nprotected:\n std::vector<std::shared_ptr<ypc::data_source_with_dhash>> m_datasources;\n};\n", | |||
"total": "3474" | |||
} | |||
</syntaxhighlight>输出的内容有: | |||
* '''<code>head</code>''':txt文件头部10%(最多150字)内容 | |||
* '''<code>mid</code>''':txt文件中部20%(最多300字)内容 | |||
* '''<code>tail</code>''':txt文件尾部10%(最多150字)内容 | |||
* '''<code>total</code>''':文本文件中的总字数统计 | |||
以上例子中展示的是一个包含代码内容的txt文件,除了普通文字内容,代码中包含了更多的换行符以及引号,换行符将在结果中以''''<code>'\n'</code>'''的形式被输出内容中的引号为了防止json解析失败也会以'''<code>'\"'</code>'''的格式输出。 | |||
=== 视频抽样程序 === | === 视频抽样程序 === | ||
传入mp4格式的文件,本算法将读取mp4的内容并截取其中的数帧的画面编码成base64格式的json数据输出,输出图片不固定,在每次运行时都将随机选取图片输出,目前规定输出的内容视频总时间、三张视频截图(以Base64编码表示)以及其三张截图的截取时间, | |||
输出json格式如下:<syntaxhighlight lang="json"> | |||
{ | |||
totalDuration: // 总时长 | |||
positions: [ | |||
{ | |||
duration: // 时间点 | |||
picture: // 截取图片 | |||
}, | |||
{ | |||
duration: | |||
picture: | |||
}, | |||
{ | |||
duration: | |||
picture: | |||
} | |||
] | |||
} | |||
</syntaxhighlight> | |||
* '''<code>totalDuration</code>''':该字段中包含了所有视频截图的编码数据,每一条数据都代表一张视频截图的base64编码,可通过解码获取原图。 | |||
* '''<code>positions</code>''': | |||
** '''<code>duration</code>''':截取图片对应时间(以秒为单位表示)。 | |||
** '''<code>picture</code>''':该字段中包含了所有视频截图的编码数据,每一条数据都代表一张视频截图的base64编码,可通过解码获取原图。 | |||
=== PDF验证程序 === | |||
传入PDF格式文件,本算法将对pdf格式的富文本数据进行质量验证,将随机抽取该数据的三页,并对抽取结果进行水印和模糊处理,(如果不足三页,则将全部页进行处理)最终生成数据质量验证报告。 | |||
质量验证报告的json格式如下:<syntaxhighlight lang="json"> | |||
{ | |||
"pages": [ | |||
{ | |||
"page_content": "/9j/4AAQSkZJRgABAQEBAQIBAQECAgICAg......QAUUUUAFFFFABRRRQB//Z", | |||
"page_number": "1" | |||
}, | |||
{ | |||
"page_content": "/9j/4AAQSkZJRgABAQEBAQIBAQECAgICAg......QAUUUUAFFFFABRRRQB//Z", | |||
"page_number": "2" | |||
} | |||
], | |||
"total_pages": "2" | |||
} | |||
</syntaxhighlight> | |||
*'''<code>total_pages</code>''':该字段为PDF文件的总页数。 | |||
* '''<code>pages</code>''': | |||
** '''<code>page_content</code>''':已经处理好的PDF抽取页面的base64编码,可通过解码获取抽取的PDF页面截图(已添加水印)。 | |||
** '''<code>page_number</code>''':抽取的PDF对应的页码 |
2024年4月17日 (三) 05:49的最新版本
验证程序是一种特殊的微应用,用于披露数据某些维度的信息,以供买方参考。通常,验证程序不会披露额外的信息,这是由隐私计算技术保证的。
本文说明了典枢中各种验证程序的细节信息。
未来,典枢还将支持用户自定义验证程序。
概述
验证程序在典枢平台提供的可信执行环境(TEE)中执行,TEE保证了验证程序的执行过程是不可见,包括内存的数据、处理器的状态等,从而保证了典枢平台方无法获得非相关的数据。
验证程序的输入为卖方的加密数据,该数据在验证程序内解密,解密所使用的密钥(枢私钥)使用验证程序内的密钥加密后传输到验证程序内部。因此,典枢平台无法获得用户的密钥或卖方提供的数据。
验证程序的输出为申请方的枢公钥加密后的报告。当申请方为平台时,验证报告在典枢平台上公开;当申请方为用户时,该报告仅对用户可见。不同的验证程序所生成的验证报告内容也不尽相同。通常,验证程序是针对特定的数据格式的,例如针对CSV格式的数据;也可以针对更加特定的情况。一个数据格式下可能存在多个不同的验证程序,用于展示数据的不同信息。
验证报告是基于数据和验证程序生成的,因此是客观、真实的,能够直接反映数据本身的情况。例如验证报告中可以包含视频的截图,买方可以从截图中知道视频是否和描述信息一致;验证报告中还可以包含表格的统计信息,买方可以从统计信息中知道表格中的数据是否是伪造的。这些验证报告都能够为买方的购买决策提供强力的支持。
以下是典枢平台上的一些验证程序。
CSV统计程序
传入csv格式的文件,本算法将对文件的数据进行质量评估的统计,并在算法结束后将统计结果输出。统计结果包括csv的行数,列数,总缺失值数,列缺失值数量统计、行缺失值数量统计。算法将以列数最多的行为起点统计缺失值情况。
CSV统计程序运行后输出结果的结构如下所示:
{
"rows": 58,
"cols": 6,
"totalNulls": 48,
"NullProportion": 13.79,
"col_nulls": [
{ "null_num": 6, "count": 1 },
{ "null_num": 7, "count": 1 },
{ "null_num": 8, "count": 2 },
{ "null_num": 9, "count": 1 },
{ "null_num": 10, "count": 1 }
],
"row_nulls": [
{ "null_num": 0, "count": 34 },
{ "null_num": 1, "count": 16 },
{ "null_num": 2, "count": 2 },
{ "null_num": 3, "count": 1 },
{ "null_num": 4, "count": 1 },
{ "null_num": 5, "count": 3 },
{ "null_num": 6, "count": 1 }
]
}
输出的内容有
rows
:csv中的总行数cols
:csv中的总列数totalNulls
:总缺失值的数量NullProportion
:缺失值百分比,该缺失值精确到小数点后两位。col_nulls
:每列中有多少个缺失行的数量统计null_num
:表示缺失x行count
:缺失x行的数据共有多少列 注:若缺失x行的数量为0时(count=0)
,将不会输出;null_num > 1000
时的统计将统一存储在null_num=1001
的条目中。这两个条件对缺失列的数据统计同样适用。
row_nulls
:每行中有多少个缺失列的数量统计null_num
:表示缺失x列count
:缺失x列的数据共有多少行
文本抽样程序
传入txt格式的文本文件,本算法将对txt文件进行质量评估,将txt文件的前中后位置上的部分内容打包输出到一个json文件中。目前的算法中,当输入txt文件后,将返回该txt内容的前10%内容(最多150字),中间20%内容(最多300字),尾部10%内容(最多150字)作为质量验证报告。
注:在分析中,一个“字”表示一个 英文字母/汉字/符号/操作符 等内容。
文本抽样运行后输出结果的结构如下所示:
{
"head": "#include \"user_type.h\"\n#include \"string_process.h\"\n#include \"ypc/core_t/analyzer/data_source.h\"\n#include \"ypc/stbox/ebyte.h\"\n#include \"ypc/stbox/stx_c",
"mid": "一个batch的所需长度\n int start_pos = total_size / 2 - 50; // 中间的100字节的起始位置\n int mid_batch_no = start_pos / batch_max_size; // 中间的100字节所在的batch的编号\n \n start_pos = start_pos % batch_max_size; // 中间的100字节的起始位置在batch中的位置\n\n LOG(INFO) << \"Batch Num: \" << batch_num;\n LOG(INFO) << \"Start Position:",
"tail": " process_string(middle_100) + \"\\\"}\";\n return result;\n }\n\nprotected:\n std::vector<std::shared_ptr<ypc::data_source_with_dhash>> m_datasources;\n};\n",
"total": "3474"
}
输出的内容有:
head
:txt文件头部10%(最多150字)内容mid
:txt文件中部20%(最多300字)内容tail
:txt文件尾部10%(最多150字)内容total
:文本文件中的总字数统计
以上例子中展示的是一个包含代码内容的txt文件,除了普通文字内容,代码中包含了更多的换行符以及引号,换行符将在结果中以''\n'
的形式被输出内容中的引号为了防止json解析失败也会以'\"'
的格式输出。
视频抽样程序
传入mp4格式的文件,本算法将读取mp4的内容并截取其中的数帧的画面编码成base64格式的json数据输出,输出图片不固定,在每次运行时都将随机选取图片输出,目前规定输出的内容视频总时间、三张视频截图(以Base64编码表示)以及其三张截图的截取时间,
输出json格式如下:
{
totalDuration: // 总时长
positions: [
{
duration: // 时间点
picture: // 截取图片
},
{
duration:
picture:
},
{
duration:
picture:
}
]
}
totalDuration
:该字段中包含了所有视频截图的编码数据,每一条数据都代表一张视频截图的base64编码,可通过解码获取原图。positions
:duration
:截取图片对应时间(以秒为单位表示)。picture
:该字段中包含了所有视频截图的编码数据,每一条数据都代表一张视频截图的base64编码,可通过解码获取原图。
PDF验证程序
传入PDF格式文件,本算法将对pdf格式的富文本数据进行质量验证,将随机抽取该数据的三页,并对抽取结果进行水印和模糊处理,(如果不足三页,则将全部页进行处理)最终生成数据质量验证报告。
质量验证报告的json格式如下:
{
"pages": [
{
"page_content": "/9j/4AAQSkZJRgABAQEBAQIBAQECAgICAg......QAUUUUAFFFFABRRRQB//Z",
"page_number": "1"
},
{
"page_content": "/9j/4AAQSkZJRgABAQEBAQIBAQECAgICAg......QAUUUUAFFFFABRRRQB//Z",
"page_number": "2"
}
],
"total_pages": "2"
}
total_pages
:该字段为PDF文件的总页数。pages
:page_content
:已经处理好的PDF抽取页面的base64编码,可通过解码获取抽取的PDF页面截图(已添加水印)。page_number
:抽取的PDF对应的页码