[开源] 使用 gpg 做账户管理的设备间同步、账户管理体系

2021-08-21 17:35:13 +08:00
 err1y

目前版本支持跨设备剪贴板文字同步( win 、linux 、mac ),接下来要做跨平台的截图和文件拷贝。

顺便问下,哪位仁兄公司招人,北京 nodejs 、python 研发均可。

微信:erriye

以下为 github readme 文档内容


third

基于**kns[地址解析]-relay[内网穿透]-rpc[远程调用]**的去中心化的类 icloud 账号通讯体系

我的公钥:46C8 3280 1B39 E4EB 61DE 615E 699A 698E 7777 7777

0. 相关知识

1. 使用方法

1.1 应用使用说明

请自行确保本机已安装 gpg 套件

1.2 docker 启动

注意,只有服务器建议 docker 启动,提供 kns 和 relay 服务

剪贴板、账户系统都在 electron 部分代码中,docker 中不会启动此部分代码

1.3 代码使用说明

2. 原理

2.1 kns

kns ( key name system )主做类 dns ( domain name system )的基于 pgp 公钥指纹的地址解析模块

2.1.1 record

2.1.1.1 record 携带对象 object 详细格式
{
  // 指定 record 过期时间,不指定则为创建后 5 分钟过期,过期机制防止历史数据被恶意利用
  "expire": "...",
  // 附属子设备,可以不指定
  "device": [],
  // 服务地址,可以不指定
  "service": "http://xxxxx",
  // 是否提供 kns 查询和存储功能
  "provider": false
}
2.1.1.2 record 发布格式
{
  // pubkey 为 pgp 公钥数据,供验证 signed 部分签名是否正确
  "pubkey": "...",
  // signed 为实际签名部分,对 record 的对象 JSON 序列化后的 clearsign
  "signed": "..."
}
2.1.1.3 record 解析示例

以下方 record 为例,解析过程如下:

{
  // 公钥
  "pubkey": "-----BEGIN PGP PUBLIC KEY BLOCK-----\n\nxjMEYRY2BhYJKwYBBAHaRw8BAQdAkOqLs1eMpGDDEsXg220YLdm4ZSsLViZc\nB1vD4Wfw0kPNBXRoaXJkwowEEBYKAB0FAmEWNgYECwkHCAMVCAoEFgACAQIZ\nAQIbAwIeAQAhCRB/ULsrLsg+PxYhBBuBUCZT+khM+paIKn9QuysuyD4/VAwA\n/A2R51vmuELCaT7gZ4AAvY5czskvt7PCtysIBhtKSLN3AP9VN4Uy4pr6oofP\nl3/JwBpiHmrtZ6LxzfWs6acpUxtqCc44BGEWNgYSCisGAQQBl1UBBQEBB0C5\nZGUFsxcfZoUutRgEYIu/HuH83C8ubV3v0xFfCCJfHwMBCAfCeAQYFggACQUC\nYRY2BgIbDAAhCRB/ULsrLsg+PxYhBBuBUCZT+khM+paIKn9QuysuyD4/JV0B\nANw7XgMMf5sG9yD9EGHG6UNp6d/N0NGy7TrSUNLfG/5GAQDWNwkL+xcn14b5\nW8Z7BvWeqYimNz8Cd54Ggzjpb/bEBw==\n=uyqt\n-----END PGP PUBLIC KEY BLOCK-----\n",
  // 签名后的 object 对象
  "signed": "\n-----BEGIN PGP SIGNED MESSAGE-----\nHash: SHA512\n\n{\"service\":\"http://192.168.199.149:34105/\",\"expire\":1629693271.874}\n-----BEGIN PGP SIGNATURE-----\n\nwnUEARYKAAYFAmEZ/ZcAIQkQf1C7Ky7IPj8WIQQbgVAmU/pITPqWiCp/ULsr\nLsg+P8LrAPkBG747gXTJNS1LI9kQwlLLBAKT4prr5B0gExbh5/gz0QEAwgRR\nQgwzda5fudsFYogPhDMClHODhlnzabsN8he7XAk=\n=khc4\n-----END PGP SIGNATURE-----\n"
}

2.1.2 mdns

mdns 功能主要做内网设备发现,在 mdns 功能启动的情况下,会周期性内网 query 'third.local'域名,所有开启 mdns 功能的其他终端均会响应,具体原理查看mdns词条。

2.1.3 dht

以下内容中包含的距离,使用 sqlite 中的字符串排序计算

支持简单的 dht 网络搜寻功能,主要目的是去除对 bootstrap 初始节点的依赖,方便全网设备的互相发现。

2.1.4 工作流程

2.2 relay

relay 模块主做 http 请求中继功能(反向代理),类 ngrok 、frp 的内网穿透模块,但是仅支持 http 协议,客户端可以嵌入到代码中使用。

以下时序图演示的是 relay 工作流程

2.3 rpc

基于 http 做的 rpc 调用,方便设备间访问,流程如下

2.4 account

账户 record 与设备 record 一致,包括 device 字段的则认定为是一个账户记录。

账户记录会调用 gpg 进行签名,本软件目前并不负责账户的创建和管理工作,

2.4.1 登录逻辑

2.4.2 以 clipboard 同步来解释 account 工作原理

3. 目前支持功能

4. Q&A

4.1 为什么不使用 pgp 的 subkey 做 device key

如果使用 subkey 做 device key 的话,subkey 丢失需要主 key revoke subkey,然后一直携带到主 key 的公钥中。随着设备的增多或 key 的变化,主 key 的公钥大小会逐渐膨胀,不是想看到的情况。sign-key 也是一样,对设备 key 进行签名则表示对 key 的信任,如果需要踢出设备的话,会需要 revoke 对设备 key 的签名,然后再发布,不如直接签发一段动态信任的数据可靠。

5. 碎碎念

6. todo

993 次点击
所在节点    开源软件
0 条回复

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/797200

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX