标签: javascript security encryption cryptography webcryptoapi
我正在尝试实现非对称加密并尝试通过不安全的传输通道发送字符串。 我正在使用RSA-OAEP算法来加密我的数据。 我使用公钥加密字符串,但在接收端,我想验证加密的字符串是否未更改(在传输过程中)。
查看API会发现没有符号,验证RSA-OAEP算法可用的功能。我正在考虑使用字符串添加哈希(可能是基于SHA的)并在接收器处验证它。 这是从安全角度来看的吗?是否有API(使用RSA)允许我使用相同的算法实现加密,解密,签名,验证功能。
答案 0 :(得分:3)
不,OAEP不能用于签名,因为它不会(并且不应该)使用私钥进行加密。请参阅答案here。只是加密哈希并不起作用,因为任何人可以加密任何哈希。
您应该使用私钥进行签名,以便接收方可以使用受信任的公钥验证哈希值。执行此操作的算法是RSA,PKCS#1 v1.5填充用于签名生成和更新的RSA-PSS。包含OAEP(最佳非对称加密填充)的大多数API还应包含签名生成&验证功能。
RFC 3447(包含PKCS#1 v2.1)中描述了所有这些协议。 Webcrypto API还包含这些原语。 Webcrypto API的主要问题在于它似乎不适合建立信任关系,这对大多数加密操作都是基础。