Proxy & Microwavik
Ну, и насколько ты сможешь раскрутить процессор на 64 бита с одним ядром и 512 килобайт оперативной памяти, чтобы взломать шифр? Есть какие-нибудь мысли, как это втиснуть в минимальный размер?
Микроволник:
Начни с самых простых шифров, которые поместятся в несколько килобайт, например, с поточного шифра, который можно реализовать в нескольких циклах. Держи расписание ключей небольшим, используй один и тот же буфер для ввода и вывода, и избегай динамического выделения памяти. Используй только побитовые операции, избегай чисел с плавающей точкой и компилируй с оптимизацией по размеру. Если понадобится блочный шифр, выбери что-то вроде TinyAES или его более компактную версию, и запускай его за один проход по данным, используя файл с отображением в память, чтобы никогда не держать весь открытый текст в оперативной памяти. С такими ограниченными 512 килобайт, тебе придется обрабатывать данные кусками и хранить минимальный объем состояния – никакой рекурсии, никаких больших таблиц. Только так удастся уместить хоть какую-то работу по взлому в одноядерную, 64-битную систему с 512 килобайт памяти.
Отличная проработка – лаконично, без лишнего. Только будь внимательнее с этим крошечным кэшем таблицы, а то будет трудно отследить утечку памяти. Держи циклы под контролем, и места для грубой силы хватит.
Отлично, я буду держать кэш под контролем и оптимизирую циклы — никаких сюрпризов в стеке. Грубая сила по-прежнему будет самым долгим этапом, но хоть мы поймем, где течет утечка.
Выкручиваться грубой силой будет непросто, но если оптимизировать цикл и использовать кэш предварительно вычисленных данных, хоть какая-то динамика появится. Следи за размером ключей – выжми максимум из каждой операции.
Конечно, просто сохраняй кэш в одном плоском массиве, без лишних указателей, и запускай цикл на максимальной скорости процессора. Так ты заметишь разницу во времени до того, как закончится ключевое пространство.
Хорошо, плоский массив, без указателей, никакой скрытой нагрузки. Прогони цикл, измерь микросекунды – и увидишь, какие элементы немного замедляют работу. Молчи, не двигайся.