openssl 中的安全内存块

Secure memory block in openssl

OpenSSL 中是否有任何方法等同于 Crypto++ 的 SecByteBlock

在释放内存之前清除内存的东西,其中包括用敏感信息保护内存块。有什么方法可以保护内存中的 RSA 结构吗?

Is there any method in OpenSSL which is an equivalent of Crypto++'s SecByteBlock?

A SecByteBlock 是一个 class,它通过将数据与对数据执行操作的操作相结合来利用 OOP(大量的手动操作)。 OpenSSL 是一个 C 库,它没有大部分与 OOP 相关的好东西。

在 OpenSSL 中,您将使用 OPENSSL_cleanse。以下是它在 OpenSSL 中的一些单行用法:

$ grep -R cleanse * | grep -v doc
...
apps/apps.c:            OPENSSL_cleanse(buff, (unsigned int)bufsiz);
apps/apps.c:            OPENSSL_cleanse(buf, (unsigned int)bufsiz);
apps/apps.c:            OPENSSL_cleanse(buf, (unsigned int)bufsiz);
apps/ca.c:        OPENSSL_cleanse(key, strlen(key));
apps/dgst.c:        OPENSSL_cleanse(buf, BUFSIZE);
apps/enc.c:                OPENSSL_cleanse(str, SIZE);
apps/enc.c:                OPENSSL_cleanse(str, strlen(str));
...

Is there any way of securing the RSA struct in memory?

RSA_free 在内部调用 OPENSSL_cleanse。因此,结构在被丢弃时被归零。根据 RSA_newRSA_free 上的 OpenSSL man page

RSA_free() frees the RSA structure and its components. The key is erased before the memory is returned to the system.

但是您可能应该为 "secure in memory." 定义您的要求 如果您的要求包括包装,那么不,OpenSSL 不提供它。但 Crypto++ 也没有。