Motorola 68000 - Надежно зашифровать номер

Мне было интересно, есть ли способ надежно зашифровать, зашифровать или скрыть число в m68k (или ассемблере в целом).

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

Или что-то непоследовательное в этом роде.

Спасибо!


person Andrew Edwards    schedule 23.12.2015    source источник


Ответы (2)


Единственный способ, которым я могу думать, не тратя лишних циклов, - это злоупотреблять тем фактом, что адресная шина 68k является только 24-битной (по крайней мере, на некоторых ранних моделях). Вы можете отступать от случайного 8-битного целого числа после каждого адреса длинного слова, например.

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

Это никоим образом не повлияет на 68-битный процессор, так как старшие 8 бит игнорируются, но любой, кто попытается использовать, например, IDA Pro, сойдет с ума, поскольку IDA Pro использует для адресации полные 32 бита! Это означает, что теперь он не может найти данные, на которые ссылаются, подпрограмму или адрес ОЗУ, если старшие 8 бит не равны 0 или 0xFF (для ПЗУ и ОЗУ соответственно). Конечно, для любого достаточно умного это не большая проблема, но это потребует гораздо больше ручной работы.

Другие формы шифрования, которые вы можете попробовать, — это использование полных наборов инструкций Тьюринга, чтобы уменьшить количество используемых инструкций и сделать ход программы более сложным для понимания. Однако, скорее всего, будет использоваться больше процессорного времени и места в ПЗУ, что может быть не идеально. Тем не менее, я сделал кое-что только с перемещением, если хотите см.

person Green Snake    schedule 30.12.2015
comment
Это действительно хорошая идея. Я помню, что старая MacOS для чего-то использовала старшие 8 бит. - person b degnan; 30.12.2015

Краткий ответ: нет.

Более длинный ответ: на большинстве процессоров нет хорошего способа справиться с этим. ЦП, которые делают это, имеют блок аппаратного шифрования для ввода-вывода, поэтому данные при обращении к ним извне шифруются. На самом деле вы можете выполнять определенные математические операции с зашифрованными данными с помощью определенных типов шифров. Например, вы можете добавить два зашифрованных значения в IDEA и получить зашифрованный вывод, который является этим добавлением, но это не очень полезно.

Самое близкое, что я могу придумать, это установить некоторое значение смещения в несколько из 68k регистров, а затем создать вокруг этого простую сеть Fiestel. Это позволит вам работать с данными. Это будут просто маски ROR и XOR, но это позволит вам вводить и выводить данные, но вам нужно будет тратить циклы, чтобы вы могли расшифровать данные.

Если у вас софт-ядро на ПЛИС, я видел шифрование на уровне регистров с изолированными ключами с использованием PRESENT. ОС BEAR от Dartmouth интегрируется с аппаратным обеспечением, чтобы обеспечить изоляцию на уровне процессов. Это может быть хорошим местом для начала, если вам нужны зацепки. Удачи.

person b degnan    schedule 24.12.2015