加密聊天器+加密万能文件传输器
服务端
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