Pages

Friday, 1 July 2022

Ragnarok ,用AES加密的聊天器


加密聊天器+加密万能文件传输器

服务端

Ragnarok_server\server.py

说明

服务端只做用户合法性验证和双向密文互换,可以放在国内小鸡上。

特别做个服务端出来的原因是考虑到很多宽带都是NAT的内网。所以通过公网小鸡桥接。

有一根长长的网线,一直伸到你家里,你说什么做什么他们都知道的一清二楚。

于是我决定写这玩意,名字随便起的。再也不用担心被视奸了

设置

在config里改端口,对linux了解不太多,所以怎么在服务器上运行还请dalao写个shell加进来(写了个实验版后台shell)

聊天模块

Ragnarok_client\Whisper.py

安装

我在win10 64bit python3.6.4环境下写的。换个别的环境不保证能用。

设置

UserID:你自己的代号,比如9527

TargetID:你想和谁说悄悄话

Local_IP:不用管

Local_Port:用哪个端口去连服务器

Target_IP:其实这个应该是serverIP,小鸡的地址

Target_Port:服务器监听的端口

Blocksize: 发送文件时对文件进行分块(聊天不用管)

使用

只要敲文字进去就能显示在对方的屏幕上了。

加密特性

客户端每次启动都会随机生成一组RSA pair并写入文件。

客户端1输入“如果我是DJ”

随后生成一个AESkey

用AES_EAX模式加密“如果我是DJ”,得到密文和随机数

然后用得到的RSA公钥加密这个AESkey,得到cipherkey

然后把cipherkey和随机数和密文合并到一起发送出去。

接到数据的客户端2用自己的RSA私钥解出AESkey,进而解出明文

除了RSA的秘钥对需要保存到本地进行调用,其他所有信息的加密解密都在内存中完成,不留任何log。

我就不吹有多保密了(量子计算机出来之前,谁都看不到你们说了什么悄悄话)但是有一些人为因素问题后面说。

发送文件模块

Ragnarok_client\File_Tx.py

设置

UserID:你自己的代号,比如9527

TargetID:你想和谁说悄悄话

Local_IP:不用管

Local_Port:用哪个端口去连服务器

Target_IP:其实这个应该是serverIP,小鸡的地址

Target_Port:服务器监听的端口

Blocksize: 发送文件时对文件进行分块加密的大小

加密特性

强制二进制逐block读取文件,加密后的字节串因为TCP协议的限制被分割发包。目标端统计blocksize再进行粘包解码,解出来的字节串直接写入文件

和聊天的时候不太一样,因为考虑到文件产生的大量数据流,AES秘钥仅做一次交换,简化了双线程变成单向发包。

使用

把要传的文件放到根目录下。(复杂地址懒的搞了)两个客户端在建立连接后,一方输入文件名,另一方留空直接回车,开始一系列响应直到数据传输完成。

python3还是不错的,天灭python2,支持的文件大小可以论G算。如果非要传一些小电影也请随意。支持所有格式,只要是个文件,就能传

本机测试的时候用8192的blocksize可以到8Mb/s的加密速度,更大的blocksize没试过了,大概网速跟不上解释器的速度。

测试的RAR大小334Mb

Blocksize: 2048 4096 8192

用时: 165s 86s 44s

人为因素

中间人攻击是个目前没有什么解决办法的事情,所以才有了CA去保证RSA公钥的可靠。一个程序中,最薄弱的环节是人。最迫不得已的办法,显示接收到的秘钥以便在旁路(线下py交易,企鹅vx)上进行公钥可靠性的确认。不过不干坏事也不会招致高科技的中间人攻击……技术无罪。

另外考虑到社工的问题,ID最好不要起自己喜欢的一些字段。因为和服务器交换ID的时候是明文,反正是个隐患。

一点小小的心愿

历时一个月从什么都不懂,到开始盲人摸python,到撸出来这个程序。今天算是瞎猫撞上死耗子撸出来了,差点弃坑。有的时候比较喜欢大开脑洞,比如2100年的一个晚上,K摘下了手表眼睛手机,带着一张写满英文数字的纸条出门了。在一个小巷和一个老哥擦肩而过的时候,仿佛手里的纸条有一点点的不一样。回到家,拿出爷爷的信仰阿苏斯笔记本,打开了Ragnarok,进入了这个cyberpunk时代最后的世外桃源。

如果有大佬用C#重构一个GUI的exe。安装和使用都会更方便。不过命令行更有黑客的感觉,做人不装逼,和咸鱼有什么区别。

做了个文件传输以后,我实在是想不出来还有什么拓展性,如果各位大佬有什么好的建议请fork或者留言。

from https://github.com/haoht/Ragnarok

 

No comments:

Post a Comment