密码
散列(hash)函数,对称加密,非对称加密
散列函数无密钥,能被彩虹表(一种以空间换时间的密码破解算法)破解,但可以通过添加盐的方式使之更不容易被破解,目的是获得文件的摘要(hash 值),可用于密码验证。如 MD5,SHA-2 等。
对称加密是指加密和解密的密钥相同。
非对称加密指加密和解密的密钥不同。一般来说公钥加密,私钥解密(公钥是公开的,如果所有人都可以用公钥解密那加密就没有意义了)。在数字签名时用私钥加密,公钥解密。即公钥和私钥都可以用来加密或解密。按照RSA算法的定义,公钥是(n,e) 私钥是(n,d)。从数学角度来说地位对等的。
这只是从加密算法的角度讲,但实际上,私钥文件可以计算出公钥文件。这是因为私钥文件会包含更多信息(你会发现私钥文件更长),根据 pkcs (全称Public-Key Cryptography Standards (公开秘钥加密标准 )),私钥包含(n,e,d,p,q),公钥包含(n,e)。
对称加密常见有 AES,DES,IDEA;非对称加密常见有 RSA 算法
压缩包密码用到的就是对称加密,密钥即是输入的密码,但密码常常位数不够,需要 PBE(Password Based Encryption)算出真正的密钥。下载完整性验证用的散列函数。
为了解决传递密钥问题,提出了 DH 算法,确切来说 DH 算法是密钥协商算法,利用数学理论相互之间传递一些公开的值,自己保留一些值,最后计算出来的结果是一样的(神奇)。
非对称加密的有效攻击方式是中间人攻击。
签名算法是指私钥加密,公钥解密来确认是否是某个发送方发出的,使之不能被伪造。现实应用中不是对原始消息签名,而是对原始消息的 hash 值进行签名。而解密时将解密内容与 hash 值进行对比。
数字签名用于:
- 防止伪造;
- 防止抵赖;
- 防止篡改。
常用的数字签名算法包括:MD5withRSA/SHA1withRSA/SHA256withRSA/SHA1withDSA/SHA256withDSA/SHA512withDSA/ECDSA等。
ssh 具体流程,服务器可能会被多个客户端连接,所以应该存公钥(否则私钥泄露),具体流程见链接。SSH 用账号密码登录也会有临时的不对称加密,所用到的公钥私钥不同于事先生成的。