自学内容网 自学内容网

openssl加密算法简介


一、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):分组加密算法中的随机值,用于增加加密结果的随机性,确保相同明文不会生成相同密文。

原文地址:https://blog.csdn.net/m0_49476241/article/details/143649693

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!