GMP 为中间计算创建的对象是否持久保存在内存中?
Are objects created by GMP for intermediate computations persisted in memory?
我正在尝试使用 GMP 6.2.1 作为后端来使用长整数进行加密计算。最好不要留下任何敏感计算的痕迹超过需要的时间。因此,我想确保 GMP 不会在内存中留下任何内容,但在文档中找不到任何相关信息。
我假设有两种可能的不需要的值在内存中持续存在的来源是否正确:
- 将数字重新分配到更大的内存部分。可能由于自我分配而发生,例如
mpz_mul (x, x, x);
.
- GMP 函数内部的中间计算,在某种程度上与这些函数的操作数或输出相关。
虽然似乎可以通过正确设计客户端代码来避免重新分配,但中间变量让我很困扰,至少是那些在堆上分配的变量。 GMP在这方面有没有明确的保证?
GMP 提供了一些 low level functions for cryptography,特别是让您可以控制分配。
对于更高级别的功能,您得不到任何保证,但您仍然可以通过 custom allocation, and by configuring temporary allocations 改进默认设置。
我正在尝试使用 GMP 6.2.1 作为后端来使用长整数进行加密计算。最好不要留下任何敏感计算的痕迹超过需要的时间。因此,我想确保 GMP 不会在内存中留下任何内容,但在文档中找不到任何相关信息。
我假设有两种可能的不需要的值在内存中持续存在的来源是否正确:
- 将数字重新分配到更大的内存部分。可能由于自我分配而发生,例如
mpz_mul (x, x, x);
. - GMP 函数内部的中间计算,在某种程度上与这些函数的操作数或输出相关。
虽然似乎可以通过正确设计客户端代码来避免重新分配,但中间变量让我很困扰,至少是那些在堆上分配的变量。 GMP在这方面有没有明确的保证?
GMP 提供了一些 low level functions for cryptography,特别是让您可以控制分配。
对于更高级别的功能,您得不到任何保证,但您仍然可以通过 custom allocation, and by configuring temporary allocations 改进默认设置。