计算机密码学:
基本原则:密码的安全性基于密钥的保密性,而不基于算法的保密性。
口令(password)需要有一定的规律性,否则无法记忆,而密钥(密码)是完全随机生成的,没有任何规律可言,
常人无法猜到,难以记忆。
对称密钥密码:
加密密钥与解密密钥是相同的。对称密钥又分为
分组密码(block cipher)和序列密码(stream cipher)。
分组密钥是将明文划分成固定长度的分组,各分组分别在密钥的控制下变成等长的密文;
解密时,各分组分别在密钥的控制下再转换为等长的明文。数据分组的长度是64位,128位。
当明文的零头不足这个个数的时候,填充冗余数据,解密后再去掉。常见的分组密码算法有:
DES(Data Encryption Standard)、
AES(Advanced Encryption Standard)、
IDEA(International Data Encryption Algorithm )等.
DES:过时。
AES:高级加密标准。AES的密钥长度有128、192、256位三种,一般128位就足够安全了。
国际数据加密算法(IDEA)是另一个广泛使用的加密算法。
序列密码:
分组密码一次加密一个数据块,序列密码将明文划分成字节/单个的二进制位,
密钥送入 密钥流生成器,生成等长的密钥流。然后明文与密钥流作用(一般是异或)以加密,
解密时,再用同样的密钥流与密文异或,就能得到明文。关键在于密钥流生成器的生成的密钥应该是严格随机的。
一种理论上不可攻破的加密方案:一次一密乱码本。
基本思想是密钥长度不是128位,也不是256位,而是与明文一样长,用过一次便永不再用。
若明文长度100000,那么要是想暴力破解需要尝试2^100000,在现在的技术下是不可能的。
不过也仅限于现在。Who knows the future?
公开密钥密码:
公钥密码是这样设计的:加密密钥不同于解密密钥,加密密钥能够公开,而解密密钥则严格保密,
这样任何人都能用加密密钥加密数据,但只有用相应的解密密钥才能解密数据,
加密密钥叫做公开密钥(公钥),解密密钥叫做私人密钥(私钥)。公钥与私钥统称为密钥对。
与对称密钥密码不同,不是任意一串二进制位就能作为公钥密码的密钥对,
密钥对必须使用特定的方法计算生成(有函数关系)。要求在宇宙存在的这一小段时间内(?),无法从公钥推导出私钥。
公钥算法举例:RSA算法 ..RSA的加密解密是指数级别的运算。
密钥分配:
公钥密码解决了密钥分配的难题,公钥可以通过网络随意分发,任何人都可以用公钥密码加密数据,
但是只有拥有私钥(密钥对)的人才能解密数据。 但是公钥密码加密解密的时间太慢,
所以,公钥密码通常与 对称密码 结合使用。
例如AB通信,A选择一个对称密钥K,使用B的公钥加密后,发送给B,
B用自己才有的私钥解密就得到了就得到了K。K使用完一次就丢弃,下次通信时就使用一个新的K,所以此时K叫做会话密钥。
有一类特殊的公钥密码算法,叫做密钥交换算法,利用密钥交换算法,通信双方不需要公钥与私钥,
实现也不需要共享任何秘密信息。就可以安全的生成一个会话密钥,它的安全性是基于有限域上计算离散对象的困难性。