缓存的公告

Bulletin#702F8449163DFA355ADBF437300A7419

o5rdqyAP36HG6HTCHbiTNh1GJ7kvKk4Z5m #9

发布@2020-09-13 18:30:25

上一篇


引用


【公告】实现了个体自由披露公开信息,那么个体如何自由收发私密信息呢?
这里说的私密信息是指知悉范围在2个及以上个体之间的信息。
这里只考虑技术问题,不考虑知悉范围内个体泄密的非技术问题。

说到私密消息,就要谈谈端到端加密。
所谓端到端加密,是指只有消息收发两端知道消息明文的消息,两端之间的数据传输节点只能看到消息的密文。

那么微信及其他聊天系统,做到了端到端加密?
答案是没有。
它们最多只做到了客户端到服务端的加密,而没有做到发消息人到收消息人的加密。
我要的端到端加密是我的客户端到好友的客户端加密,服务端只能看到密文,而是不是服务端(微信及其他聊天系统)可以看到我与好友之间消息的明文。

既然现有系统无法保障宪法第四十条:“中华人民共和国公民的通信自由和通信秘密受法律的保护。除因国家安全或者追查刑事犯罪的需要,由公安机关或者检察机关依照法律规定的程序对通信进行检查外,任何组织或者个人不得以任何理由侵犯公民的通信自由和通信秘密。”赋予个体的权利,那还是搭建一套能够保障个体通信自由和通信秘密权利的系统。

客户端到服务端的加密是如何做的?
简单说分3步:
第1步根据浏览器自带的根证书,校验网址与证书是否有效,确定网站是不是假的
第2步使用Diffie-Hellman算法,在不可信网络上交换随机数,两端各自计算出一个相同的参数
第3步使用第2步算出的参数生成对称加密密钥,后续两端的消息都用这个对称加密密钥进行加密
(第4步定期生成新的对称加密密钥,使用新的密钥加密消息)

第1步继承【公告】的设计就可以实现,所有的消息都是带有签名,都与1个特定的账号绑定,并且不可伪造。
message=
{
"Action":302, //这是一条聊天消息
"Sequence":, //聊天消息序号
"PreHash":, //前1条消息的Hash
"PairHash":[], //是接收消息的Hash值的数组,用于向对方表明自己已经接收到了那些消息,长度0-8
"Content":, //聊天消息内容
"To":, //聊天对象账号
"Timestamp":,
"PublicKey":,
"Signature":
}
第2步增加一个生成对称加密密钥的机制就可以,后续单开1条【公告】介绍。
第3步使用对称加密密钥,加密消息内容的明文,也就是说Content字段是消息内容的密文。