密码学核心技术主要围绕保障信息安全的三大目标(CIA三元组:机密性、完整性、不可否认性)展开,其核心支柱包括加密算法、哈希函数和数字签名。
一、核心目标:CIA三元组
| 目标 | 含义 | 核心技术支撑 |
|---|---|---|
| 机密性 | 确保信息不被未授权方访问。 | 对称与非对称加密算法。 |
| 完整性 | 确保信息在传输或存储过程中未被篡改。 | 哈希函数、消息认证码。 |
| 不可否认性 | 确保信息发送方无法否认其行为。 | 数字签名。 |
二、核心技术详解
- 加密算法
加密算法是实现机密性的核心,分为对称加密和非对称加密。
-
对称加密
加密和解密使用同一密钥,速度快,适合大数据量加密。
pythonfrom cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes from cryptography.hazmat.primitives import padding from cryptography.hazmat.backends import default_backend import os # 生成随机密钥和初始化向量(IV) key = os.urandom(32) # AES-256密钥 iv = os.urandom(16) # CBC模式需要的IV # 创建加密器 cipher = Cipher(algorithms.AES(key), modes.CBC(iv), backend=default_backend()) encryptor = cipher.encryptor() # 对明文进行填充并加密 padder = padding.PKCS7(128).padder() padded_data = padder.update(b"Sensitive Data") + padder.finalize() ciphertext = encryptor.update(padded_data) + encryptor.finalize() print(f"密文: {ciphertext.hex()}")AES是当前最常用的对称加密标准。
-
非对称加密
使用公钥和私钥对,解决了密钥分发问题。公钥加密,私钥解密;或私钥签名,公钥验签。
pythonfrom cryptography.hazmat.primitives.asymmetric import rsa, padding from cryptography.hazmat.primitives import serialization, hashes # 生成RSA密钥对 private_key = rsa.generate_private_key(public_exponent=65537, key_size=2048) public_key = private_key.public_key() # 使用公钥加密一段数据(例如一个对称密钥) message = b"A secret symmetric key" ciphertext = public_key.encrypt( message, padding.OAEP( mgf=padding.MGF1(algorithm=hashes.SHA256()), algorithm=hashes.SHA256(), label=None ) ) print(f"RSA加密后的密文: {ciphertext.hex()}")在区块链等领域,椭圆曲线密码学(ECC)因其更短的密钥长度和更高的安全性而广泛应用。
- 哈希函数
哈希函数将任意长度输入映射为固定长度的输出(哈希值),具有单向性和抗碰撞性,是保证数据完整性的基石。
python
# 示例:使用SHA-256计算哈希值
import hashlib
data = b"Hello, Cryptography!"
hash_object = hashlib.sha256(data)
hash_hex = hash_object.hexdigest()
print(f"SHA-256哈希值: {hash_hex}")
# 验证数据完整性
def verify_integrity(original_data, stored_hash):
new_hash = hashlib.sha256(original_data).hexdigest()
return new_hash == stored_hash
print(f"完整性验证结果: {verify_integrity(data, hash_hex)}")
在密码存储中,常使用加盐的增强哈希算法(如PBKDF2、bcrypt)来抵御彩虹表攻击。Merkle树结构也利用哈希函数来高效验证大数据集的完整性,广泛应用于区块链。
- 数字签名
数字签名结合了非对称加密和哈希函数,用于实现身份认证、完整性和不可否认性。
python
# 示例:使用RSA私钥签名,公钥验签
from cryptography.hazmat.primitives.asymmetric import paddingfrom cryptography.hazmat.primitives import hashes
from cryptography.exceptions import InvalidSignature
# 待签名的消息
message = b"Important transaction details"
# 1. 发送方使用私钥生成签名
signature = private_key.sign(
message,
padding.PSS(
mgf=padding.MGF1(hashes.SHA256()),
salt_length=padding.PSS.MAX_LENGTH ),
hashes.SHA256()
)
print(f"数字签名: {signature.hex()}")
# 2. 接收方使用公钥验证签名
try:
public_key.verify(
signature,
message,
padding.PSS(
mgf=padding.MGF1(hashes.SHA256()),
salt_length=padding.PSS.MAX_LENGTH ),
hashes.SHA256()
)
print("签名验证成功,消息完整且来自私钥持有者。")
except InvalidSignature:
print("签名验证失败!消息可能被篡改或来源不可信。")
三、关键数学基础与组件
- 随机数生成:安全的密码学操作依赖于高质量的随机数,用于生成密钥、盐和初始化向量等。伪随机数生成器(PRNG)的安全性至关重要。
- 数学结构:模运算、群、有限域等代数结构是许多加密算法(如RSA、椭圆曲线密码学)的理论基础。
- 密码协议与基础设施:上述核心技术被组合成更复杂的协议和系统,如SSL/TLS、数字证书和公钥基础设施(PKI),以支撑实际的安全通信与应用。