Эффективна ли маскировка для предотвращения атак по побочным каналам?

Я работаю с некоторым криптографическим кодом с открытым ключом bigint. Безопасно ли использовать побитовое маскирование, чтобы гарантировать, что время расчета и адреса памяти, к которым обращаются, не зависят от значений данных?

Является ли этот метод уязвимым для атак по побочному каналу, основанных на синхронизации команд, мощности, радиочастотном излучении или других вещах, о которых я не знаю? (Для справки мне известны такие методы, как ослепление RSA, лестница ЕС Монтгомери, очистка кэша и тому подобное.)

Пример простого кода (C / C ++):

uint a = (...), b = (...);
if (a < b)
    a += b;

Теперь переведено для использования маскировки с постоянным временем:

uint a = (...), b = (...);
uint mask = -(uint)(a < b);
a = ((a + b) & mask) | (a & ~mask);

Обратите внимание, чтоa < b 0 или 1, а маска 0x00000000 или 0xFFFFFFFF.

Точно так же для операции высокого уровня (C ++):

Integer x = (...);
if (x.isFoo())
    x.doBar();

Является ли следующий приемлемый безопасный перевод?

Integer x = (...);
uint mask = -(uint)x.isFoo();  // Assume this is constant-time
Integer y(x);                  // Copy constructor
y.doBar();                     // Assume this is constant-time
x.replace(y, mask);            // Assume this uses masking

Ответы на вопрос(2)

Ваш ответ на вопрос