验证程序

来自典枢
Andrew Parno讨论 | 贡献2024年4月17日 (三) 05:44的版本
跳到导航 跳到搜索

验证程序是一种特殊的微应用,用于披露数据某些维度的信息,以供买方参考。通常,验证程序不会披露额外的信息,这是由隐私计算技术保证的。

本文说明了典枢中各种验证程序的细节信息。

未来,典枢还将支持用户自定义验证程序。

概述

验证程序在可信执行环境(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对应的页码