小编Art*_*iss的帖子

使用OpenSSL C库在多个线程中生成椭圆曲线键对(EC_KEY_generate_key)

我想生成许多ec密钥对。稍微加快了速度,我改写了我的建议书以使用多个线程来完成这项工作。这是每个线程想要生成密钥的方式的代码片段:

(...)
EC_KEY* _ec_key = EC_KEY_new(); 
EC_GROUP* ec_group_new = EC_GROUP_new_by_curve_name(NID_X9_62_prime256v1); 
const EC_GROUP* ec_group = ec_group_new; 
if (!EC_KEY_set_group(ec_key,ec_group)) 
  DieWithError("Error in initializeCrypto, EC_KEY_set_group failed!");

// Segfault at this position
if(!EC_KEY_generate_key(ec_key))
  DieWithError ("Error in generateKeys, EC_KEY_generate_key failed!");

(...)
EC_GROUP_free(ec_group_new); 
EC_KEY_free(ec_key);
Run Code Online (Sandbox Code Playgroud)

乍一看,一切似乎都正常。使用我的i5 520m上的四个线程,应用程序的运行速度快两倍。但是在经过3-4次E6密钥生成后,它突然出现了段错误。如果我锁定EC_KEY_generate_key操作,则不再存在段错误,但是使用多个线程的优势就消失了。现在我的问题。是否可以在不破坏内存的情况下将密钥创建分成多个线程?我没有使用Google找到任何信息。不过,SSL Docu没有提及任何有关线程安全性的内容。非常感谢您的帮助。谢谢

c multithreading openssl ecdsa

3
推荐指数
1
解决办法
3370
查看次数

标签 统计

c ×1

ecdsa ×1

multithreading ×1

openssl ×1