每日一学:对称加密AES,摘要MD5,摘要SHA,编码Base64,HTTPS,中间人攻击

对称加密算法 AES

  1. AES 是一种对称加密算法,是 DES 加密的替代,密钥有 128,192,256 bit,256 的安全性最高,128 的加密效率最高;

  2. AES 采用分组加密,首先将需要加密的明文,分为多个明文块,每个明文块 128 bit,最后一个明文块如果不足 128 bit,需要进行填充,有不同的填充策略(解密时也需要同样的填充),然后对每个明文块加密后生成一个密文块,拼接在一起后就组成加密后的密文

  3. AES 加密原理,多轮加密,每轮涉及字节代替,行移位,列混淆,加轮密钥等步骤,解密过程就是将加密过程,倒放即可;

  4. AES 算法在 java.crypto 包里有封装(Cipher);

摘要算法 MD5

  1. 信息摘要技术,把明文内容按照某种规则生成一段哈希值,如果明文有任何改变,生成哈希都会大不相同;

  2. MD5,就是一种信息摘要的实现,可以从任意长度的明文串生成 128 bit 的哈希值(即 32位的 16 进制数),生成规则,通常是业务参数拼接 + 密钥组成明文,然后通过 MD5 生成密文,验签,就是接口方,用同样的规则生成签名,进行比对,来保证业务参数不被篡改;

  3. MD5 的原理是,处理原文,设置初始值,循环加工,拼接结果,

  4. MD5 破解,因为值有限,只有 2^128 种可能性,而明文是无限的,所以总有碰撞的可能(即不同明文生成相同的摘要),所以摘要破解,并不是值从摘要还原成明文,而是找到的碰撞值,如此,就可以骗过接口的验签,实现信息篡改;

  5. 破解手段有暴力穷举,字典表,彩虹表等手段;

摘要算法 SHA

  1. 和 md5 类似,也是一种摘要生成算法,有多种版本,SHA-1,SHA-2(又有 SHA-224,256,384,512 的子版本);

  2. SHA-1 可以从明文生成 160 bit 的信息摘要,MD5 是128 bit,SHA-1 比 MD5 性能略低,并且 SHA-1 已被破解;

  3. SHA-2 有多个子版本,分别生成 224,256,384,512 bit 的摘要信息,适用于不同的应用场景;

  4. 如果是为了保证信息完整性,可以不选择过长的摘要算法,如果是为了保证安全,可以同时使用多种摘要算法,合成一个摘要进行验证,如使用 MD5 摘要的前 64 bit 加上 SHA 摘要的后 128 bti 拼接成一个 192 bit 的合成摘要;

  5. SHA-1 摘要计算过程,是先把摘要进行分为 4 段,A,B,C,D ,然后在循环中交替运算这四段,最终组成 128 bit 的摘要结果,其他 SHA 算法与之类似,只是分段不同,段长度不同;

编码算法 Base64

  1. 一种编码算法,用于将二进制数据转换成文本数据,最初应用场景就是无法传输二进制文件,如果直接转换为 ascii 编码,在128 - 255 是不可见字符,在网络上交换时,这些不可见字符可能被误用,导致错误,因此使用 base64 编码,二进制数据都被转换成了 64 个字符以内的可见字符,这样就不会出现误用,只增加了 1/3 的空间;
	简单的来说,就是将二进制数据(其他可转换成二进制数据的数据),转换为无歧义的文本串(每个字符都是可打印字符,只有 64 种);
  1. 编码过程,首先将二进制值,每 6 bit 计算其十进制值,然后在索引表找到对应的字符,最终组成一个文本字符串;

  2. Base64 的索引表,只支持 64 个可打印字符,分别有大小写英文,数字,+,/,其算法变种基本上都是改变两个符号 + 和 / 为其他符号;

  3. 因为是每 6 bit 一次编码,所以最终是每 3 个原始字符编码成 4 个字符,如果原始字符不能被 3 整除,需要用 0 来补充,编码过程如下,Hello!! Base64 编码后的结果为 SGVsbG8hIQAA,但是因为 AA 不带任何有效信息,所以用 = 代替,= 也代表结束符号,需解码时需要转换为A;
    每日一学:对称加密AES,摘要MD5,摘要SHA,编码Base64,HTTPS,中间人攻击_第1张图片

  4. Java 编码过程,Java8 通过以下方法进行;

	Base64.getEncoder().encodeToString("hello!!".getBytes(StandardCharsets.UTF_8));
	Base64.getDecoder().decode("SGVsbG8hIQ==", StandardCharsets.UTF_8);

HTTPS

  1. HTTP 是明文通信,不安全;

  2. 对称加密,第一次通信交互密钥,但交互密钥是明文通信,可能被中间人截获;

  3. 非对称加密,第一次小红明文将公钥给小灰,随后小灰用公钥加密对称密钥传递给小红,小红用私钥解密,之后就使用对称密钥通信;

	虽然公钥可以被截获,但对称密钥交互过程只能用私钥解密,中间人就无法解密;
	但是中间人,可以偷换公钥,这样小灰发送对称密钥,就是使用偷换的公钥,中间人就能解密得到对称密钥,然后使用原公钥加密发给小红;
	小红也能正确获取对称加密,之后通信都使用对称密钥通信,中间人也获取了对称加密,通信就被偷听了;
  1. 之前的问题出在公钥交互的过程,这里可以引入一个 CA(证书机构)解决,小红作为服务端,首先将公钥发送给 CA,CA 为此生成一个证书,发给小红,这样传递公钥的过程就转变成,小红将证书发送给小灰,小灰拿到证书后会先校验证书的可靠性(校验的过程是通过浏览器自带 CA 公钥生成签名,进行比对),校验成功后解密出公钥,之后流程一样;
	这种方式,公钥是无法被偷换的,因为小红发送的证书是和小红的服务网址相关的,中间人偷换的是无法校验通过的;所以是安全的;
  1. HTTPS 就是通过 SSL/TLS 来完成 4 描述的一系列认证,消息加密的过程的;

  2. 参考:https://mp.weixin.qq.com/s/1ojSrhc9LZV8zlX6YblMtA;

中间人攻击

  1. 主机A 和 主机B 进行通信,此时攻击者主机C,拦截双方通信,进行篡改,伪装成主机B 和主机A 进行通信,又伪装成主机A 和主机B 进行通信;

  2. DNS 欺骗,攻击者通过入侵 DNS 服务器,或者篡改用户的 hosts 文件,从而截获用户的请求,既可以监听通信过程,也可以引导用户访问假网站;

  3. APR 欺骗,APR 是指局域网通信时,不仅要知道通信对方 ip,同时还需要知道对方 mac 地址,而获取 mac 地址就是通过 APR 协议通信,主机A 想要和 ip 为123的主机通信时,首先查找自己的缓存,找不到就在局域网广播,局域网其他主机,收到广播,发现ip 和自身一致的话,就会将自己的 mac 地址返回,这样攻击者欺骗主机A,返回自己的 mac 地址,就伪装成了ip 123 的主机和 A 进行通信;

  4. 代理服务器攻击,是指用户本身访问其他主机时,就使用了代理,如 ,wifi,这些代理工具本身有漏洞,或者自身就不可靠,如此导致了请求信息被劫持;

  5. 防范手段来说,使用 DNSSEC 安全认证(DNS 欺骗),使用防火墙和杀毒软件(APR欺骗),使用 HTTPS 协议(通信加密,无法被解密);

你可能感兴趣的:(每日一学,java,https,安全)