怎样防止发送的绝密文件被中间人窃取和篡改
有些公司安装了网络监控,访问外网的数据很可能会被拦截和分析。还有一些像是局域网内的ARP欺骗与中间人攻击等会拦截你的请求然后记录下来甚至修改再发给另外一个人。
假如我们有一个非常重要的文件,需要发送给另外一个人,我们肯定要保证两点,第一是信息不能被篡改,第二是信息不能被其他人窃取。
最简单的就是通过WINRAR软件或其它类似的压缩软件来设置个密码了,这种情况加密用的密码和解密用的密码是一样的,称之为对称加密。但是考虑一个极端情况,假如你和对方的聊天内容会被全程监听,你一旦把密码发给对方,中间人马上就知道你的密码了,这时候就要采用非对称加密才行,这种情况加密用的密码和解密用的密码是不一样的。
我们通过简单例子演示下如何操作,原理其实是一样的。
一、对称加密
我们直接用WINRAR来演示对称加密。
我们模拟出一个重要文件
右击这个文件,选择“添加到压缩文件...”
设置密码
可以去中文当密码,也可以考虑加密文件名
不加密文件名时能看到文件名,后面带星号
双击文件时会提示我们输入密码
如果加密文件名,双击的时候第一步就要输入密码,加密的文件名看不到
WINRAR有暴力破解软件,有时候加密了文件名反而让软件更容易识别出是否暴力破解是否成功。
如果这个RAR文件被修改了,那么输入密码后会报错。
我随便修改了下文件,输入密码解压后报错,说明文件被人篡改了
同样的,如果我们密码输入错误也会报上面的错误信息。
通过这种方式,我们保证了文件传输过程中不会被篡改,而且别人不知道密码的话也看不到我们的文件内容。
二、非对称加密
前面的对称加密我们会很担心我们的密码被泄露,一旦泄露密码,那还是能被中间人解密。中间人甚至可以伪造一个文件用这个密码加密再传给接收人,这样会导致我们连对方是不是本人都很难确定。
这时候非对称加密出场了,我们用最经典的RSA加密来讲解,用到了openssl的Windows版本。
你在网上搜索下openssl for windows就行了,如果你用的Linux或其它系统版本,自己找就行。
因为我是WIN10 64位系统,所以我下载了标红的版本
然后把软件默认安装就行,默认安装位置为
为了方便使用,我们将该目录添加到环境变量里
末尾加个分号,再加上这个路径即可
WIN+R,输入CMD,进到命令行,我们cd到测试目录
生成一个私钥
通过调用如下命令生成私钥
openssl genrsa -out private.key 2048
private.key名字随意,2048是密钥长度,你也可以填1024,4096之类的,越长越难破解
然后调用如下命令由私钥提取出公钥
openssl rsa -in private.key -pubout -out public.key
现在公钥和私钥都有了
我们简单说下这个加解密的办法。就是私钥你只能自己保存,千万不要让任何人知道,而公钥你随便给谁知道都行,它就是公开的,被人窍取也不怕。
文件通过公钥加密,通过私钥解密。所以假如你要给张三发个绝密文件让张三看到,张三首先要通过RSA生成公钥和私钥,然后张三将公钥发给你,你用公钥把文件加密后发给张三,张三收到加密后的文件用张三自己的私钥解密就行了。因为张三的私钥没有暴露出去,只有公钥通过网络发给你了,而公钥是不怕被窃取的,所以中间的信息交互是安全的。
但是由于openssl.exe这个工具只能加密小的文件内容,没法加密大文件,那我们怎么办?
我们可以用第一步的WINRAR设置一个非常长的密码(比如wkjfksdfkjlskflwerewrwer3453)加密压缩后发给张三。然后再写一个包含了这个密码(wkjfksdfkjlskflwerewrwer3453)的文件用张三的公钥加密后一块发给张三。
下面我们来演示一下公钥加密和私钥解密的办法
一个单独存放解压密码的文件
我们通过调用如下命令对密码文件进行公钥加密
openssl rsautl -encrypt -in 绝密文件的解压密码.txt -inkey public.key -pubin -out 绝密文件的解压密码(加密后).txt
打开文件发现确实加密了,啥也看不出来
我们将压缩并加密的绝密文件.rar以及绝密文件的解压密码(加密后).txt这两个文件一块发给张三。
张三拿到这两个文件后,先对绝密文件的解压密码(加密后).txt用自己的私钥进行解密。
解密用到的命令是
openssl rsautl -decrypt -in 绝密文件的解压密码(加密后).txt -inkey private.key -out 绝密文件的解压密码(解密后).txt
调用解密命令
成功解密得出压缩软件的解压密码
得出解压密码后再解密绝密文件.rar,至此成功解密文件并阅读里面的内容。
因为RSA加解密较慢,所以实际的生活应用中也是文件主体用的是对称加密,然后把对称加密的密码用非对称加密后和加密后的文件一块发送,接收方先通过非对称加密获得密码,再最终用对称加密办法解密。这样同时兼顾安全与效率。
上面的两个例子通过简单的操作方式来让大家直观了解了目前市面上的主流加密思想及加密策略。现实生活中如果真有重要的文件怕被别人截获可以考虑如上操作。
一般我们上网的时候,如果网址是HTTPS开头的,这种就可以防止中间人拦截,数据是安全的。我们在QQ或者微信类的软件聊天时正常来说,传输的内容也是加密的,不会被截取到。
HTTPS开头的是加密传输内容,可以防止中间人拦截
中间人拦截还是有办法避免的,但是如果你的本机电脑中毒了,或者对方电脑中毒了,那这时候信息泄露危险就太大了。所以为了安全操作重要文件,有一台不能上网的电脑是有必要的。上述方法的私钥千万不要泄露出去就行,私钥长度不要太短。