2 July 2019 - 字数统计：1387 - 阅读大约需要5分钟 - Hits: Loading...

# 制作分布式加密邮件系统的计划

by mayx

这是一篇创建于 天前的文章，其中的信息可能已经有所发展或是发生改变。

AI摘要

这篇文章的计划是制作一个分布式加密邮件系统，起因是对Telegram的私密通信功能的兴趣，尤其是其在中国的使用限制。作者打算用HTML、Javascript、PHP和MySQL构建这个系统，选择PHP是因为其易于搭建且常见。项目将采用非对称加密（RSA）和对称加密（AES）相结合的方式，确保在客户端进行加密，以保护隐私。系统设计包括用户通过注册获得公钥，使用公钥和私钥进行登录验证，邮件发送时会通过多个节点尝试连接，确保安全性。然而，作者提到如果服务器被攻陷，公钥被篡改可能导致问题，尤其是对于不熟悉技术的用户。文章最后以一个轻松的语气提问项目的启动时间。

- 计划原因
  - Q&A
- 项目技术原理
- 项目细节
- 问题

一个计划还没开始，又开始另一个计划了……

#
计划原因

之前用了Telegram聊天，里面有一个私密通信的功能。听说这个功能可以让服务端没法知道使用者发送的信息。不过Telegram在国内使用限制比较多，所以我打算用HTML+Javascript+PHP+MySQL写一套自己的私密通信系统。

但是As We All Know，某些国家有网络审查，提供这种服务的肯定会被审查的。既然我们要做这个东西，就不能让它不稳定。所以我想把这个项目搞成分布式的那种，确保通信可以成功。（来自Mastodon的思路）

##
Q&A

1. 为什么使用PHP？

   之所以用PHP作为后端语言的原因呢…… 当然因为PHP是世界上最好的语言！（被打死） 因为PHP的程序好搭建，而且很多虚拟主机商都用的是PHP，这样即使小白也能搭建，就能让分布式节点更多了。 （明明主要原因是我只会PHP 23333）

2. 为什么我要做成邮件系统而不是聊天系统呢？

   因为聊天就要用Websocket或者是AJAX之类的，但是我不会……我只能把信息都存在服务器里，有人访问再显示出来……

3. 已经有PGP了，为什么还要重复造轮子呢？

   因为PGP是软件，小白用起来不太方便，这个是网站，可能相对更简单一些。 （重复造轮子能有什么理由）

#
项目技术原理

1. 所谓的私密通信主要用的就是非对称加密，比如说RSA什么的。所以这个项目同样如此，也使用RSA作为主要加密算法。
2. RSA虽然很不错，但是似乎加密速度比较慢？（我看HTTPS上介绍的是这样）所以内容用AES加密，用随机数做密码，一方用公钥去加密这个密码，另一方用私钥解密获得密码，然后再利用这个密码进行对称加密传输（和HTTPS差不多）。
3. 如果上述操作都是服务端进行，那这些就都没什么意义了，所以我们要在客户端进行。像Javascript进行加密完全没有问题，所以除了传输，其他加密都是在浏览器上进行。

#
项目细节

为了方便通信，公钥是要留在服务器上的，所以要搞一个用户系统，存储用户的公钥。在注册的过程中公私钥生成都是在客户端进行，确保服务端得不到用户的私钥，注册的过程中要将用户名和公钥上传至服务器保存。这就是为什么要用到MySQL。

登录时，先输入用户名，服务器使用用户名查找到对应的公钥，然后生成一个随机数，用公钥加密，发送给客户端，客户端用私钥解密，获得随机数，返回给服务器进行登录。

私钥登录后要持续保存，这时肯定不能用Cookie，我们可以用localStorage，然后客户端一定要做好防XSS，不然一切都没有了。

在发送的时候，我们可以搞一个类似Mastodon的用户名，两个@实在是太蠢了，就和E-mail一样，就搞成user@example.com的形式吧

在发送时客户端先检查对方服务器能否连接，如不能则测试通过服务器连接，如果服务器连接失败再使用其他节点连接（服务器内置），如果还是不行，用户可以自行输入节点，还是不行，投递失败。

连接成功后对方服务器查询对应用户的公钥，返回给客户端，客户端用这个公钥加密AES密码，用AES密码加密内容，然后再传给对方服务器保存。

查看邮件就用私钥解密AES密码，然后解密内容。

#
问题

如果对方服务器被攻陷，公钥被改成攻击者的，那不就没用了吗？虽然可以用指纹解决，但是这对小白来说似乎有些困难……HTTPS用的是第三方权威解决这个问题，我们就没办法了……

最大的问题是，什么时候开始动工？（笑）

tags: 分布式 - 加密 - 邮件 - 计划 查看原始文件

#### 推荐文章

Loading...

上一篇：重建MaBBS的计划
下一篇：EncMail-Project Part 1 - 准备阶段
想问这篇文章
召唤伊斯特瓦尔