gpt4 book ai didi

c++ - 恒定时间码

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:04:39 25 4
gpt4 key购买 nike

我有两段代码片段,应该研究它们是否满足恒定时间要求。如果不满足,则修改代码。

首先:

unit8_t a[128]
unit8_t data[128]
if(k) //k is a secret variable
memcpy(data,a,128);

这段代码不满足恒定时间要求,因为如果 k 为假,则不会执行任何复制指令,并且执行时间会比执行 memcpy 快得多。但我真的不知道如何更改才能满足要求。

第二个:

uint8_t a[128], b[128];
uint8_t data[128];
memcpy(data, k ? a : b, 128);

我猜它也不满足恒定时间要求,因为产生分支的三元运算符。但是这里我不确定,我也不知道如何重写代码。

最佳答案

第一个例子:

unit8_t a[128]
unit8_t data[128]
if(k) //k is a secret variable
memcpy(data,a,128);

让它分支:

对于 k == true 的分支 A:

 unit8_t a[128];
unit8_t data[128];
memcpy(data,a,128);

对于 k == false 的分支 B:

 unit8_t a[128];
unit8_t data[128];
//no memcpy

第二个例子:

uint8_t a[128], b[128];
uint8_t data[128];
memcpy(data, k ? a : b, 128);

对于 k == true 的分支 A:

uint8_t a[128], b[128];
uint8_t data[128];
memcpy(data, a, 128); //from a to data

对于 k == false 的分支 B:

uint8_t a[128], b[128];
uint8_t data[128];
memcpy(data, b, 128); //from b to data

很明显,两个示例执行不同的任务,但第二个示例可能在两个分支中以相同的步骤执行。但是那里有一个很大的“但是”,因为编译器可能会将其优化为两个分支不相同的代码,并且不会为此任务提供恒定的时间执行。

关于c++ - 恒定时间码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52806327/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com