vlambda博客
学习文章列表

使用非对称加密匿名加好友

以下为真实发生事件,仅作记录,没有渲染。群里随意聊天,略显凌乱。

1. 如何匿名加好友

坐标南京某高校,去年10月份,各大互联网公司开奖的时候,学院同学建立了一个QQ匿名群,用于匿名交流开奖信息。最近正值论文答辩,匿名群中开始交流起论文信息。A同学想在不暴露身份的情况下加B同学为好友,交换内外审信息。由此引发出如何匿名加好友的问题。

图1:提出问题

群里面提出了如下两种方案:

(1)互相加小号,然后发匿名群发言截图,互证身份。

(2)找一个靠谱的中间人,由他验证身份并牵线。

使用非对称加密匿名加好友
图2:初步思路

匿名为法官的兄弟立马提出了质疑:

(1)互加小号,通过发言截图验证会存在P图可能。

(2)通过中间人验证,中间人是否可信,并且中间人身份也会暴露。

2. 非对称加密保护隐私

这时候黑莓同学提出了可以使用非对称加密的方式交换QQ号:

(1)由A同学生成一对非对称秘钥,包含公钥和私钥。

(4)A同学看到B同学发言后,使用私钥进行解密。

使用非对称加密匿名加好友
图3:使用非对称加密交换信息

这里有两个前提,保障了此次交换能够顺利进行:

(1)由于匿名群中,大家可以看到消息是谁发出,A和B同学可以只关注对方发出的消息,而不用理会其他吃瓜同学的干扰。

(2)非对称加密算法中,由公钥加密的密文,只能由私钥解开。如下图所示,非对称加密过程是单向的,其中公钥加密后只能用相对应的另一条私钥解密。

图4:非对称加密示意图

3. 如何证明我是昨天的我

前面已经说过,通过截图发言记录的方式并不可靠,可能存在P图嫌疑。这里黑莓同学提出了一个理想化假设:如果一开始就以A同学的昵称在匿名群发送一段Hash值,第二天昵称会自动变更,第一个发送出原文字的人,就是昨天的A同学。

图5: 如何证明我是我

这里以MD5散列函数举个例子,MD5加密算法是不可逆的,是一个单向密码体制。假设MD5不被破解的情况下。

(1)第一天的匿名昵称是A,以A的身份发送“今天天气真好”的32位MD5值:5F4152CDB8693ED153CD36BD1686489E。

(2)第二天昵称自动换成了B,以B的身份发送“今天天气真好”原文,同学们自行进行MD5加密,计算出MD5值结果与昨天5F4152CDB8693ED153CD36BD1686489E相同,即相信B同学为昨天A同学。

4. 记录一下

大家工作已定,论文也走到尾声。大家一边痛骂各大厂各种不足,一边在匿名群里胡乱口嗨。以上是同学们在匿名群里一段临时的讨论,没有彩排,不加修饰,存在各种条件没有考虑到,欢迎大家讨论。