我正在使用一些bigint公钥加密代码.使用按位屏蔽以确保访问的计算时序和存储器地址与数据值无关是否安全?
这种技术是否容易受到基于指令时序,功率,RF发射或其他我不知道的事情的旁道攻击?(作为参考,我知道RSA盲法,EC蒙哥马利梯形图,高速缓存刷新等技术.)
简单代码示例(C/C++):
uint a = (...), b = (...);
if (a < b)
a += b;
Run Code Online (Sandbox Code Playgroud)
现在翻译为使用恒定时间屏蔽:
uint a = (...), b = (...);
uint mask = -(uint)(a < b);
a = ((a + b) & mask) | (a & ~mask);
Run Code Online (Sandbox Code Playgroud)
注意,它a < b是0或1,掩码是0x00000000或0xFFFFFFFF.
同样,对于高级操作(C++):
Integer x = (...);
if (x.isFoo())
x.doBar();
Run Code Online (Sandbox Code Playgroud)
以下是可接受的安全翻译吗?
Integer x = (...);
uint mask = -(uint)x.isFoo(); // Assume this is constant-time
Integer y(x); // Copy constructor
y.doBar(); // Assume this is constant-time …Run Code Online (Sandbox Code Playgroud)