如何分配单独的内存来存储机密数据?

我想知道,如果可以在某个库中分配一个单独的内存区域,那么使用这个库的应用程序就不能直接访问它。

可以说这个库暴露一个类,需要机密数据才能操作。 例如下面这个类,这个类的一个实例包含一个机密的访问令牌,这将允许一个恶意的用户能够访问一个数据库而不需要login。

class Session { public: Session(const Database *database, const std::string& name) : username(name), login_expires(-1), db(database) {} virtual ~Session(){} bool renew_login(const std::string& password); private: const Database* db; long login_exiration_date; // confidential data: std::string username; char confidental_accesstoken[128]; }; 

当我有一个名为s的Session实例,当前用户正在login,我可以简单地通过将一个&s赋给一个字符指针来提取accesstoken。

现在我想把这个课程重新实现到下面的课程:

 class Session { public: Session(const Database *database, const std::string& name) : username(name), login_expires(-1), db(database) {} virtual ~Session(){} bool renew_login(const std::string& password); private: const Database* db; long login_exiration_date; long some_temporary_id; }; 

如果Session类是这样声明的,那么terminal应用程序就不能再访问机密数据了,因为它不再存储在会话实例本身内部。

问题:

我必须以这样的方式存储机密数据,以至于不能简单地通过使用指针算术来在最终应用程序中访问它。

我知道,我无法保护数据,使得root用户无法将所有内存转储到磁盘并进行search,但这不是我想要完成的目标。

我想在我的库中有一个私有内存空间,这样一个具有普通访问权限的普通用户空间应用程序必须使用我的接口才能使用这些受限制的资源。

有什么办法可以做到这一点?

我不相信你有任何存储数据的机会,在同一过程中不能被其他函数访问。 通过将数据存储在某个文件/ thread_local变量中,可以使其变得更加困难,但是只能隐藏数据,而不能保护数据。