1. chatgpt 介绍 RSA
在 RSA 加密 系统中,公钥和私钥是成对的,用来分别进行加密和解密。它们基于模数 n
和两个指数 e
(公钥指数)与 d
(私钥指数)的数学关系。下面我详细解释 RSA 公钥和私钥的工作原理以及它们的生成过程。
1.1 RSA 公钥
公钥 是公开的,可以由任何人使用来加密数据。在 RSA 中,公钥由以下两部分组成:
- 模数
n
:模数是两个大质数p
和q
的乘积。它是加密和解密过程中使用的核心参数。 - 公钥指数
e
:一个通常很小的整数,用于加密消息。最常用的值是65537
,但有时也可能是其他的较小质数,如3
或17
。
公钥用来加密数据,确保只有持有对应私钥的人才能解密。
公钥表示:
Public Key = (n, e)
1.2 RSA 私钥
私钥 是秘密的,只能由数据的接收方持有,用来解密使用公钥加密的数据。私钥由以下几部分组成:
- 模数
n
:与公钥相同,依然是p
和q
的乘积。 - 私钥指数
d
:这个指数是通过以下公式计算得来的:
其中φ(n)
是欧拉函数,计算为(p - 1) * (q - 1)
。d
是用来解密的指数,它与公钥指数e
以及φ(n)
有着数学上的联系。
私钥还可能包含其他值来优化解密运算,比如:
p
和q
:生成模数的两个大质数。d_p
和d_q
:用于加速解密的中国剩余定理(CRT)参数。
私钥表示:
Private Key = (n, d)
1.3 RSA 密钥对生成
RSA 密钥对是通过以下步骤生成的:
-
选择两个大质数
p
和q
。 -
计算模数
n
:
-
计算欧拉函数
φ(n)
:
-
选择一个公钥指数
e
,通常选择65537
,确保e
与φ(n)
互素。 -
计算私钥指数
d
,它是e
的模φ(n)
的乘法逆元:
-
公钥由
(n, e)
组成,私钥由(n, d)
组成。
1.4 加密与解密过程
-
加密过程(使用公钥):
给定消息M
和公钥(n, e)
,加密的公式是:
其中C
是密文,M
是消息。加密过程将消息转换为一个无法解读的密文。 -
解密过程(使用私钥):
给定密文C
和私钥(n, d)
,解密的公式是:
通过使用私钥,密文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. 示例
- uboot 文件格式如下:
uboot header
spl header
spl 签名
RSA modulus n
DATA
- efuse 中存储 RSA modulus n 的 SHA256
- 计算 uboot 文件中的 RSA modulus n 的 SHA256
- 比较 efuse 中的 RSA modulus n 的 SHA256 和计算 uboot 文件中的 RSA modulus n 的 SHA256,如果一致,modulus n 未被篡改
- 使用 RSA modulus n 和公钥指数 e(多数为 65537)解密 SPL 签名,得到签名前的 SPL 的 SHA256
- 重新计算 SPL 文件的 SHA256
- 比较解密得到的 SPL 的 SHA256 和重新计算 SPL 文件得到的 SHA256,如果一致,SPL 内容未被篡改
注:可以查看这篇文章 加密解密、加签验签流程