加密算法

安全随机数
java:
java.security.SecureRandom

Linux:
/dev/random 或者 /dev/urandom


加密算法的选择

  1. 使用CBC模式的AES-256用于加密
  2. 使用HMAC-SHA512用于完整性检查
  3. 使用带saltSHA-256或者SHA-512用于HASH

前言

信息安全包括两点:一是信息的保密性,所谓的保密就是指只有你和你允许的人能看到信息。二是信息的完整性,所谓完整性就是指对方发的信息和你接收到的信息是一致的,中间没有被别人篡改过。

加密与算法

信息摘要算法

HASH算法

HASH算法:HASH 算法是一种消息摘要算法,不是一种加密算法,但由于其单向运算,具有一定的不可逆性,成为加密算法中的一个构成部分,完整的加密机制不能仅依赖 HASH 算法

那么在什么时候该选择哈希、什么时候该选择加密呢?

基本原则是:如果被保护数据仅仅用作比较验证,在以后不需=要还原成明文形式,则使用哈希;如果被保护数据在以后需要被还原成明文,则需要使用加密。
例如:认证口令密码的保存使用hash

使用场景

在密码学中,hash算法的作用主要是用于消息摘要和签名

  • 文件校验

我们比较熟悉的校验算法有奇偶校验和CRC校验,这2种校验并没有抗数据篡改的能力,它们一定程度上能检测并纠正数据传输中的信道误码,但却不能防止对数据的恶意破坏。
MD5 Hash算法的“数字指纹”特性,使它成为目前应用最广泛的一种文件完整性校验和(Checksum)算法,不少Unix系统有提供计算md5 checksum的命令。

  • 数字签名

  Hash 算法也是现代密码体系中的一个重要组成部分。由于非对称算法的运算速度较慢,所以在数字签名协议中,单向散列函数扮演了一个重要的角色。 对 Hash 值,又称“数字摘要”进行数字签名,在统计上可以认为与对文件本身进行数字签名是等效的。而且这样的协议还有其他的优点。

  • 鉴权协议

  如下的鉴权协议又被称作挑战–认证模式:在传输信道是可被侦听,但不可被篡改的情况下,这是一种简单而安全的方法。

常见HASH算法
hash算法实现:求模+异或+加减位移

常用的摘要算法有:MD5、SHA1、SHA256、SHA384、SHA512
MD5
被清华大学王小云教授证明不具备“强抗碰撞性”-可以构造两个不同的文件其hash值相同
SHA1
2017年谷歌证明不具备“强抗碰撞性”-构造两个pdf文件sha1值相同

SHA256又名SHA 2
所以,对于一些大的商业机构来说, MD5 和 SHA1 已经不够安全,推荐至少使用 SHA2-256 算法

加密算法

对称加密算法

  • 对称加密是指加密和解密需要的密钥是同一个
  • 对称加密的优点是速度快,缺点是安全性差(双方持有的密钥一致,有一方的密钥公开后那么信息将不再安全)

  • 常用的对称加密算法有:DES、3DES、TDEA、Blowfish、RC2、RC4、RC5、IDEA、SKIPJACK、AES

非对称加密算法

  • 非对称加密有一对秘钥,公钥和私钥。
  • 非对称加密的优点是安全性强(因为私钥只有你知道),缺点是加密过程速度慢。
  • RSA 、DSA、Elgamal、背包算法、Rabin、D-H、ECC(椭圆曲线加密算法)

数字签名

数字签名是为了证明对方发的信息并没有被更改过,但前提条件是你确认对方是可靠的,即你拥有的公钥确实是对方的公钥而不是其他人的公钥。而数字证书就是为了证明你拥有的公钥确实是对方的。

摘要算法来证明报文未被篡改过,使用非对称加密来说明是谁写的报文

先来说下现实生活中的签名,比如逛超市刷信用卡,刷完卡之后都要要求签名,这样做的好处就是商家可以通过你的签名来判断刷卡操作是不是你本人来完成的(虽然这对商家意义不大),当然这里面有个前提条件:只有你自己能重现你的签名,其他人做不到(笔迹鉴定)。

