“安全第一”对于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发给我们的证书是不是有效的。

题外话:讲课的时候,老师反复提出影响安全的各种问题,让我很是头疼,想想安全第一,也就释然了,最让我崩溃的是,老师最后说的一句:这不算什么原理,只是一些安全的基础知识!崩溃啊!我也快被和谐了啊!

CA创建即SELinux明天再说!!!!