Password & StormForge
Привет, Пароль. Никогда не думала о том, чтобы объединить старый добрый навесной замок с капелькой криптографии? Я хочу создавать что-то и практичное, и непробиваемое. Как насчёт того, чтобы вместе придумаем замок, который открывается с помощью пароля на основе узора? Это был бы отличный вызов для твоего умения находить закономерности и для моей тяги к надёжному, настоящему замку.
Конечно. Но схема должна быть незаметной для обычного наблюдателя, а не только для скучающего хакера. Представь себе ряд замочных механизмов, которые двигаются только тогда, когда правильная последовательность движений совпадает с скрытой таблицей подстановок, как роторный шифр Цезаря, привязанный к физическому ключу. Если последовательность будет слишком простой – это детская игрушка, а если слишком запутанной – ты сам забудешь, как она работает. И не забывай: ключ, хранящий эту таблицу, тоже должен быть защищён – иначе весь замок – это просто бумажка. Можем добавить случайный сдвиг, который меняется каждый раз, чтобы даже одна и та же схема казалась новой. Вот это и есть настоящий вызов: сочетать тактильные замочные механизмы с переменным шифром, не теряя удобства замка.
Звучит как работа для набора модульных поворотников с небольшим чипом, где хранится карта вращений. Ты сдвигаешь каждый поворотник, он передаёт сигнал миниатюрному роторному энкодеру в чип, который проверяет, соответствует ли текущий угол следующему значению в таблице. Если соответствует – открывается следующий поворотник, если нет – весь механизм блокируется. Карту лучше хранить на защищённом микрофлэш-накопителе, зашифрованную ключом, который у тебя в отдельном сейфе. Каждый раз, когда замок сбрасывается, чип генерирует новый ключ с помощью генератора истинных случайных чисел – так физический рисунок каждый раз будет соответствовать разной таблице. Это значит, что простой взгляд ничего не даст, и невозможно записать схему – она постоянно меняется. Только не забудь добавить поворотникам небольшой щелчок, чтобы ты чувствовал, когда достигнут нужный угол. Если покажется слишком сложным – уменьши размер таблицы; если слишком просто – добавь несколько “тупиковых” углов, чтобы запутать.
Звучит как интересное сочетание механики и математики, но помни: самая сложная блокировка – та, которая кажется безупречно плавной, что заставляешь забыть комбинацию. Добавь еле заметную вибрацию, чтобы ты постоянно проверяла себя. Микро-вспышка отличная, просто следи за перезагрузкой при включении – если генератор ключей даст сбой, у тебя в руках окажется мертвый замок. И еще, подумай о небольшой задержке перед тем, как вернется на место механизм, чтобы случайный импульс не сработал раньше, чем чип снимет флаг. В целом, идея хорошая, но убедись, что пользовательский интерфейс не превратится в отдельную головоломку.
Ладно, поставлю на чип небольшой таймер, чтобы он ждал полсекунды после последнего движения, прежде чем вернётся в исходное положение. Небольшую вибрацию можно обеспечить простой пружинкой, которая будет слегка подбрасывать механизм на каждом цилиндре – так пальцеуказатель будет постоянно считывать обратную связь. Что касается генератора случайных чисел, я использую 32-битный LFSR, инициализируемый из источника истинных случайных чисел при включении; если он сбойит, замок останется заблокированным до тех пор, пока ты не нажмёшь на кнопку сброса. Ограничиваем интерфейс тремя-четырьмя тактильными сигналами – достаточно, чтобы понимать, двигаешься ли ты в правильном направлении, но без превращения этого в проверку памяти. Вот где практичность встречается с хитростью.
Выглядит надёжно. Только будь внимательна к длине цикла этого LFSR – тридцать два бита дают четыре миллиарда шагов, но если вдруг наткнёшься на повторение зерна, ты вернёшься к той же таблице. Это уязвимость в системе, которая гордится своей случайностью. Быстрая проверка на повторения может здорово подпортить хакеру планы, даже до того, как он коснётся замка. В остальном – вперёд, небольшая дрожь и полусекундная задержка – это приятные детали, которые не позволяют замку казаться сложной математической задачей.