首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C代码来清理openssl EVP_PKEY私钥的内存

C代码来清理openssl EVP_PKEY私钥的内存
EN

Stack Overflow用户
提问于 2017-03-18 00:04:35
回答 1查看 3.6K关注 0票数 7

我开始学习C/C++中的OpenSSL编程。我遇到的一个问题是,如何才能安全地清除内存中的私钥?

例如,我可能有代码:

代码语言:javascript
运行
复制
EVP_PKEY *private_key = PEM_read_bio_PrivateKey( bio, ,,,)
RSA *r = EVP_PKEY_get1_RSA( private_key);

在使用private_key ()释放它之前,我希望清除内存中的EVP_PKEY_free。

我很感谢你的帮助和/或你的建议。谢谢。

EN

Stack Overflow用户

发布于 2017-03-18 16:26:36

EVP_PKEY *private_key = PEM_read_bio_PrivateKey( bio, ,,,) 在使用private_key来释放它之前,我想清除内存中的EVP_PKEY_free

OpenSSL的EVP_PKEY_free为您擦去私钥。你没必要做什么特别的事。

RSA *r = EVP_PKEY_get1_RSA( private_key);

get1意味着引用计数被碰撞,您实际上得到了对象的副本。get0表示您有一个指向现有对象的指针,不应该在它上调用free。因为有了get1,您必须对其调用RSA_free,以确保它被删除。与EVP_PKEY_free一样,RSA_free将擦除密钥。

请不要给memset打电话。这些是不透明的结构,为了正确清除子对象,您必须遵循多个指针。OpenSSL 1.1.0中隐藏了更多的字段,因此执行指针将更加困难(如果您愿意的话)。也见st}” in OpenSSL 1.1.0st' in OpenSSL 1.1.0st” in OpenSSL 1.1.0等。

下面是一些你可能感兴趣的额外阅读:

当调用像EVP_PKEY_freeRSA_free这样的函数时,它们最终会在内存返回到操作系统之前调用OPENSSL_cleanse。对于RSA私钥,它至少调用8次以擦除与nedpqdpdqinvq相关的字节数组。

票数 5
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42868879

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档