验证程序
验证程序是一种特殊的微应用,用于披露数据某些维度的信息,以供买方参考。通常,验证程序不会披露额外的信息,这是由隐私计算技术保证的。
本文说明了典枢中各种验证程序的细节信息。
未来,典枢还将支持用户自定义验证程序。
概述
验证程序在可信执行环境(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对应的页码