“安全第一”对于linux管理界乃至计算机也都是一个首要考虑的问题。引用柯尔克豪夫原则(音译,如有错误,纯属巧合):加密的安全性依赖于密码本身而非算法!而且,此处说到的安全是指数据的完整性,由此,数据的认证安全和完整性高于数据的私密安全,也就是说数据发送者的不确定性以及数据的完整性得不到保证的话,数据的私密性当无从谈起!
常见的几种加密解密算法
One WAY Hashes 单向加密算法
Symmetric Algorithms 对称加密算法
Asymmetric(Public key)Algorithms 非对称加密算法
Public Key Infrastructures 公钥基础设施
Digital Certificates 数字证书
实现加密机密的机制
openssl
gpg
加密原理
单向加密算法 通过提取数据的特征码保证数据的完整性,无论数据多大,算法相同时其特征码是定长的,算法不同,特征码不同 ;微小的数据不同,特征码却千差万别(即雪崩效应),防止暴力破解 。但常见字符也是能解密的,还有可能发生数据撞车,即数据不同,特征码却相同
md5 特征码定长 128bit md5sum file 提取特征码
sha1 特征码定长160bit,加密速度慢 sha1sum file 提取特征码
对称加密算法 使用同一个密码加密解密,保证了数据的私密性,以及发送方的确定性,但无法确保数据的完整性
非对称加密算法 使用一对密钥加密(PublicKey SecretKey),保证数据的私密性,但不能保证数据发送方的确定性,数据完整性更无从谈起。由于速度很慢,主要功能用户的身份认证和数据签名
数字证书 由CA颁发的身份证明的证书 确保发送者的确定性
linux用于加密的解决方案
Random Number Generator 生成随机数
/etc/rc.d/rc.sysinit 中有一段脚本用于初始化生成随机数的
熵池(软设备):两次击键的时间间隔,接受
生成随机数工具:
/dev/random 最佳随机数生成器,所有到来自熵池;熵池用完,程序会停止,直到熵池有足够的随机数
/dev/urandom随机数也是来自熵池,熵池用完,用伪随机数生成器,生成伪随机数
例如:AB两人从未见过面,第一次通信获得单向加密密码以及以后通信加密的解决办法?
最佳解决方案:
A先把从CA获得的证书用私钥加密发给B,B用A的公钥解密获得A证书,B再用CA的公钥解密A的证书计算出特征码比较A证书上公钥的相同算法的特征码,从而知道给你发信的就是A,B就用A的公钥加密一段密码发给A,这样A和B就有了一段单向加密的密码。
之后通信的加密过程是,A把要发送的数据先提取出特征码,用自己的私钥加密联同数据一起用B发给他的密码加密发给B,B收到之后先用商定好的密码解密,再用A的公钥解密出特征码,再用提取A发送的数据的特征码与之比较,从而验证数据的完整性,一样的话,就完成了一次安全的通信
注意:在安全的角度,没有最安全,只有更安全,例如:如果A的证书到期或者丢失,CA会在自己的撤销列表中注释,所以这个问题也会影响到通信的安全性,所以,在B用CA的公钥解密之前,我们应该先到CA的撤销列表中查看A发给我们的证书是不是有效的。
(责任编辑:)