64 位的现代处理器通常如何处理 128 位/256 位加密?
How do modern processors which are 64 bit usually handle 128 bit / 256 bit encryption?
根据我所学到的,对我来说这意味着一台 64 位计算机将有一个 64 位寄存器,但如果是这样,如何处理需要 128 位或更多位密钥的加密等已处理或其他一些需要比处理器寄存器可以处理的更高位的操作?
阅读此 Q/A 了解如何处理任意大小(无符号)的整数。
但是,对于简单的 2 或 4 倍尺寸,更可能有更简单的组合。例如,对于 128 位 (modular) 添加 Z = X + Y (mod 2^128)
:
lowZ = lowX + lowY (mod 2 ^ 64)
;
lowC = lowZ < lowX ? 1 : 0
(也就是说:如果进位不是直接可用的,需要自己计算);
hiZ = hiX + hiY + lowC
(mod 2^64);
hiC = hiZ < hiX ? 1 : 0
(但通常进位被简单地丢弃)。
lowX
、lowY
和lowZ
只是值X
、Y
和Z
的64个最低有效位. hiX
、hiY
和 hiZ
只是值 X
、Y
和 Z
.[=29 的 64 个最高有效位=]
您也可以对其他操作执行此操作。位操作、移位等操作相当简单。乘法更难,除法/余数很麻烦。我怎么知道?嗯,here is an example of 32 bit calculations for Java Card, a system that basically assumes 16 bit operations。那个程序有点难编程,因为 Java 不使用无符号计算。
有趣的是,Java 卡本身通常是 运行 在 8 位 CPU 上(尽管这正在迅速改变)。所以实际上,正在进行 8 位到 16 位和 16 位到 32 位的双重转换。 8 位处理器架构恰如其分地是袖珍计算器中使用的 CPU 的直接前身。这种转换自 IT 诞生以来就为人所知,可能更早。
根据我所学到的,对我来说这意味着一台 64 位计算机将有一个 64 位寄存器,但如果是这样,如何处理需要 128 位或更多位密钥的加密等已处理或其他一些需要比处理器寄存器可以处理的更高位的操作?
阅读此 Q/A 了解如何处理任意大小(无符号)的整数。
但是,对于简单的 2 或 4 倍尺寸,更可能有更简单的组合。例如,对于 128 位 (modular) 添加 Z = X + Y (mod 2^128)
:
lowZ = lowX + lowY (mod 2 ^ 64)
;lowC = lowZ < lowX ? 1 : 0
(也就是说:如果进位不是直接可用的,需要自己计算);hiZ = hiX + hiY + lowC
(mod 2^64);hiC = hiZ < hiX ? 1 : 0
(但通常进位被简单地丢弃)。
lowX
、lowY
和lowZ
只是值X
、Y
和Z
的64个最低有效位. hiX
、hiY
和 hiZ
只是值 X
、Y
和 Z
.[=29 的 64 个最高有效位=]
您也可以对其他操作执行此操作。位操作、移位等操作相当简单。乘法更难,除法/余数很麻烦。我怎么知道?嗯,here is an example of 32 bit calculations for Java Card, a system that basically assumes 16 bit operations。那个程序有点难编程,因为 Java 不使用无符号计算。
有趣的是,Java 卡本身通常是 运行 在 8 位 CPU 上(尽管这正在迅速改变)。所以实际上,正在进行 8 位到 16 位和 16 位到 32 位的双重转换。 8 位处理器架构恰如其分地是袖珍计算器中使用的 CPU 的直接前身。这种转换自 IT 诞生以来就为人所知,可能更早。