<分区>
我正致力于创建不经意的图形算法,它基本上隐藏了算法的内存访问模式。假定内存已加密,但可以被攻击者监控。假定处理器位于云端、安全且拥有自己的缓存。
众所周知,图的访问模式可以揭示有关该图的信息。
为了让算法不被遗忘,有必要在算法中添加虚拟工作。这些工作包括读取和写入数据,但不会导致算法结果发生变化(当然,这种变化会使算法无用)。
虚拟工作必须在图本身上,否则攻击者将能够追踪哪些工作是真实的,哪些工作是假的。
当然,添加虚拟工作会降低速度。因此,作为一个精益解决方案,我想为自己分配一个变量。这将在不实际更改任何内容的情况下创建对位置的读取和写入。我的问题是,编译器是否真的执行了这段代码(它似乎在 gdb 中,但这仅仅是因为它是一个调试器)?我正在使用 gcc,但如果算法可以用不同的编译器编译并且仍然保持健忘,那将是最好的。
将变量设置为等于自身的替代方法是使用 if 语句:检查变量是否等于某个值,然后在 if 语句中将变量设置为该值。如果可能的话,我想避免使用 if 语句,因为它们会减慢速度。
最后,这个算法是多线程的。如果一个全局变量被设置为等于它自己,是否有必要在它上面加一个互斥锁?这样的锁当然会减慢速度,所以我想尽可能避免使用它们。