问题描述
当我们在加密抽象层中使用OpenSSL(3.0)时,我正在对代码进行性能分析。我注意到进行HMAC计算占用了我们的大部分时间,我想知道是否有一种更有效的处理方法。我们有两个主要功能(QuicHashCreate和QuicHashCompute),我们实际上采用了{算法,盐/秘密,输入}并生成HMAC输出。
我们有效调用的函数归结为:
-
EVP_MD_CTX_new
-
EVP_PKEY_new_mac_key
-
EVP_DigestSignInit
-
EVP_DigestSignUpdate
-
EVP_DigestSignFinal
-
EVP_PKEY_free
-
EVP_MD_CTX_free
根据我的分析,EVP_PKEY_new_mac_key
和EVP_DigestSignInit
最终几乎消耗了我所有的CPU。由于使用的Salt / Secrets是动态的,因此我无法真正缓存这些对象。有没有更好,更高效的方法来解决这个问题?
解决方法
我之所以发布此消息是因为它有效,但由于最新的OpenSSL版本已将其标记为已弃用,因此我不接受。
以下替换调用起作用:
-
HMAC_CTX_new
-
HMAC_Init_ex
-
HMAC_Update
-
HMAC_Final
现在,HMAC甚至没有出现在我的性能跟踪中。这样就完全解决了我的问题,但是我想知道是否还有更好的方法可以做到这一点。