基础
密码学中的密码(cryptography)指的是安全传送消息的方法,包括加密算法、密钥等等。注意,汉语中经常讲到的 “帐号、密码” 中的 “密码” 指的是口令(password、passcode、pin)。
密码学的理论基础是数学中的“难”题(何为难题?这一点参考 信息论 与 复杂性理论),如对大数的分解质因数(Prime Factorization)、模N下求大数的平方根(Square root)以及模N下求离散对数(Discrete Logarithm)等等。
上图是一个经典的密码学例子:
对待加密的原始比特流可称为明文(plaintext),另一个与其等长的比特流可称为密钥(key)。对二者一次异或运算(XOR)可视为加密(encrypt),其加密的结果可称为密文(ciphertext)。对密文与密钥的一次异或运算可视为解密(decrypt),其解密的结果就是原始比特流,即明文。在不知道密钥的情况下,根据密文生成明文的过程叫破译(cryptanalysis)。
关于密码技术,有一些常识需要清楚:
不要使用保密的密码算法——隐蔽式安全(Security By Obscurity)
不要使用自制的密码算法——开发高强度的密码算法是困难的
使用低强度的密码比不加密更危险——错误的安全感
任何密码总有一天会被破解——时间成本与明文价值的权衡
密码只是信息安全的一部分——脆弱的是人类自己
工具箱
密码学家的工具箱中应包括但不限于如下几种技术:
对称密码
对称密码(symmetric-key cryptography),一种在加密、解密时使用相同的(或简单互推的)密钥的密码技术。
经典的对称密码算法:
- DES(Data Encryption Standard)
- 3DES(Triple-DES)
- AES(Advanced Encryption Standard)
非对称密码
非对称密码(asymmetric cryptography),也叫公钥密码(Public-key cryptography),一种需要两个密钥的密码技术,一个是公开密钥,另一个是私有密钥,前者加密,后者解密。
经典的非对称密码算法:
- RSA(Rivest-Shamir-Adleman)
- ECC(Elliptic Curve Cryptography)
- Rabin
- ElGamal
单项散列函数
单项散列函数(one-way hash function)有一个输入和一个输出,其中输入称为消息(message),输出称为散列值(hash value)。
h = H(M)
, 单项散列函数H(M)
作用于任意长度的消息M
,返回长度固定的散列值h
。
经典的单项散列函数算法:
- SHA-1
- SHA-2(Secure Hash Algorithm-2)
- SHA-256
- SHA-512
- REPEMD-160
- SHA-3(Secure Hash Algorithm-3)
- Keccak
消息认证码
数字签名
推荐书籍
科普:《图解密码技术》(新版暗号技術入門: 秘密の国のアリス)
理论:《应用密码学》(Applied Cryptography: Protocols, Algorithms, and Source Code in C)
实践:《密码学C/C++语言实现》(Cryptography in C and C++ )