本系统主要应用在数据保护和防御阶段,即默认用户设定自己唯一的根口令,且根口令由用户自行设定并确保其安全性,本系统只对口令的数据加密负责,并确保即使发生了严重的数据丢失也无法根据逆向工程破解其原始口令。主要设计有1.Mysql数据库表的设计;2.数据加密算法的设计,分布式加密存储的设计,3.Docker容器化Mysql分布式集群,服务重启和数据容灾。4.蜜罐系统的设计(包括系统内部蜜罐和开放式HFish蜜罐的应用)
底层算法支持,对称加密算法AES, 非对称加密RSA, 并基于此实现SSL算法。这些算法的具体实现详见我的另外一个项目:https://github.com/Wsky51/SSL-VPN ,本项目是在此基础上进行开发的,是其拓展
主要分布以下几个部分。以用户注册新账号为例,首先会对username明文进行2次md5加密,并从系统中生成一个uuid值(uuid1,)并将这两个参数作为一个bean保存到uname_uuid中去。之后,系统会生成一个随机数shift_rand值,其范围为[0,0x7fffffff],同时根据配置文件config.yaml文件读取集群,并分配当前的分片号(若集群有4个,则分片号为1~4),版本号是系统当前的版本,模拟一些应用进行迭代开发时的版本号,此处我们对版本号同样配置在yaml文件中,并通过BlockingScheduler设定一定时间版本号加1,来模拟软件迭代过程。最后我们的加密密码的生成为首先根据第一张表的uuid和当前密码进行一次md5加密,其次,我们会先将密码右移version位(对sha256加密后的长度取余),再拼接上version最后取sha256加密,最后,对shift_rand和pass2拼接字符串进行blake2b加密并右移shift_rand位(对blake2b加密后的长度取余)得到最后的加密字符串。但该字符并非是我们存到系统的字符串,而是需要经过分布式切片混合后再存储各个集群节点。
口令分布式存储系统会根据上一步得到的pass3以及当前的分片来进行分配,其具体算法如下,首先,生成shift_rand的blake2b加密值,之后根据当前集群的分片,如目前分片为1,且总分片数为4,则会将blake2b加密过后的值均为分为4等分(如果均分不了,则最后一部分取剩下未分完的加密字符),分完后,按照当前slice的值取对应的密码块,slice=1则取第一块,其他依次类推,而截取后的部分和shift_rand加密后的字符进行缺失拼接,即缺少哪块就将该块补上。最后得到与blake2b长度相同的加密字符。并将该字符作为最终的加密字符串存储到我们的目标集群中,从而完成整个分布式加密存储的过程。
搭建HFish蜜罐平台,HFish是一款安全、简单可信赖的开源跨平台蜜罐平台,支持SSH、FTP、TFTP、MySQL、Redis、MySQL、Telnet、VNC、Gitlab、Exchange、Memcache、Elasticsearch等多种蜜罐服务,HFish由控制端和节点端组成,控制端用来生成和管理节点端,并接收、分析和展示节点端回传的数据,节点端接受控制端的控制并负责构建蜜罐服务。
- 【数据库双表】 通过唯一的uuid进行加密,且第二张表的用户名必须要拿到第一张表的uuid后才能计算得到,而uuid是根据当前时间戳,随机数和mac地址得到,做加盐后用户名较难破解
- 【app version的使用】通过version的迭代,代码如下: 使得每过一段时间的version值都不一致,这就会使得在不同时间每次的加密结果均不一致。
- 【shift_rand】shift_rand作为大随机数,会进行密码移位,同时结合加盐,分布式整合数据等算法,提高了密码破解的难度
- 【分布式密码存储】我们对密码进行了按照集群切片,分别把拼合后的密码分别将不同的密码片段存储到不同的集群节点。即使黑客完全拿到一个库甚至整个库的数据,也极难通过暴力手段破解我们的密码系统。
- 【彩虹表攻击】通过多次加盐,多种hash算法加密,同时结合移位运算,动态数据,密码切割混合,分布式保存等等算法,使得彩虹表攻击是一个不可能完成的任务。
- 【蜜罐防御】 我们还通过HFish系统来抵御黑客攻击,每次黑客攻击都会记录其完整的攻击过程,并咋HFish完整显示,并可根据配置提醒管理员,使得数据泄露的可能性又降低了一个维度。