回到信息世界,还是上面的例子,女神收到表白后对你动心了,但是她不确定表白到底是不是你发出的,或者表白内容是否经过别人修改了。如果表白是用对称加密的,那么其他人拦截到表白后,虽然没有密钥,但是可以随便修改表白的内容,这样女神解密表白后并不知道原始的表白内容被修改了。如果表白是用非对称加密的,那么其他人拦截到表白后,重新写一份表白并用女神的公钥加密后发给女神,这样表白内容也被修改了。以上两种情况,不管是用对称加密还是非对称加密,表白信息都可能被别人修改,那怎么才能知道表白信息有没有被别人修改呢?
数字签名的目的就是为了证明你发的信息并没有被别人修改,原理就是非对称加密(证明是你本人)和摘要算法(证明信息没有被修改)结合,当然这里面也有个前提条件:只有你自己有私钥,其他人没有。

还是上面的例子,你写一份表白,写完后用摘要算法计算表白信息的摘要值,计算完之后再用你自己的私钥给摘要值加密,加密后的摘要值跟表白信息一起发给女神,女神收到信息(表白+摘要)后,首先用你的公钥解密摘要信息获取摘要的原始内容A,然后再用相同的摘要算法计算表白信息的摘要值B,最后比对A和B的值是不是一致,如果一致就说明表白信息是你发的并且没有被修改过。如果表白信息被拦截后并且被修改了,只有将修改过的表白信息重新计算摘要值并重新加密才行,虽然表白信息和表白的摘要信息别人都可以改,但是别人并没有你的私钥,这样女神最后得到的A和B的值是不相等的,结果就是女神知道信息被别人修改过并不可靠。

这里有两个疑点可以思考:
一:将摘要信息加密,那表白信息还需要加密么?如果表白信息不想被别人看到,还是需要加密的,那么用对称加密还是非对称加密呢?
二:女神有你的公钥,如果公钥被别人调包了呢?

数字证书

1.数字证书的用途

以上“数字签名”例子中,我们都默认了一个前提条件:女神拥有的确实是你的公钥,如果女神的公钥被别人调包了呢?继续上面的实例:如果女神的公钥被你的一个情敌调包换成情敌的公钥了,当你把表白和数字签名发给女神的过程中,情敌把信息拦截了,拦截后重新写了一份表白并用他自己的私钥生成数字签名(重复你的操作,只不过内容已经换成情敌的了)重新发给女神,这时女神并不知道“你”已经换成“情敌”了,那你就悲剧了哦。这时数字证书就起作用了,数字证书就是为了给女神证明发信人的身份的。

2.数字证书包含的内容

在现实生活里,为了证明我们身份,公安机关会给每个人颁发一个身份证。在信息世界里,数字证书就是对方的身份证。同样的,数字证书也有专门的发证机关Certificate Authority,简称CA。发证机关颁发的数字证书里包含以下基本内容:
1.证书颁发机关
2.证书持有者名称/服务器域名
3.证书有效期
4.证书签名算法(摘要算法和加密算法)
5.证书签名值
6.证书所有者加密算法
7.证书所有者公钥

3.如何验证

现实中要验证一个人的身份,首先核对这个人的身份证有效性,然后再核对本人相貌跟身份证上的照片是否一致。数字证书也是一样的验证思路:
1.验证数字证书有效性
数字证书里包含了发证机关对这张证书的数字签名,而浏览器默认内置了发证机关的公钥(暂且这么理解),拿到公钥后先解密证书的数字签名拿到证书的摘要,然后浏览器用证书的摘要算法重新计算下证书的摘要,最后比对这两者的值是否相等,如果相等证明这张数字证书确实是发证机关颁发的有效证书。
2.验证“相貌”
如何验证该证书的所有者就是跟浏览器正在对话的网站呢?
数字证书包含了web网站服务器的一个或者多个域名,浏览器会验证该域名跟正在对话的服务器的域名是否匹配(防止MITM)。

4.数字证书的级联

颁发证书的机构是可以有级联关系的,即A机构可以委派B机构颁发证书,B机构也可以委派C颁发证书,如果网站的证书是C颁发的,那么需要用B的证书去验证C颁发的证书,同理需要用A机构的证书去验证B颁发的证书,这个过程是递归的,A机构的证书被称为“根证书”。“根证书”是配置在我们电脑上,默认是安全的。

参考:
https://blog.csdn.net/li_lening/article/details/81208821
信息安全(ssl、数字证书、数字签名、加密算法)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值