OpenSSL中是否存在与Crypto ++ SecByteBlock相当的方法?
在释放内存块之前清除内存以及使用敏感信息保护内存块的东西。有没有办法在内存中保护RSA结构?
答案 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 page和RSA_new
:
RSA_free
释放RSA结构及其组件。在将内存返回系统之前擦除密钥。
但你应该定义你对内存安全的要求。"如果您的要求包括包装,那么不,OpenSSL不提供它。但Crypto ++也没有。