我正在尝试实现非对称加密并尝试通过不安全的传输通道发送字符串。我正在使用 RSA-OAEP 算法来加密我的数据。我使用公钥加密字符串,但是在接收者端我想验证加密的字符串没有更改(在传输期间)。
查看 API 会发现没有迹象,验证 RSA-OAEP 算法可用的功能。我正在考虑使用字符串添加哈希(可能基于 SHA)并在接收器处验证这一点。从安全的角度来看,这是否合理?是否有一个 API(使用 RSA)可以让我使用相同的算法实现加密、解密、签名、验证功能。
我正在尝试实现非对称加密并尝试通过不安全的传输通道发送字符串。我正在使用 RSA-OAEP 算法来加密我的数据。我使用公钥加密字符串,但是在接收者端我想验证加密的字符串没有更改(在传输期间)。
查看 API 会发现没有迹象,验证 RSA-OAEP 算法可用的功能。我正在考虑使用字符串添加哈希(可能基于 SHA)并在接收器处验证这一点。从安全的角度来看,这是否合理?是否有一个 API(使用 RSA)可以让我使用相同的算法实现加密、解密、签名、验证功能。
不,OAEP 不能用于签名,因为它不(也不应该)使用私钥进行加密。在这里查看答案。仅仅加密散列是行不通的,因为任何人都可以加密任何散列。
您应该使用您的私钥签名,以便接收者可以使用您信任的公钥验证哈希。执行此操作的算法是带有 PKCS#1 v1.5 填充的 RSA,用于签名生成和更新的 RSA-PSS。大多数包含 OAEP(最佳非对称加密填充)的 API 还应该包含签名生成和验证功能。
所有这些协议都在RFC 3447(其中包含 PKCS#1 v2.1)中进行了描述。Webcrypto API 也包含这些原语。Webcrypto API 的主要问题是它似乎不适合建立信任关系,而信任关系是大多数加密操作的基础。