在openssl中保护内存块

时间:2015-02-18 19:50:27

标签: security memory openssl

OpenSSL中是否存在与Crypto ++ SecByteBlock相当的方法?

在释放内存块之前清除内存以及使用敏感信息保护内存块的东西。有没有办法在内存中保护RSA结构?

1 个答案:

答案 0 :(得分:2)

  

OpenSSL中是否有任何方法与Crypto ++的SecByteBlock相同?

SecByteBlock是一个利用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));
...
  

有没有办法在内存中保护RSA结构?

RSA_free在内部调用OPENSSL_cleanse。所以当它被丢弃时,结构被归零。根据{{​​1}}上的OpenSSL man pageRSA_new

  

RSA_free释放RSA结构及其组件。在将内存返回系统之前擦除密钥。

但你应该定义你对内存安全的要求。"如果您的要求包括包装,那么不,OpenSSL不提供它。但Crypto ++也没有。