{"ObjectType":101,"Sequence":9,"PreHash":"2117D7CECCC9C8D32650517420654C83","Content":"【公告】实现了个体自由披露公开信息,那么个体如何自由收发私密信息呢?\n这里说的私密信息是指知悉范围在2个及以上个体之间的信息。\n这里只考虑技术问题,不考虑知悉范围内个体泄密的非技术问题。\n\n说到私密消息,就要谈谈端到端加密。\n所谓端到端加密,是指只有消息收发两端知道消息明文的消息,两端之间的数据传输节点只能看到消息的密文。\n\n那么微信及其他聊天系统,做到了端到端加密?\n答案是没有。\n它们最多只做到了客户端到服务端的加密,而没有做到发消息人到收消息人的加密。\n我要的端到端加密是我的客户端到好友的客户端加密,服务端只能看到密文,而是不是服务端(微信及其他聊天系统)可以看到我与好友之间消息的明文。\n\n既然现有系统无法保障宪法第四十条:“中华人民共和国公民的通信自由和通信秘密受法律的保护。除因国家安全或者追查刑事犯罪的需要,由公安机关或者检察机关依照法律规定的程序对通信进行检查外,任何组织或者个人不得以任何理由侵犯公民的通信自由和通信秘密。”赋予个体的权利,那还是搭建一套能够保障个体通信自由和通信秘密权利的系统。\n\n客户端到服务端的加密是如何做的?\n简单说分3步:\n第1步根据浏览器自带的根证书,校验网址与证书是否有效,确定网站是不是假的\n第2步使用Diffie-Hellman算法,在不可信网络上交换随机数,两端各自计算出一个相同的参数\n第3步使用第2步算出的参数生成对称加密密钥,后续两端的消息都用这个对称加密密钥进行加密\n(第4步定期生成新的对称加密密钥,使用新的密钥加密消息)\n\n第1步继承【公告】的设计就可以实现,所有的消息都是带有签名,都与1个特定的账号绑定,并且不可伪造。\nmessage=\n{\n\"Action\":302, //这是一条聊天消息\n\"Sequence\":, //聊天消息序号\n\"PreHash\":, //前1条消息的Hash\n\"PairHash\":[], //是接收消息的Hash值的数组,用于向对方表明自己已经接收到了那些消息,长度0-8\n\"Content\":, //聊天消息内容\n\"To\":, //聊天对象账号\n\"Timestamp\":,\n\"PublicKey\":,\n\"Signature\":\n}\n第2步增加一个生成对称加密密钥的机制就可以,后续单开1条【公告】介绍。\n第3步使用对称加密密钥,加密消息内容的明文,也就是说Content字段是消息内容的密文。","Timestamp":1600011025504,"PublicKey":"0216B8875FE7513978CF2167C7AB7A3A6BC1F95E7DE20498980CACB70E51EA207A","Signature":"3045022100A7AE4A1427A273C6E9A9054BB74504A4C38C61F05520E61E584D5949C17530BC02201301258FADBD96EA184BF8FE567E1ED51A47F321BFBEE395002027470392E8E2"}
oxo