文章目录
- 一、openssl概述
- 1. **对称加密算法 (Symmetric Encryption)**
- 示例代码(AES CBC 加密)
- 2. **非对称加密算法 (Asymmetric Encryption)**
- 示例代码(RSA 加密)
- 3. **哈希算法 (Hashing Algorithms)**
- 示例代码(SHA256 哈希)
- 4. **消息认证码 (MAC)**
- 5. **数字签名 (Digital Signatures)**
- OpenSSL 编程接口
- 总结
- 二、密钥、公钥、证书、初始向量(IV)的概念
- 1. 密钥(Key)
- 2. 公钥(Public Key)和私钥(Private Key)
- 3. 证书(Certificate)
- 4. 初始向量(IV)
- 总结
一、openssl概述
OpenSSL 是一个广泛使用的开源加密库,它支持多种加密算法,提供了加密、解密、证书管理、哈希运算等功能。OpenSSL 支持对称加密、非对称加密、哈希算法、消息认证码等不同类型的加密算法。
以下是 OpenSSL 中一些常见的加密算法的简要介绍:
1. 对称加密算法 (Symmetric Encryption)
对称加密算法使用相同的密钥进行加密和解密。加密和解密过程是相反的,密钥必须保密,因为任何知道密钥的人都能进行加解密。常见的对称加密算法包括:
-
AES (Advanced Encryption Standard):
- 是当前最常用的对称加密算法,支持 128 位、192 位和 256 位密钥。
- 工作模式有 ECB、CBC、CFB、OFB 等。CBC(Cipher Block Chaining)是其中一种常用模式,它使用一个初始向量(IV)来增强加密强度。
-
DES (Data Encryption Standard):
- 曾经广泛使用,但由于密钥长度仅为 56 位,现在被认为不安全。
- DES 已被 AES 替代,但它仍然可以用于学习和兼容性目的。
-
3DES (Triple DES):
- 是对 DES 算法的改进,使用三个 DES 加密操作来提高安全性,虽然比 DES 更安全,但相对较慢。
-
SM4 (Chinese National Standard):
- SM4 是中国国家标准对称加密算法,主要用于加密处理,常见于金融、电信等领域。它支持 128 位密钥和块大小。
-
RC4 (Rivest Cipher 4):
- 一种流加密算法,使用一个密钥流来加密数据,曾被广泛使用,但由于其安全性问题,现已不再推荐使用。
示例代码(AES CBC 加密)
EVP_EncryptInit_ex(ctx, EVP_aes_256_cbc(), NULL, key, iv);
2. 非对称加密算法 (Asymmetric Encryption)
非对称加密算法使用一对密钥:一个公钥和一个私钥。公钥用于加密,私钥用于解密。私钥不能从公钥推算出来,这使得非对称加密非常适合用于密钥交换和数字签名。
-
RSA (Rivest-Shamir-Adleman):
- 是最常见的非对称加密算法,广泛应用于数据加密、数字签名等场景。
- RSA 的安全性基于大整数分解问题。
-
ECDSA (Elliptic Curve Digital Signature Algorithm):
- 基于椭圆曲线的数字签名算法,比 RSA 更高效,通常用于低功耗设备或移动应用。
-
DH (Diffie-Hellman):
- 用于密钥交换,使得两方可以安全地在不安全的通道中共享密钥。
-
DSA (Digital Signature Algorithm):
- 用于生成数字签名,常用于身份验证和数据完整性验证。
示例代码(RSA 加密)
EVP_EncryptInit_ex(ctx, EVP_rsa_sign(), NULL, pub_key, NULL);
3. 哈希算法 (Hashing Algorithms)
哈希算法将任意长度的输入(消息)转换为固定长度的输出(哈希值)。哈希值用于验证数据完整性和生成签名。常见的哈希算法包括:
-
MD5 (Message Digest Algorithm 5):
- 输出 128 位的哈希值,曾经非常流行,但由于碰撞攻击,现已不再推荐用于安全应用。
-
SHA (Secure Hash Algorithm):
- SHA 系列包括 SHA-1、SHA-256、SHA-512 等,其中 SHA-256 和 SHA-512 目前仍然是广泛使用的安全哈希算法。
-
HMAC (Hash-based Message Authentication Code):
- 使用哈希算法与密钥结合生成消息认证码,提供消息完整性和认证。
示例代码(SHA256 哈希)
EVP_DigestInit_ex(ctx, EVP_sha256(), NULL);
4. 消息认证码 (MAC)
消息认证码是一种通过密钥和数据生成的“签名”,它用于验证消息的完整性和来源。HMAC 是一种常用的 MAC,基于哈希算法和密钥。
5. 数字签名 (Digital Signatures)
数字签名用于验证消息的来源和完整性。通常使用非对称加密算法来生成和验证签名。发送方使用私钥签名数据,接收方使用公钥验证签名。
OpenSSL 编程接口
OpenSSL 提供了一组强大的 API 用于加密、解密、哈希计算、数字签名等操作。常见的函数如下:
EVP_EncryptInit_ex()
,EVP_EncryptUpdate()
,EVP_EncryptFinal_ex()
— 用于加密。EVP_DecryptInit_ex()
,EVP_DecryptUpdate()
,EVP_DecryptFinal_ex()
— 用于解密。EVP_DigestInit_ex()
,EVP_DigestUpdate()
,EVP_DigestFinal_ex()
— 用于哈希计算。
总结
OpenSSL 支持各种加密算法,用于数据加密、数字签名、身份验证等多种场景。它提供了灵活且强大的 API,允许开发人员实现多种加密方案。常见的加密方法包括对称加密(如 AES、SM4)、非对称加密(如 RSA、ECDSA)、哈希算法(如 SHA、MD5)等。
二、密钥、公钥、证书、初始向量(IV)的概念
在加密和安全通信中,密钥、公钥、证书、初始向量(IV)是常见且重要的概念。它们分别在不同加密场景中扮演不同角色。以下是这些概念的详细讲解:
1. 密钥(Key)
密钥是一个用于加密和解密的核心机密值。它可以是对称密钥或非对称密钥。
-
对称密钥:加密和解密使用相同的密钥,常用于对称加密算法(如 AES、DES、SM4)。对称加密速度较快,适合加密大批量数据。因为双方使用的是相同的密钥,密钥的安全管理至关重要。
-
非对称密钥:非对称加密使用一对密钥——公钥和私钥。公钥用于加密数据,而私钥用于解密数据。由于每个人都有一对唯一的公私钥,非对称加密更适合在需要身份验证的通信中使用,比如在 HTTPS、电子邮件等安全协议中。
2. 公钥(Public Key)和私钥(Private Key)
公钥和私钥是非对称加密算法中的一对密钥,每个密钥的用途不同:
-
公钥:可以公开分享给任何人,用于加密数据或验证签名。任何人都可以使用它来加密信息,但只能由拥有对应私钥的人解密。
-
私钥:必须保持机密,用于解密数据或生成签名。它在解密加密的数据或证明身份方面起着关键作用。私钥丢失或泄露会导致安全问题,因此通常需要妥善保护。
3. 证书(Certificate)
证书是加密和身份认证的凭证,用来验证公钥的真实性。它通过数字签名和公钥结合来确认某个主体的身份。
-
组成部分:证书通常包含主体的名称、公钥、签发者的名称、有效期等。
-
数字证书的用途:在 SSL/TLS、HTTPS 等场景中,证书保证了用户连接的网站的身份。证书由可信的第三方(证书颁发机构 CA)签发。CA 在生成证书前会验证申请方的身份,并用 CA 的私钥对证书进行签名,确保证书的真实性。
-
工作流程:在 HTTPS 连接中,服务器向客户端提供证书,客户端使用证书中的公钥加密会话密钥,并将其传送给服务器,以此确保数据的安全传输。
4. 初始向量(IV)
初始向量(IV)是一个用于加密过程的随机值或固定值,常见于对称加密中的分组加密模式,比如 CBC(Cipher Block Chaining)模式。
-
作用:IV 用于增加加密的不可预测性,避免相同的明文在不同加密过程中生成相同的密文。这通过为每个明文块增加一个随机元素,确保即使相同的明文在相同的密钥下加密多次,生成的密文也会不同。
-
使用方法:在 CBC 模式中,IV 会和第一个明文块进行异或运算,生成第一个密文块。后续的明文块会依次与前一个密文块进行运算,形成依赖关系。
-
安全性:IV 不需要保密,但需要在加密和解密时保持一致。IV 通常会和密文一起传递给接收方,以便于解密时恢复明文。
总结
- 密钥:数据加密和解密的核心机密值。
- 公钥和私钥:用于非对称加密的成对密钥,公钥公开,私钥保密。
- 证书:用于验证公钥的真实性和主体身份的凭证,由 CA 签发。
- 初始向量(IV):分组加密算法中的随机值,用于增加加密结果的随机性,确保相同明文不会生成相同密文。