В статье предложен оригинальный кодовый замок с «плавающим» кодом. По мнению автора, такой замок по степени секретности превосходит известные с постоянным кодом.
В основе любого кодового замка лежит принцип сравнения последовательности символов (цифр или букв), заложенных в память замка, и комбинации символов, вводимых с внешней клавиатуры. При совпадении этих двух последовательностей (кодов) замок выдаёт команду на исполнительный механизм, открывающий «потаённую дверцу».
Известно огромное множество подобных конструкций — дверные замки, сейфовые, гаражные и пр. К сожалению, все они имеют один общий недостаток: код, записанный в памяти замка, постоянен. Да, его можно оперативно изменить, и это регулярно делается в системах повышенной секретности. Тем не менее модифицированный код сразу же становится постоянным (статичным). А даже код увеличенной длины (иногда для открывания замка требуется ввести комбинацию из 8—12 символов) может быть подсмотрен, считан тем или иным способом. Ведь для того, чтобы открыть замок со статичным кодом, требуется строго определённая последовательность нажатия на кнопки клавиатуры замка или одна и та же последовательность поворота ручки энкодера.
А если сделать замок, который сам будет постоянно изменять свой внутренний код? Но как же тогда человек, имеющий доступ к открыванию замка, сможет его открыть, не зная текущей кодовой комбинации? Ответ прост: замок должен как-то подсказывать открывающему, что нужно сделать для того, чтобы он открылся.
Идея замка с динамическим кодом возникла у автора более 40 лет назад и сразу же была реализована. Многолетняя эксплуатация таких замков, выполненных на различной элементной базе, показала их абсолютную надёжность. Ни один из многочисленных вариантов замков, изготовленных по такому принципу, никому не удавалось открыть без подсказок лиц, знающих принцип их открывания. Такие случаи, к сожалению, были. Но человеческий фактор всегда был и остаётся самым уязвимым звеном в любой секретной или криптографической системе.
Рассмотрим принцип работы кодового замка с псевдодинамическим кодом. Предлагаемый упрощённый вариант замка имеет всего две кнопки, на которые требуется нажать в какой-то последовательности заданное число раз. При этом замок на каждое нажатие на любую из кнопок модифицирует свой внутренний код, а точнее, изменяет требуемую очерёдность нажатия на кнопки по случайному закону. В итоге, даже если злоумышленник будет стоять рядом с человеком, открывающим дверь, и запомнит очерёдность нажатия на кнопки, он не сможет открыть замок, повторив только что набранную комбинацию. Более того, если человек, который набрал правильный код, но по какой-то причине не вошёл в открывшуюся дверь, попытается сделать это ещё раз через несколько секунд, он должен будет нажимать на кнопки замка уже в совершенно другой последовательности!
Дополнительная защитная опция замка — режим автоблокировки, который «замораживает» замок на некоторое время в случае попытки его открывания методом подбора. И чем дольше злоумышленник будет пытаться открыть замок, нажимая наугад на кнопки, тем дольше замок будет находиться в состоянии блокировки.
Как же происходит набор требуемого кода? Всё просто: рядом с кнопками находятся два светодиода, свет от которых проходит через коллиматоры, ограничивающие угол рассеивания светового потока. Попросту говоря, светодиоды видны только тому, кто стоит непосредственно перед клавиатурой замка. Следовательно, и «подсказка» замка видна только тому, кто его открывает. Но это не значит, что посторонний наблюдатель сможет воспользоваться такой подсказкой.
Допустим, рабочий код замка — четырёхразрядный (а в нашем случае он может быть любой, от двух-трех до восьми разрядов). Тогда для открывания замка потребуется четыре раза нажать на кнопки в требуемой очерёдности. Предположим, что замок запрограммирован на открывание кодом ”1—0—0—1″. Если принять, что левой кнопке замка присвоено значение «1», а правой — значение «0», то для открывания замка потребуется следующая последовательность нажатий на кнопки: «левая—правая—правая—левая».
Теперь допустим, что на каждое нажатие на кнопку замок по случайному закону изменяет значения, присвоенные кнопкам. Следовательно, после первого же нажатия статус кнопок может измениться, но может и остаться прежним. Так вот подсказки, которые делает замок, включая один из светодиодов, касаются не самого кода, а только статуса кнопок, т. е. замок сообщает лишь то, какая кнопка при следующем нажатии будет «нулевой», а какая — «единичной». Тогда для того чтобы ввести требуемый код «1—0—0—1», нужно будет нажимать на кнопки не в последовательности «левая—правая—правая—левая», а в последовательности «светится—не светится—не светится—светится”.
Для того чтобы этот алгоритм работал корректно, перед набором следует обнулить внутренние регистры памяти замка, в которых уже могла быть случайно записана какая-то информация. Для этого нужно одновременно нажать сразу на обе кнопки, что подтверждается включением обоих светодиодов на 0,2 с. В этот момент генератор случайных чисел определит статус кнопок для следующего нажатия и включит тот или другой светодиод-подсказку. После очередного нажатия статус кнопок вновь будет переопределён, и снова один из светодиодов подскажет, какая кнопка стала «единичной» для следующего нажатия. Если же пауза между очередными нажатиями на кнопки продлится больше 5 с, замок выключит оба светодиода и будет оставаться в таком состоянии до следующего нажатия на любую из кнопок. Состояние внутренних регистров микроконтроллера при этом останется неизменным.
В случае ошибки при наборе кода потребуется снова обнулить замок одновременным нажатием на обе кнопки и начать набор кода с первой «цифры». Если же выполнено три обнуления замка, но правильный код так и не введён, замок посчитает это несанкционированной попыткой открывания методом подбора и автоматически заблокируется на некоторое время, в течение которого он даже при наборе правильной комбинации уже не откроется. Внешне режим автоблокировки никак не отличается от штатного — светодиоды будут продолжать хаотично мигать при каждом нажатии на кнопки. Замок вернётся в рабочее состояние только после пятиминутного интервала, если в течение этого времени ни одна из кнопок не будет нажата.
Очевидно, что даже при четырёхзначном коде открыть такой замок постороннему будет очень непросто. А если длину кода увеличить до 6—8 знаков, то открыть его практически невозможно.
Предлагаемый электронный замок собран на микроконтроллере ATtiny13A-P11 в корпусе 01Р-8 (см. рисунок). Устройство не имеет никаких особенностей. В электронном замке применены конденсаторы: С1 — оксидный К50-35 или импортный с номинальным напряжением не менее 16 В, С2 — керамический.
Кнопки панели управления — КМ1-1 или другие с одной группой нормально разомкнутых контактов. Кнопки на плате — SWT-20-4,3 или любые другие аналогичные, предназначенные для монтажа на плату в отверстия. Подойдут как четырёхвыводные, так и двухвыводные кнопки. Интегральный стабилизатор — серии 78L05 в корпусе ТО-92, его можно заменить на любой другой с напряжением стабилизации 5 В и номинальным током нагрузки 50… 100 мА. Диод VD1, шунтирующий обмотку электромагнита, можно заменить на отечественный КД226А или другой с подходящими параметрами.
Питание устройства осуществляется от внешнего нестабилизированного 12-вольтного источника. Максимальный выходной ток источника зависит от рабочего тока применённого электромагнита, открывающего механическую часть замка. В сетевом блоке питания желательно предусмотреть буферную аккумуляторную батарею ёмкостью 4…7 А·ч. Это обеспечит длительную работу замка даже при отключении сетевого напряжения.
Электромагнит коммутируется полевым транзистором IRLU2905PBF с логическим уровнем управления в корпусе I-Pak (ТО-251АА). Этот транзистор, как и большинство остальных деталей, может быть заменён другим с подходящими параметрами: максимальное напряжение сток—исток — не менее 30 В, максимальный ток стока — не менее 5 А (зависит от тока срабатывания электромагнита), в таком же корпусе или ТО-220. Возможно применение биполярного составного транзистора, например, КТ829А или КТ827А. Учитывая, что электромагнит во включённом состоянии остаётся всего лишь 5 с, а промежутки времени между повторными срабатываниями, как правило, гораздо больше, установка коммутирующего транзистора на теплоотвод не обязательна. В крайнем случае можно использовать небольшую пластину из меди, латуни или алюминия толщиной 1,5…2 мм площадью 10…15 см2.
Управляется замок двумя кнопками SB4 и SB5, которые служат для ввода требуемого кода. На панели управления замком (на схеме выделена штрихпунктирной линией) над каждой из кнопок ввода кода установлен отдельный светодиод. Светодиод HL1 соответствует кнопке SB4, а светодиод HL2 — кнопке SB5. Светящийся светодиод показывает, какой кнопке в текущий момент присвоен статус «1». Соответственно, не- подсвеченная кнопка имеет статус «0».
При желании и некотором опыте эксплуатации замка можно оставить только один светодиод, расположив его между кнопками ввода. Это ещё больше затруднит несанкционированное открывание замка. Цвет свечения светодиодов — красный, диаметр 3…5 мм. Можно применять как отечественные светодиоды серии АЛ307, так и импортные.
Кнопка SB1 расположена на плате устройства и предназначена для перевода замка в режим перепрограммирования кода. Для удобства перепрограммирования, в том случае, если панель управления замка установлена на некотором расстоянии от его электронной части, на плате лучше предусмотреть места для установки двух дополнительных кнопок SB2 и SB3, дублирующих кнопки ввода кода на панели управления SB4 и SB5, а также двух дополнительных светодиодов (на схеме не показаны), которые в таком случае нужно включить последовательно с основными светодиодами панели управления. При этом потребуется уменьшить сопротивление резисторов R4 и R5 приблизительно до 100 Ом. Поскольку ввод контрольного кода, разрешающего изменение рабочего кода, не предусмотрен, доступ к кнопкам SB1, SB2 и SB3 должен быть возможен только при снятии защитного кожуха (крышки) с корпуса кодового замка.
Для перевода замка в режим перепрограммирования кода следует одновременно нажать на обе кнопки ввода (или дублирующие кнопки на плате устройства). Замок коротко «моргнёт” светодиодами. Затем, не отпуская нажатые кнопки, необходимо кратковременно нажать на кнопку SB1 («RESET”). При перезагрузке микроконтроллер проанализирует состояние кнопок SB2 («0») и SB3 («1»). Если они обе находятся в замкнутом состоянии, микроконтроллер перейдёт в режим перепрограммирования кода, просигнализировав об этом однократным коротким включением обоих светодиодов. Следует иметь в виду, что несинхронность одновременного нажатия на кнопки не должна превышать 0,15 с, в противном случае замок может отработать не корректно. Требований к синхронности отпускания кнопок нет.
После отпускания всех кнопок можно ввести новый код требуемой длины последовательными кратковременными нажатиями на кнопки «0” и «1». Нажатие на кнопки при наборе нового кода сопровождается коротким включением соответствующего светодиода. Завершается перепрограммирование кода повторным одновременным нажатием на кнопки «0» и «1». Микроконтроллер просигнализирует о завершении перепрограммирования кода двойным коротким включением обоих светодиодов.
В режиме перепрограммирования кода замка генератор случайных чисел не работает и статус кнопок не изменяется, т. е. при нажатии на кнопку «0» в EEPROM микроконтроллера всегда вводится 0, а при нажатии на кнопку «1» всегда вводится 1. Длина (разрядность) кода определяется автоматически и также записывается в EEPROM микроконтроллера.
Конструкция панели управления замка может быть произвольной, но при этом должна защищать кнопки и светодиоды от возможных механических повреждений и отвечать требованиям эргономики. Оптимальное расстояние между кнопками — 40…60 мм. Светодиоды целесообразно располагать на расстоянии 30…40 мм над кнопками. Кнопки не должны выступать над поверхностью панели управления, а светодиоды следует поместить как можно дальше (глубже) от внешней поверхности, чтобы световой поток от них проходил через узкие каналы коллиматоров (отверстия диаметром не более 1… 1,5 мм и глубиной не менее 5 мм) и не рассеивался во все стороны. Ещё лучше сделать канал коллиматора в виде конусного отверстия с углом раскрытия 10… 15°. Яркость светодиодов должна быть минимально достаточной для уверенной идентификации при любых условиях внешней освещённости. Регулируют яркость подбором резисторов R4 и R5.
Если первоначальное программирование микроконтроллера будет производиться непосредственно на собранном устройстве (внутрисистемное программирование), на плате следует предусмотреть пятиконтактный разъём для подключения программатора. На схеме этот разъём обозначен XS1. Из-за невысокой нагрузочной способности выходов некоторых программаторов программирование рекомендуется выполнять при выпаянных светодиодах и резисторе R6.
При первоначальном программировании микроконтроллера в его EEPROM записывается тестовый трёхразрядный код «1—1—1», который затем пользователь может заменить на любой другой. Максимальная длина пользовательского кода — восемь разрядов, что, как правило, является избыточным. В микроконтроллере задействован сторожевой таймер WDT, который автоматически перезагрузит устройство в случае его «зависания» по какой-либо причине.
Поскольку схема устройства очень простая и для её реализации можно применить детали различных типоразмеров, чертёж печатной платы не приводится. Её сможет самостоятельно «развести» под свои детали даже начинающий радиолюбитель.
Программа написана в графической среде Algorithm Builder, которую можно по адресу http://www.algrom.net/russian.html скачать бесплатно. Там же можно найти схемы простых программаторов для микроконтроллеров Atmel.
Скачать программу и hex-файлы для прошивки микроконтроллера и его EEPROM
Автор: И.КАРПУНИН, г. Нижний Тагил Свердловской обл.
Источник: Радио №12, 2016