El código escrito para ser constante de tiempo (constant-time) suele generar instrucciones de rama condicional en arquitecturas como RISC-V, comprometiendo la seguridad contra canales laterales. Este artículo técnico analiza cómo compiladores como Clang y GCC emiten ramas en operaciones aritméticas simples, como la suma de enteros de 128 bits o la selección de valores mediante máscaras bit a bit, incluso cuando el código fuente parece libre de ramas. El problema radica en que RISC-V no cuenta con instrucciones nativas de movimiento condicional (cmov) equivalentes a las de x86 o AArch64, lo que obliga al compilador a usar comparaciones que generan saltos. Se demuestra que esta vulnerabilidad persiste en Zig y Rust, y que incluso el uso de barreras de registro no garantiza la eliminación de ramas en todos los casos. La solución propuesta es la extensión Zicond de RISC-V, que introduce instrucciones para seleccionar valores sin ramas, aunque su disponibilidad está limitada a ciertos perfiles de microarquitectura y requiere la implementación de la extensión Zkt para garantizar la independencia temporal. El texto concluye que la portabilidad y la seguridad en código sensible a canales laterales son extremadamente difíciles de garantizar, recomendando a los desarrolladores evitar tipos de enteros más anchos que dos registros y escribir las cadenas de propagación de carries explícitamente.
