Ist die Maskierung wirksam, um Seitenkanalangriffe abzuwehren?

Ich arbeite mit einem Bigint-Public-Key-Kryptografie-Code. Ist es sicher, eine bitweise Maskierung zu verwenden, um sicherzustellen, dass der Berechnungszeitpunkt und die Speicheradressen, auf die zugegriffen wird, unabhängig von den Datenwerten sind?

Ist diese Technik anfällig für Seitenkanalangriffe, die auf Befehlstiming, Leistung, HF-Emissionen oder anderen Dingen beruhen, die mir nicht bekannt sind? (Als Referenz sind mir Techniken wie RSA-Blinding, EC-Montgomery-Leiter, Cache-Leeren usw. bekannt.)

Beispiel für einfachen Code (C / C ++):

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

Jetzt übersetzt, um die zeitkonstante Maskierung zu verwenden:

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

Beachten Sie, dassa < b ist 0 oder 1 und mask ist 0x00000000 oder 0xFFFFFFFF.

Ähnlich für eine Operation auf hoher Ebene (C ++):

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

Ist das Folgende eine akzeptable sichere Übersetzung?

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

Antworten auf die Frage(4)

Ihre Antwort auf die Frage