# 重构-私有数据selfdata **Published by:** [Jacky3](https://paragraph.com/@jacky3/) **Published on:** 2023-08-10 **URL:** https://paragraph.com/@jacky3/selfdata ## Content 一些关于selfdata的重构优化笔记selfdata ---> selfdata + relay1. relay节点重构,仅调整为提供三方面的服务:1.1. 提供文件中转服务,为私有数据提供网络同步功能, 需要增加中转类型, 包括同步和API两种类型 1.2. 提供消息分发服务,为私有数据提供定向和广播传送, 作为消息调度枢纽,后续为私有推送提供服务 1.3. 提供对外API服务,为授权的第三方应用提供私有数据提取功能,初期仅支持文件内容和k/v数据提取功能 2. relay节点不提供web配置服务, 所有运行所需要的配置全部由私有数据节点selfdata进行配置和同步更新3. selfdata节点重构,撤销命令行,改为由web可视化提供所有功能,包括以下各方面服务:3.1. web部分资源增删改查,所有操作更新到内存文件系统 3.2. web部分提供可视化入口进行数据加密并持久化存储 3.3. web部分提供网络同步入口进行私有数据分发(包括文件和消息) 3.4. web部分提供系统配置功能,包括本地和relay节点两部分, 目前实现的版本需要以此进行拆分 //// 私有数据授权 //// 1. 提供请求授权信息,包括发起方id, 接收方id, ip等 //// 2. 实时向接收方发送授权请求链接,通过链接确认的方式进行动态授权 //// 3. 授权通过后记录双方id, 并生成唯一通讯传输码用于croc传输 //// //// 发送 //// 1. 先对客户端发送方和接收方id进行验证,判断是否存在传输映射对 //// 2. 再根据id和authCode判断当前操作是否为自己发起 //// 3. 生成唯一传输码,用于发送和接收,并记录到内存 //// 3. 返回加密传输码和对方公钥,由客户端调用croc发起传输请求 //// 接收 //// 1. 先根据客户端id判断是否存在以自己为接收方的传输映射对,并提取传输码 //// 2. 再根据id和authCode判断当前操作是否为自己发起 //// 3. 清理唯一传输码,更新内存缓存, 保证每次传输唯一 //// 4. 返回加密传输码和对方公钥,由客户端调用croc发起传输请求 //// //// 1. 由于croc传输数据全部用公私钥加解密, 可考虑唯一传输码调整成在请求授权的时候进行生成, 撤销每次传输都动态生成, 避免分布式环境下频繁传输存在数据库竞争更新的情况 //// 2. 先暂时中心化对方式实现,后期考虑分布式实现, 仅仅保证核心数据库同步即可, 共识问题由本地验证并由自己动态授权既可完成 //// //// 本地 //// 1. selfdata新增同步模式, 开启后根据客户端id和动态授权码先从云端拉取所有资源列表(id和auchCode用于验证是否为自己), 同时每一条记录都映射与其对应的relay节点 //// 2. 在获取到云端资源列表之后, 再进行下一步的读取操作(包括本地和云端), 读取操作需要新增文本消息和文件两种 //// 3. 在获取到云端资源列表之后, 再根据资源列表选择发送到哪一个客户端 //// //// web //// 1. 需要新增管理页面, 展示用户自己的所有客户端列表(显示客户端id, 用户信息(邮箱手机号等), relay节点, ip, 地区, 授权列表, 传输日志) ////1.1. 授权列表为匹配授权成功后的客户端信息列表(包括id, 用户信息(邮箱手机号等), ip, 地区, relay节点等, 开启关闭删除操作) ////1.2. 按条件检索后续再考虑 2021-11-21// 重构 /* 1. 统一调整为全部密文存储,内存解密, 极简版本加解密和动态授权源码开源, 支持自行开发接入 2. 极简版本保持目前仅仅加解密功能,新增内存命令行管理, 不支持网络传输, 加密数据仅仅只面向同一个客户端可进行加解密(可自行实现网络传输) 3. 专业版核心收费部分支持分布式环境网络传输, 支持跨平台任意私有数据版本客户端解密, 加密仅支持专业版及以上(仅仅只是中转节点代理转发加密数据, 无服务器) 4. 专业版管理授粉部分支持web可视化管理,包括私有数据管理, 公私钥管理, 中转节点管理, 动态授权管理(包括授权认证和公钥对换)等 5. 收费部分, 专业版通过唯一支付授权码可下载任意版本客户端 6. 专业版稳定后, 后续可考虑接入硬件部分 开发 1. 需要在客户端本地环境生成db文件用于管理, 所有入库内容全部通过公钥加密, 即使数据库丢失仅仅只是管理数据丢失并且无法打开使用, 不影响任何私有数据 2. 动态授权部分, 需要调整到rwcore(可考虑重命名), 动态授权可选择由云端发, 也支持直接在客户端本地发送, 代码开源 3. 客户端打包不再需要写入用户邮箱或者手机号, 调整为客户端第一次初始化时指定, 指定包括动态授权ID(邮箱, 手机号, gotify等), 辅助邮箱等信息 4. 支持客户端本地修改邮箱, 但需要原动态授权通过, 如果原动态授权不可用并且存在辅助邮箱, 则可通过辅助邮箱进行认证授权, 否则客户端将彻底无法使用 5. 为了保证体验, 后续可支持由授权客户端发起辅助, 即客户端发起数据传送, 如果能正常解密达到指定数量即可进行动态授权修改 开源组件 1. 上传: https://github.com/tus/tusd 2. 下载: https://github.com/melbahja/got */ 2021-11-23// 1. 解决客户端数据暴露在云端的问题, // 支持输入动态授权ID在线生成跨平台活数据,对数据的任何操作将触发动态授权 // 支持selfdata客户端自动生成活数据同步到云端, 云端只有在自己授权的情况下才能拿到元数据 // 客户端同步的数据包括邮箱和公钥, 任何更新操作将触发动态授权, 对邮箱或公钥使用将触发特定授权(需要提供请求参数) // 对于授权发送, 由活数据内部提供, 外部只需要提供用途和携带的数据即可, 避免数据暴露到外部 // 目前需要提供的接口: // 1. 数据获取(在线链接授权校验), 更新数据需要重新生成 // 2. 根据输入的密钥解密出元数据, 进行提取 // 私有活数据(rsdata), web和api(后续看情况, 本地使用密钥先加密再上传), 根据平台架构官方云端生成 // // selfdata客户端通信及加解密 // 1. selfdata的私有活数据存储于云端, 为二进制形式(随云端一同分发), 数据由客户端提供 // 2. selfdata的私有活数据通过云端AES密钥加密数据(访问需要动态授权), 使用自己的动态随机密钥加密通讯数据 // 3. 由于动态授权在私有活数据内部进行, 任何授权操作以及参数校验提取操作全部在私有活数据内部进行 // 私有活数据提供的接口: // 1. 根据输入的云端AES密钥解密出元数据 // 2. 数据更新, 数据获取(在线链接授权校验), 由action指定(update, export). // 3. 使用自己的通信密钥解密出请求数据 // 4. 客户端动态授权(仅发送授权码) // 5. 客户端公钥对换(在线链接授权校验, 交叉加密) // 第一次初始化数据的问题, 通过云端AES加解密, 在客户端第一次初始化时对云端进行严格的校验, 比如文件hash, ip, 地区, 官方校验等, 触发在线链接授权校验 /* 重构 0. 云端不再负责公钥对换, 全部迁移到本地客户端, 云端仅仅存储客户端无法篡改的数据以及数据转发, 云端所有数据全部公钥加密, 所有公私钥全部在本地客户端 1. 极简版本selfdata保持目前作为工具支持读写操作生成私有数据, 不支持网络传输(解密导出不再导出zip, 直接解压出原数据), rwcore插件导入收费 2. 专业版selfdata调整为私有数据的升级版,支持本地内存加解密(仅密文存储), 本地cli命令行管理, 跨平台任意客户端点对点私有数据分发(99/永久) 3. 增值服务部分, 支持web可视化管理, 支持以服务运行模式的私有数据中心, 支持定制私有硬件(绝密管理)(全部按增值服务收费) */ 2021-11-24// 公钥不公开: 对换流程需要两个客户端和云端配合才能完成交换, 涉及交换准备(获取一个接收方客户端定的交换密钥), 发送方打包,放入接收方缓存, 接收方授权, 接收方打包, 公钥放入发送方缓存 // 发送方收到后再打包公钥, 公钥放入接收方缓存 // 公钥和邮箱公开到云端: 发送方发起对换请求, 接收方授权, 云端根据id使用双方公钥交叉加密并放入各自缓存 // 仅仅公钥公开到云端: 发送方发起对换请求, 云端将发送方公钥交叉加密放入接收方缓存, 接收方本地授权, 直接推送到发送方缓存 ## Publication Information - [Jacky3](https://paragraph.com/@jacky3/): Publication homepage - [All Posts](https://paragraph.com/@jacky3/): More posts from this publication - [RSS Feed](https://api.paragraph.com/blogs/rss/@jacky3): Subscribe to updates - [Twitter](https://twitter.com/rsjacky3): Follow on Twitter