如何处理pkcs11中的填充错误



我想知道C_DecryptFinal&CCD_ 2应该处理填充错误。

根据pkcs11 2.20,C_DecryptFinal可以返回CKR_ENCRYPTED_DATA_INVALIDCKR_ENCRYPTED_DATA_LEN_RANGE,所以我假设如果填充无效,C_DecryptFinal/C_Decrypt返回CKR_ENCRYPTED_DATA_INVALID

这是正确的吗?

如果是,C_DecryptFinal/C_Decrypt是否易受填充oracle攻击?

引用标准(第11.1.6节):

  • CKR_ENCRYPTED_DATA_LEN_RANGE:解密的密文输入已确定仅在上的操作是无效密文根据其长度。根据操作机制可能意味着密文太短、过长或不是某些特定块大小的倍数。此返回值具有更高优先级高于CKR_ENCRYPTED_DATA_INVALID。

  • CKR_ENCRYPTED_DATA_INVALID:解密的加密输入操作已被确定为无效密文。此返回值的优先级低于CKR_ENCRYPTED_DATA_LEN_RANGE。

因此,对于块密码,当输入不是块对齐时,应该返回CKR_ENCRYPTED_DATA_LEN_RANGE

如果输入是块对齐的,则可能在CKM_*_PAD机制的填充错误的情况下返回CKR_ENCRYPTED_DATA_INVALID

因此,填充预言机攻击是可能的。


由于PKCS#7填充是块密码唯一定义的填充方案,因此通常由应用程序负责处理填充,这导致了我认为应该是您问题的答案:

  • 应用程序(即"cryptocki客户端")不应向外部攻击者(即"应用程序客户端")提供任何预言机来确定填充错误,无论这些信息的来源(即cryptochi或应用程序本身)如何。

  • 在cryptocki接口级别(即应用程序内部的攻击者)防范填充预言机攻击可能没有意义,因为这样的攻击者可以直接使用适当的函数随意解密任何内容。


(当然,最好使用某种形式的身份验证加密,根本不需要担心填充预言机攻击)

Desclaimer:我不是加密货币专家,所以请验证我的想法。

相关内容

  • 没有找到相关文章

最新更新