这是否意味着在真实硬件上添加任意两个int64_ts 将花费相同的时间?
如果 CPU 有一个 64 位宽的ALU,是的。
我之所以这么说是因为目前仍在设计具有 32 位或更小 ALU 的“现代”处理器,主要面向嵌入式市场。
这将允许攻击者获得一些信息,例如纯粹观察加密/解密方的加密密钥。
我不确定基于时间的侧信道攻击是否会像您问题的前提那样起作用。如果给定处理器上的 64 位数学运算与该处理器的真正 64 位版本相比需要多个运算,那么整个算法的所有整数数学运算都将减慢,因此攻击者所要学习的只是它们是在功能较弱的处理器上运行它。
由于指令执行率而导致侧通道泄漏的地方是你有 if/else 分支,并且一个分支比另一个分支花费更长的时间,因此从统计学上来说,攻击者可以探测以确定哪些输入导致执行更多 @ 987654326@ 子句而不是 else 子句,从而收集有关密钥或其他内容的一些信息。
添加两个int32_ts 会比添加两个int64_ts 短两倍吗?
不一定。 64 位处理器可能会同时运行这两个添加。
如果您要问这是否会在 32 位处理器上发生,那么答案是“可能会”,但实际上,您需要在处理器数据手册中查找这些内容。这将为您提供每条指令的时间信息。
您的问题指定了四种不同的架构,您至少缺少一个关键架构(32 位 x86,仍然存在),并且您还缺少其他几个可能的架构。 (例如MIPS。)我不准备阅读所有可能的处理器手册并为您查找。
IMUL 指令的英特尔软件开发人员手册没有提及实际使用的算法
不,但它应该以时钟周期数给出计时信息。
可能不会这么简单的说,因为pipelining、caching等也参与其中。
如果任何其他架构(ARM、Aarch64、POWER)使用一些不同于 x86 的技术,我会很感兴趣。
当然。这方面没有硬性规定。
例如,像 ARM 这样的 RISC 处理器往往需要至少 4 条指令来执行诸如乘法之类的任何事情,因为它们需要一个读取-计算-存储周期,因为所有数学运算都必须在处理器的寄存器中进行。 (读取操作数 1,读取操作数 2,相乘,存储产品。)
对比一个通常具有内存寻址模式的 CISC 处理器,其中一条乘法指令可以编码为“将内存位置 A 与内存位置 B 相乘并存储在内存位置 C 中”。操作数仍然要加载到 CPU 中并相乘,结果仍然要存储,但它看起来像一条指令。
CISC 模型还掩盖了诸如 DRAM 读取延迟、缓存时序问题等,RISC 模型更加明确。
曾几何时,处理器非常简单,您可以轻松回答这样的问题,但我们已经过了几十年。