网上看到的一些关于网络安全的学习资料小结。
对称加密: 通信双方共享同一个密钥。发送方用它来加密,接收方用它来解密。
非对称加密: 有公钥和私钥。
现在的做法一般是用非对称加密生成?钥(公钥还是私钥?)用于传输?,然后再用对称加密进行通信。
加密 : 公钥加密,私钥解密 (公钥是lock,私钥是key)
数字签名证书: 私钥加密(生成签名),公钥解密(验证签名)
既然是加密,那肯定是不希望别人知道我的消息,所以只有我才能解密,所以可得出公钥负责加密,私钥负责解密;同理,既然是签名,那肯定是不希望有人冒充我发消息,只有我才能发布这个签名,所以可得出私钥负责签名,公钥负责验证。
对称加密分为两大类: 序列型 stream cipher 和 分组型 block cipher (更流行).
stream cipher: RC4
RC4: secret key 通过RC4 会生成一个无限长的序列,Plain Text跟RC4进行操作(比如说异或)会生成加密文本。不安全。
block cipher: DES, 3DES, AES, BLOWFISH, RC5, RC6.
非对称加密: RSA
Hash函数最快,其次是对称加密,再是非对称加密。
计算机中的Hash表主要用来存储和查找。
密码学中的Hash函数用途:
Hash算法有:
MAC: Message Authentication Code 用来确保消息完整性
HMAC: Hash-based MAC
TLS 1.3之前是MAC, then encrypt
1. plaintext先通过Hash function运算,结果再加上key,生成MAC
2. plaintext再加上MAC进行Encryption,生成Ciphertext
TLS 1.3之后通信双方可以自己定义是MAC then encypt,还是encrypt then MAC
SHA256 + RSA加密,最常见。
数字签名和指纹区别:
指纹只是校验用的,数字签名才是防黑客篡改。
查看证书: 浏览器,命令行
openssl x509 -text -noout -in amazon.cer
CIA原则:
Confidentiality: 保密 (可以通过加密,权限管理和敏感信息不被暴露来实现)
Integrity: 数据内容完整,没有被篡改 (可以通过数字签名校验来实现)
Availability: 不让人家无限制调用你的服务
微软提出的STRIDE模型:
欺骗(Spoofing)
篡改(Tampering):也就是资料修改
否认(Repudiation)
资讯泄露(Information disclosure),可能是私隐泄露或是资料外泄
阻断服务攻击(Denial of service)
特权提升(Elevation of privilege):例如黑客把自己的权限提高
实战原则:
DoS: 拒绝服务 (例如大量的攻击,持续发送SYN包)
用防护墙可以防止网络层攻击。
如何防止应用层DoS攻击?核心是对资源进行限制。不然黑客就会滥用服务。
1. 负载均衡(至少不会攻击同一台服务器。)
2. 限流
3. 缓存(在缓存区就把请求给处理了)
DDoS: Distributed DoS (攻击来自不同IP)
随机数: 用作蜜钥
不能用日期或时间做seed
不用用简单的rand()函数。JAVA里面有security包,用其它时间比如用户鼠标点击数作为seed。
Linux里面的/dev/random 和 /dev/urandom比较安全一些。
通过增大随机数空间或者组合随机数可以增加安全。
黑客攻防: