摩托罗拉 68000 - 可靠地密码

Motorola 68000 - Reliably cipher a number

我想知道是否有一种方法可以可靠地加密、加密或隐藏 m68k 中的数字( 一般装配).

I.e: 01=09, 32=1F

或者类似的不一致。

谢谢!

简答:没有。

更长的答案:在大多数 CPU 中都没有很好的方法来处理这个问题。执行此操作的 CPU 具有用于 IO 的硬件加密块,因此从盒子外部引用的数据是加密的。您实际上可以对某些类型的密码的加密数据进行某些数学运算。例如,您可以在 IDEA 中添加两个加密值,并得到一个加密输出,即该添加值,但这不是很有用。

我能想到的最接近的事情是将一些偏移值设置到几个 68k 寄存器中,然后围绕它创建一个简单的 Fiestel 网络。这将允许您对数据进行操作。它只是一些 ROR 和 XOR 掩码,但它会做到这一点,因此您可以进出数据,但您需要浪费周期,以便您可以对数据进行去混淆

如果您在 FPGA 上有一个软核,我已经看到使用 PRESENT 使用隔离密钥在寄存器级别进行加密。 Dartmouth 的 BEAR OS 与硬件集成,在进程级别为您提供隔离。如果您需要一些线索,那可能是一个不错的起点。祝你好运。

我认为不浪费任何额外周期的唯一方法是滥用 68k 地址总线仅为 24 位这一事实(至少在某些最早的型号上是这样)。您可以在每个长字地址后缩进随机 8 位整数,例如

dc.l (<<24)|$FF1234.l
jsr ($EA<<24)|DisplayText
lea (F<<24)|MainPalette,a2
clr.b (F<<24)|$FF890D.l

这丝毫不会影响 68k 处理器,因为高 8 位被忽略了,但是任何尝试使用 IDA Pro 的人都会发疯,因为 IDA Pro 使用完整的 32 位进行寻址!这意味着它现在找不到任何引用的数据、子程序或 RAM 地址,只要高 8 位不是 0 或 0xFF(分别针对 ROM 和 RAM)。当然,任何足够聪明的人这都不是什么大问题,但它需要更多的手动工作。

您可以尝试其他形式的加密,使用图灵完备指令集,以减少使用的指令,并使程序流程更难理解。但是,很可能会使用更多CPU时间和ROMspace,这可能并不理想。尽管如此,I've made something with move only, if you wish to see.