1. chatgpt 介绍 RSA

RSA 加密 系统中,公钥和私钥是成对的,用来分别进行加密和解密。它们基于模数 n 和两个指数 e(公钥指数)与 d(私钥指数)的数学关系。下面我详细解释 RSA 公钥和私钥的工作原理以及它们的生成过程。

1.1 RSA 公钥

公钥 是公开的,可以由任何人使用来加密数据。在 RSA 中,公钥由以下两部分组成:

  • 模数 n:模数是两个大质数 pq 的乘积。它是加密和解密过程中使用的核心参数。
  • 公钥指数 e:一个通常很小的整数,用于加密消息。最常用的值是 65537,但有时也可能是其他的较小质数,如 317

公钥用来加密数据,确保只有持有对应私钥的人才能解密。

公钥表示:
Public Key = (n, e)

1.2 RSA 私钥

私钥 是秘密的,只能由数据的接收方持有,用来解密使用公钥加密的数据。私钥由以下几部分组成:

  • 模数 n:与公钥相同,依然是 pq 的乘积。
  • 私钥指数 d:这个指数是通过以下公式计算得来的:
    secure boot 部分知识-LMLPHP
    其中 φ(n) 是欧拉函数,计算为 (p - 1) * (q - 1)d 是用来解密的指数,它与公钥指数 e 以及 φ(n) 有着数学上的联系。

私钥还可能包含其他值来优化解密运算,比如:

  • pq:生成模数的两个大质数。
  • d_pd_q:用于加速解密的中国剩余定理(CRT)参数。
私钥表示:
Private Key = (n, d)

1.3 RSA 密钥对生成

RSA 密钥对是通过以下步骤生成的:

  1. 选择两个大质数 pq

  2. 计算模数 n
    secure boot 部分知识-LMLPHP

  3. 计算欧拉函数 φ(n)
    secure boot 部分知识-LMLPHP

  4. 选择一个公钥指数 e,通常选择 65537,确保 eφ(n) 互素。

  5. 计算私钥指数 d,它是 e 的模 φ(n) 的乘法逆元:
    secure boot 部分知识-LMLPHP

  6. 公钥由 (n, e) 组成,私钥由 (n, d) 组成。

1.4 加密与解密过程

  • 加密过程(使用公钥):
    给定消息 M 和公钥 (n, e),加密的公式是:
    secure boot 部分知识-LMLPHP
    其中 C 是密文,M 是消息。加密过程将消息转换为一个无法解读的密文。

  • 解密过程(使用私钥):
    给定密文 C 和私钥 (n, d),解密的公式是:
    secure boot 部分知识-LMLPHP
    通过使用私钥,密文 C 可以还原成原始的消息 M

1.5 RSA 公钥与私钥的文件格式

RSA 密钥对通常以 PEM 或 DER 格式存储,它们可以通过 OpenSSL 等工具生成和管理。

  • 公钥(PEM 格式):
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArl...
...Base64 编码的公钥内容...
-----END PUBLIC KEY-----
  • 私钥(PEM 格式):
-----BEGIN PRIVATE KEY-----
MIIEpAIBAAKCAQEArl...
...Base64 编码的私钥内容...
-----END PRIVATE KEY-----

这些文件可以通过 OpenSSL 命令生成。例如:

  • 生成私钥:
  openssl genpkey -algorithm RSA -out private_key.pem -pkeyopt rsa_keygen_bits:2048
  • 从私钥生成公钥:
  openssl rsa -pubout -in private_key.pem -out public_key.pem

1.6 RSA 密钥对的用途

  • 加密:使用公钥对消息进行加密,只有持有私钥的人能够解密。
  • 数字签名:使用私钥对数据签名,其他人可以使用公钥来验证签名,确保数据的完整性和发送方的身份。

1.7 总结

  • 公钥 用于加密消息和验证数字签名,由 (n, e) 组成,并可以公开。
  • 私钥 用于解密消息和生成数字签名,由 (n, d) 组成,必须保密。

2. secure boot

在安全启动机制中,设备从只读的 efuse 中读取启动密钥,并使用该密钥验证启动代码的真实性。如果固件未通过验证,设备将停止启动过程。efuse 的不可篡改特性确保了启动密钥的安全性和真实性。efuse 和 OTP 都常用于存储设备加密密钥或认证密钥。一旦密钥被写入 efuse 或 OTP 存储器,攻击者无法轻易修改或读取密钥,增强了设备的安全性。

3. 示例

  1. uboot 文件格式如下:
uboot header
spl header
spl 签名
RSA modulus n
DATA
  1. efuse 中存储 RSA modulus n 的 SHA256
  2. 计算 uboot 文件中的 RSA modulus n 的 SHA256
  3. 比较 efuse 中的 RSA modulus n 的 SHA256 和计算 uboot 文件中的 RSA modulus n 的 SHA256,如果一致,modulus n 未被篡改
  4. 使用 RSA modulus n 和公钥指数 e(多数为 65537)解密 SPL 签名,得到签名前的 SPL 的 SHA256
  5. 重新计算 SPL 文件的 SHA256
  6. 比较解密得到的 SPL 的 SHA256 和重新计算 SPL 文件得到的 SHA256,如果一致,SPL 内容未被篡改

注:可以查看这篇文章 加密解密、加签验签流程

10-09 22:03