多线程使用EVP_Seal系列函数时EVP_PKEY的线程安全问题
关于多线程使用EVP_PKEY调用EVP_Seal系列函数的线程安全问题
- 核心结论:不需要用互斥锁保护EVP_PKEY,也没必要复制密钥(包括开发环境的
EVP_PKEY_dup()操作)。 - 原因说明:
- EVP_SealInit()/EVP_SealUpdate()/EVP_SealFinal()对传入的公钥EVP_PKEY仅做只读操作,不会修改其内部状态;
- OpenSSL 1.1.1及更高版本中,只读访问EVP_PKEY对象是线程安全的,多个线程同时调用这些加密函数不会引发竞态问题。
- 生产环境(OpenSSL 1.1.1)的处理:
- 1.1.1确实没有
EVP_PKEY_dup(),但完全不需要这个操作; - 直接在多个线程中复用同一个EVP_PKEY即可,只要确保该密钥对象在所有线程完成加密操作后再调用
EVP_PKEY_free()释放。
- 1.1.1确实没有
内容的提问来源于stack exchange,提问作者user22812972
相关产品推荐
相关产品推荐

