一些加密函数需要一致的执行持续时间以避免定时攻击。我读到这些针对 x86 的函数很难编写,原因可能包括 ISA 的模拟性质和无序处理。因此,防止对 x86 的计时攻击并不容易,因为它取决于任何给定时刻的复杂和/或未知因素。
在标准 RISC-V 内核中,指令时序相对于彼此是否可预测地一致?如果标准内核具有无序处理或基本 ISA 的专有实现,该怎么办?
一些加密函数需要一致的执行持续时间以避免定时攻击。我读到这些针对 x86 的函数很难编写,原因可能包括 ISA 的模拟性质和无序处理。因此,防止对 x86 的计时攻击并不容易,因为它取决于任何给定时刻的复杂和/或未知因素。
在标准 RISC-V 内核中,指令时序相对于彼此是否可预测地一致?如果标准内核具有无序处理或基本 ISA 的专有实现,该怎么办?
区分 ISA 和它的实现是很重要的。RISC-V 规范中没有规定指令执行延迟。大多数实现都会做任何给他们最高性能的事情。安全偏执处理器可以设计为对所有指令具有一致的延迟,但仍符合 RISC-V 规范。
RISC-V 的一个很好的特性是故意留下大量的操作码空间未被使用,以便为 ISA 扩展腾出空间。似乎没有公开宣布的加密扩展计划,因此如果需要,可以将此功能合并到加密扩展中。
RISC-V 可以在具有确定性延迟的机器中实现;这与实施相比,与 ISA 有更多的关系。
有关支持可预测延迟执行的 RISC-V 实现,请参阅此项目:https ://github.com/pretis/flexpret 。它是为嵌入式空间开发的,但似乎也适合您提出的应用程序。
“相对于其他操作,每条指令需要多长时间才能完成,是否有标准?”
不。
据我所知,这种行为将与所有其他主要 ISA 一致。
顺序处理器将在它们的依赖关系解决时执行指令。缓存未命中和问题选择的潜在随机性质将意味着连续循环迭代在指令相对于彼此执行时的行为会有所不同。任何数量的其他微架构问题都会阻碍,包括指令获取未命中、dcache 未命中、导致重放的资源停顿等。即使是典型的有序内核也会面临此类问题。
RISC-V 团队计划如何解决密码库开发人员必须找到某种方法来解决的潜在标准或非标准复杂性?
我不能代表 RISC-V 团队发言,但如果我可以大胆猜测,我怀疑这个(和类似的)领域将涉及更广泛的社区来讨论和解决这些问题。