【发布时间】:2021-12-24 04:07:53
【问题描述】:
我正在尝试使用 GMP 6.2.1 作为后端,使用长整数进行密码学计算。最好的做法是不要留下任何敏感计算的痕迹超过需要的时间。因此,我想确保 GMP 不会在内存中留下任何内容,但在文档中找不到任何相关内容。
我是否正确假设内存中存在两种可能的不需要值的来源:
- 将数字重新分配到更大的内存部分。可能由于自分配而发生,例如
mpz_mul (x, x, x);。 - GMP 函数内部的中间计算,它们在某种程度上与这些函数的操作数或输出相关。
虽然似乎可以通过正确设计客户端代码来避免重新分配,但中间变量困扰着我,至少是那些在堆上分配的变量。 GMP在这方面是否有明确的保证?
【问题讨论】:
-
您可以 1) 告诉 gcc 不要使用 alloca (--disable-alloca) 和 2) 重新定义 (mp_set_memory_functions) 分配函数以提供您自己的清除版本。
-
@MarcGlisse 谢谢,我不知道我怎么错过了你的最后一个链接,但这似乎正是我所需要的。我们可以给出答案吗?
-
@MarcGlisse 你知道为什么这些函数只有一个高级包装器:
powm_sec用于模幂运算吗?仅仅是因为模幂是边信道攻击的流行目标吗?我猜其他mpn_sec_方法可以使用powm_sec作为模板进行类似的包装? -
不知道。也许这是在意识到为此目的提供较低级别的功能更好之前的遗留物。
标签: c memory memory-management cryptography gmp