基于前文对个人数据权力的分析,在网络空间个人能够获得的最大程度的公平、自由能到什么程度?
- 个人在自己计算机(亦是网络空间)上是近乎主宰的存在,个人想存储什么数据就存储什么数据,想读取就读取,想删除就删除,想生成就生成(写小说、剪片子、搞设计),想装什么软件就装什么软件(甚至可以自己写软件),想开机就开机,想关机就关机,想联网就联网,想断网就断网,所以请多用计算机,用计算机的时候个人是主人。
- 个人在不受自己控制的网络空间服务面前所能争取到的最大权力就是发布的数据不被删除的权力,要实现这一点需要满足3个条件:
- 数据本地存储备份。个人的计算机要存储自己的数据,即便网络空间服务删除了数据,至少本地计算机还有再次上传发布的能力;
- 数据规范公开独立。个人发布的数据要符合公开、独立的格式规则,规范公开好理解,规范独立是指不依赖于受人控制的条件(比如TCP/IP数据包标准被公开发布以后,只要符合标准的数据包都可以在互联网上传输),换句话说就是数据可以脱离系统而存在,系统只是负责服从个人操作传输、存储、展示数据,是否存储、传输、展示由个人来决定,这样任何个人都可以在网络空间提供数据服务,也就是实现了单个网络空间服务提供者无法在整个网络空间删除个人发布的数据;
- 数据不可伪造抵赖。使用密码学技术对要发布的数据进行签名,个人发布的带签名信息的数据是其他个人无法伪造的,同时个人也无法否认带签名信息的数据是其他个人发布的,考虑到签名使用的密钥是基于算法的、本地生成的,不依赖于其他个人授权、不受其他个人管理,个人可以做到匿名发布(这里所说的匿名是指具备对网络空间服务提供者及非交互对象保持匿名的能力,个人可以选择向交互对象实名,也可以选择不实名,即便向交互对象实名,交互对象这个个人也可以选择相信或者不相信,总的来说个人与个人的互动、信任最终依赖的是每一个具体个人的判断,我说我是秦始皇也得你相信才行)。
- 除了上述两条权力外,个人没有必要争取其他权力,可以考虑主动放弃。
因此,基于以上分析,个人应该选择一个数据格式在网络空间发布数据,这也就是RippleMessenger中公告(Bulletin)功能要实现的能力,赋予个人自由发布数据的能力。
数据格式说明如下:
数据格式如下:
const BulletinSchema = {
"type": "object",
"required": ["ObjectType", "Sequence", "PreHash", "Content", "Timestamp", "PublicKey", "Signature"],
"maxProperties": 10,
"properties": {
"ObjectType": { "type": "number", "const": ObjectType.Bulletin },
"Sequence": { "type": "number" },
"PreHash": { "type": "string" },
"Content": { "type": "string" },
"Tag": {
"type": "array",
"minItems": 1,
"items": { "type": "string" }
},
"Quote": {
"type": "array",
"minItems": 1,
"items": {
"type": "object",
"required": ["Address", "Sequence", "Hash"],
"properties": {
"Address": { "type": "string" },
"Sequence": { "type": "number" },
"Hash": { "type": "string" }
}
}
},
"File": {
"type": "array",
"minItems": 1,
"items": {
"type": "object",
"required": ["Name", "Ext", "Size", "Hash"],
"properties": {
"Name": { "type": "string" },
"Ext": { "type": "string" },
"Size": { "type": "number" },
"Hash": { "type": "string" }
}
}
},
"Timestamp": { "type": "number" },
"PublicKey": { "type": "string" },
"Signature": { "type": "string" }
}
}
任何个人或系统在存储一条公告前,均至少需要做以下校验:
- 校验数据签名,确认数据完整性、发布账号;
- 校验当前数据链最后一条数据的序号为 Sequence-1,确认数据链的下一个序号为 Sequence;
- 校验前一条( Sequence-1)数据的Hash是否为PreHash,确认可以将该条数据从尾部插入数据链。
本文json的hash:7A333F0C719C3E01B876631ABBD85051
本文链接
本文带签名json链接
加一点,我这个数据结构不是空谈,是已经写出实现代码,并项目开源了哈。
同时还实现了端到端的加密聊天功能,感兴趣的小伙伴可以移步RippleMessengerClient。
感谢站长提供宝地交流。