Разумеется)) Куда же без него)) Но не будем забегать вперёд... Всё по порядку...
Для реализации Шифра Вернама нам потребуется генератор случайных чисел.
Генераторы случайных чисел бывают двух видов:
1. Программный -
https://ru.wikipedia.org/wiki/Генератор ... йных_чисел
2. Аппаратный -
https://ru.wikipedia.org/wiki/Аппаратны ... йных_чисел
Нас больше интересует Аппаратный, т.к. у него лучше энтропия -
https://ru.wikipedia.org/wiki/Информационная_энтропия
Цитата: "В персональных компьютерах авторы программных ГСЧ используют гораздо более быстрые источники энтропии, такие, как
шум звуковой карты или счётчик тактов процессора."
Шум звуковой карты...
Добавлено after 1 hour 2 minutes 20 seconds:
Вместо звуковой карты будем использовать АЦП ATmega128.
Вот собственно схема АЦП ATmega128.
Обычный АЦП последовательного приближения.
https://ru.wikipedia.org/wiki/Аналого-ц ... риближения
Ничего особенного))
Отключаем подтяжку порта... Порт болтается в воздухе)) Входное сопротивление более 1 MOм... Это важно !
Затем нажимаем кнопочку на ATmega128... Запускаем непрерывное преобразование АЦП...
АЦП измеряет напряжение на входе... Точнее разного рода "наводки" на входе АЦП. Т.к. входное сопротивление более 1 MOм...
Далее делаем цифровую обработку полученных значений АЦП.
Тут есть одна "фишка". После цифровой обработки значений АЦП мы получаем не само значение АЦП, а значение квантов АЦП.
Т.е. по сути мы измеряем на напряжение, а шум квантования самого АЦП. Это важно ! Это улучшает энтропию ))
Добавлено after 3 minutes 28 seconds:
Вот что у нас получилось на выходе))
У кого есть специальные программы проверки энтропии можете проверить... действительно ли все числа случайные и не коррелируют ли они между собой. Есть такие специальные программы.))
Добавлено after 22 minutes 39 seconds:
Получили массив значений (шум квантования АЦП, вызванного как флуктуациями напряжения на входе самого АЦП, так и ошибками квантования самого АЦП). В идеале мы должны получить белый шум.
https://ru.wikipedia.org/wiki/Белый_шум
Далее ATmega128 разбивает массив на блоки... считает для каждого блока контрольную сумму и записывает на флешку.
Получили массив ключей шифрования для Шифра Вернама))
Добавлено after 22 minutes 39 seconds:
Затем нажимаем кнопочку на сервере (192.168.0.101)...
Сервер (192.168.0.101) запрашивает ключи шифрования у сервера (192.168.0.3).
Сервер (192.168.0.101) получает ключи шифрования (
по закрытому каналу связи !) и сохраняет на жёсткий диск (HDD).
Примечание:
Сервер (192.168.0.101) получает ключи шифрования только если на сервере (192.168.0.3) нажата специальная кнопочка - "разрешить получить ключи" ))
Т.е. как вы уже догадались, чтобы получить ключи шифрования необходимо иметь физический доступ к серверу (192.168.0.3), который находится Дома... за семью замками)) .
А дальше всё стандартно)) Все сообщения между серверами шифруются по стандартному алгоритму Шифра Вернама (операция XOR).
Всё работает))
Добавлено after 21 minute 24 seconds:
И так... мы получили систему с абсолютной криптографической стойкостью как для кораблика так и для Умного дома.
*Примечание 1:
контрольная сумма ключей нужна как для контроля передачи так и для контроля хранения ключей. В случае ошибки система нам сообщит))
*Примечание 2:
на самом деле никто ключи шифрования не хранит на жёстком диске компа в
открытом виде. Обычно на жёстком диске компа хранят хеш суммы ключей... Потому что есть всякие вирусные программы (типа троянов) которые крадут данные из ваших компов. Но об этом в другой раз))
Добавлено after 41 minute 19 seconds:
Теперь о недостатках...
https://ru.wikipedia.org/wiki/Шифр_Верн ... применения
Цитата: "В настоящее время шифрование Вернама используется достаточно редко. В большой степени из-за существенного размера ключа, длина которого должна совпадать с длиной сообщения. То есть, использование таких шифров требует огромных затрат на производство,
хранение..."
Флешка 32 гигабайт / 32 байт = 1 гига ключей. Много это или мало ? ))
Для кораблика - нормально)) А для Умного дома ? Ну если видео передавать не будем, то нормально )) А если будем ? То мало.
Хотя китайцы уже научились делать флешки на 1 Тбайт ! Но пока дорого... и вообще...))
А как уменьшить размер ключа ? Ну... можно не шифровать всё сообщение а использовать просто как одноразовый пароль для управления системой. Тогда достаточно ключа в несколько байт. Нам же надо в первую очередь предотвратить несанкционированный доступ к нашей системе... А сами данные (всякие там датчики и лампочки с термореле и таймерами) врятли представляют государственную тайну))
Короче сделаем одноразовый пароль 8 байт...
Нормально)) Вероятность несанкционированного доступа к нашей системе составляет 281.474.976.710.655 / 1.
Т.е. злоумышленнику даётся только одна попытка из 281.474.976.710.655 "угадать" пароль нашей системы с первого раза !))
А если с первого раза не получиться "угадать" пароль, то система блокируется... (устанавливается флаг "ошибка key" - и об этом нам тоже сообщит система). После этого система перестанет реагировать на любые команды (кроме статуса - статус нужен в любом случае для контроля системы).
Для разблокировки системы нужно нажать специальную кнопочку "разблокировать". А для этого опять нужен физический доступ к серверу (192.168.0.3), который находится (как вы помните) Дома... за семью замками)) .
P.S. Кроме простой блокировки по паролю, система может так же занести ваш IP в чёрный список... и вы больше не сможете никогда подключиться к системе с данного IP. (Да, система знает и помнит кто, когда и с какого IP заходил на сервер).
Кратко вот))
Добавлено after 49 minutes 42 seconds:
И так... с шифрованием Вернама разобрались)) Всё что можно было выжать - выжали)) Далее смотрим другие алгоритмы.
Надо избавиться от флешки... она занимает много места... ограничивает число ключей... тормозит работу системы... и т.д. и т.п.
AES-128. Самый популярный на сегодняшний день шифр. Используется в разных радио модулях (для корабликов и умных домов). Шифр AES-128 - симметричный алгоритм блочного шифрования (как и шифр Вернама). Только чуть другой принцип.
https://ru.wikipedia.org/wiki/Advanced_ ... n_Standard
Только две проблемки))
1. Пока не до конца разобрался с алгоритмом.
2. Криптостойкость под сомнением.
https://ru.wikipedia.org/wiki/Advanced_ ... остойкость
Цитата: "У нас есть одно критическое замечание к AES: мы не совсем доверяем его безопасности".
Класс ))
Добавлено after 24 minutes 35 seconds:
Думаю мы придумаем
свой алгоритм шифрования)) Возьмем основное от других алгоритмов... Сварим свой суп))
В основе будет "мясо" - генератор псевдослучайных чисел.
AES-128 имеет разные режимы шифрования...
https://ru.wikipedia.org/wiki/Режим_шифрования
Это нам пригодится.)) Возьмём "картошки" - режим (CBC). Ещё добавим "петрушки" - вектор инициализации.
У нас есть "марковка" - генератор случайных чисел.
И добавим Соль (куда же без неё) -
https://ru.wikipedia.org/wiki/Соль_(криптография)
Тут главное суп не пересолить))
