title: "密码技术简要" categories: Tech updated: comments: true
主要参考
不讲数学, 只记概要.
<!-- more -->加密和解密使用的密钥相同, 所以有密钥配送的问题 (key distribution problem).
现实中是有可用的对称密码算法的, 并且今后对称密码也不会消失. 一般来说, 在采用具备同等机密性的密钥长度的情况下, 公钥密码的处理速度只有对称密码的几百份之一. 因此公钥密码并不适合用来对很长的消息内容进行加密. 有时会把两种密码搭配使用.
常会用到 XOR 运算, 因为这是幂等运算.
一次性密码本的原理是 "将明文与一串随机的比特序列进行 XOR 运算". 关键在于其完全随机, 明文中所有可能的排列组合都会出现, 我们 无法判断哪个是正确的明文, 因此不可破解. 即使遍历了所有可能的密钥, 也无法判断得到的是否是正确的明文. 但是下列问题导致其根本不可用.
有若干解决密钥配送问题的方法
RSA 原理众所周知, 略. 一旦发现了对大整数进行质因数分解的高效算法, RSA 就能被破译.
公钥虽然解决了密钥配送问题, 但是还需要判断得到的公钥是否正确合法 (公钥认证问题), 以防范中间人攻击 (即在传递公钥时, 中间人取而代之传递自己的公钥, 从而使自己能查看/篡改信息).
用对称密码对消息加密, 然后用公钥密码对对称密码的密钥 (称为会话密钥, 用伪随机数生成器生成) 进行加密. 用对称密码提高速度, 用公钥密码保护回话密钥.
网络上的密码通信所使用的 SSL/TLS 都运用了混合密码系统.
单向指无法反推.. 以 SHA-256 为例, 输出的散列值长度固定为 256 比特. 这个输出也叫消息摘要或指纹 (fingerprint).
可以用于检验文件的完整性 (integrity), 或者叫一致性. 比如镜像网站发布软件的时候.
SHA-256, SHA-384, SHA-512 这三种哈希函数合起来统称为 SHA-2. SHA-1 已被攻破, SHA-2 尚未被攻破. 另外, SHA-3 也是安全的.
消息的认证 (authentication) 指的是 "消息来自正确的发送者".
消息认证码 (MAC, message authentication code) 是一种确认完整性并进行认证的技术. 输入包括消息和一个发送者与接收者之间共享的密钥, 输出固定长度的数据, 称为 MAC 值. 如所述, 有密钥配送的问题.
无法解决的问题
用发送者的私钥对消息 "加密" 生成签名, 用公钥验证签名. 其实无需对整个消息签名 (加密), 只要先算出消息的哈希值, 在对其签名即可.
同样需要防范针对公钥的中间人攻击, 要知道公钥是否真正属于发送者 (用证书 check).
公钥证书 (public-key certificate) 记载个人信息以及属于此人的公钥, 并由认证机构 (CA, certification authority), "可信的第三方", 施加数字签名.
访问 https 开头的网页时, Web 服务器和浏览器之间会进行基于 SSL/TLS 的加密通信. 通信中所使用的密钥是仅限本次通信的一次性密钥, 称为会话密钥 (session key).
尽管生成伪随机数的算法有很多种, 但密码学用途的伪随机数生成器必须是专门针对密码学用途而设计的.
Diffie-Hellman 密钥交换
通信双方仅通过交换一些可以公开的信息就能够生成出共享的密钥.
另外还有椭圆曲线 Diffie-Hellman 密钥交换.
基于口令的密码
基于口令的密码 (PBE, password based encryption)
其中盐和 "用 KEK 加密的会话密钥" 需要安全保存.
要给随机数下一个严密的定义是非常困难的, 有时甚至会进入哲学争论的范畴.
越往下越严格. 密码学至少要求不可预测性. 不可预测性是通过使用其他的密码技术来实现的. 仅靠软件是无法生成出具备不可重现性的随机数列的. 软件只能生成伪随机数列, 这是因为运行软件的计算机本身仅具备有限的内部状态.
线性同余法 (linear congruential method) 是一种使用很广泛的伪随机数生成器算法. 然而, 它并不能用于密码技术. 只要谨慎选择参数, 就能够很容易地生成具备随机性的伪随机数列 (周期短).
使用单向散列函数可以编写出能够生成具备不可预测性的伪随机数列.
伪随机数生成器也是会被攻击的.
Secure socket layer 和 transport layer security 是世界上应用最广泛的密码通信方法.
具体协议内容略.