用随机数生成密钥
生成密钥的最好办法就是运用随机数,因为密钥需求具有不易被别人推测的性质。在可能的情况下最好运用可以生成密码学上的随机数的硬件设备,但一般咱们都是运用伪随机数生成器这一专门为密码学用途设计的软件。
在生成密钥时,不能自己随便写出一些像“3F 23 52 28 E3”这样的数字。因为尽管你想生成的是随机的数字,但无论如何都无法避免人为的偏差,而这就会成为攻击者的目标。密码学用途的伪随机数生成器必须是专门针对密码学用途而设计的。例如,有一些伪随机数生成器可以用于游戏和模拟算法,尽管这些伪随机数生成器所生成的数列看起来也是随机的,但只要不是专门为密码学用途设计的,就不能用来生成密钥,因为这些伪随机数生成器不具备不可预测性这性质。
用口令生成密钥
有时我们也会使用人类可以记住的口令( password或 passphrase)来生成密钥。 passphrase指的是一种由多个单词组成的较长的 password,严格来说,我们很少直接用口令来作为密钥使用,一般都是将口令输入单向散列函数,然后将得到的散列值作为密钥使用。
在使用口令生成密钥时,为了避免字典进犯,需要在口令上面附加一串称为盐(salt)的随机数,然后再将其输入单向散列函数。这种办法称为“根据口令的密码”。