Перейти к содержимому


Фотография

Размышления о шифровании и безопасной передаче данных


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 19

#1 Оффлайн   Alex

Alex
  • Администраторы
  • Сообщений: 3 735
  • Уровень сигнала: 52,61%
  • В игре: 392 час. 51 мин.

Награды

                 

Отправлено 15 Июль 2014 - 22:13

Предлагаю продолжить разработку системы безопасной передачи данных.

Я считаю, это вопрос №1 при использовании сети Реднет вообще и покрытия CraftNet в частности. Для тех, кто не в курсе, скажу, что можно перехватить любое сообщение Реднет, а также отправить ложное сообщение получателю, представившись любым отправителем, и идентифицировать подмену можно только по уникальному актуальному пакету, привязанному ко времени, но для этого сообщение нужно зашифровать.

Какие варианты у нас есть?

1. Нужно разобраться с блоком Cryptographic Accelerator. Только он не крафтится чего-то(не жарятся каменные компы для получения чипов), хотя в конфиге крафт разрешил.

Вот официальный источник:
http://www.computerc...ss-peripherals/

Пример программы:
http://pastebin.com/kztKdG9U

Но его использовать для черепах нельзя.



2. Придумать свой алгоритм шифрования, но вопрос генерации и обменом симметричным ключом по открытому каналу без передачи этого самого ключа пока не решен программно.
Кто не видел, посмотрите алгоритм Диффи-Хеллмана

3. Может как то использовать возможность сети интернет и по нему передать ключи. Но как сказать компьютерам и роботам, что по такому-то адресу лежит ключ. Адрес то можно тоже перехватить. Или сразу создать и удалить (перезатереть) файл на пастебине, например. Пока не соображу, как это сделать.

4. Ну и мой вариант, который придумал вчера. Вроде должно работать, и думаю это довольно надежно будет. Использовать его буду в своей банковской системе, когда человек работает через терминал по радиосети со своим аккаунтом и банковским счетом.

Возле терминала стоит Biometric Lock. Клиент по отпечатку пальца инициализирует процедуру аутентификации, терминал получает ник игрока. Далее терминал просит придумать пароль для регистрации. Пароль хешируется и отправляется на сервер вместе с ником. Если такого игрока нет в базе, создается аккаунт на данного клиента. Аккаунт создан.

Далее выбираем войти в аккаунт, проверяем отпечаток пальца, вводим свой пароль и терминал отправляет на сервер ник и хеш. Если хеши совпали, сервер генерирует случайный ключ шифрования для данной сессии и через командный блок шлет его игроку на мыло в игровом чате. Например так (/mail send AlexCC trtYhhGDFf) Далее игрок вводит полученный ключ и начинается сессия по обмену информацией в зашифрованном виде симметричным ключом.

Ключ умирает при окончании сессии, или выходе игрока из аккаунта. Ключи и пароли в открытом виде нигде вроде не передаются. Костыльный метод конечно, и сгодиться только для администраторских схем, т.к. используется командный блок. Ключи в черепахах-кассирах придется периодически менять вручную, благо к ним в обычном мире запрещен доступ, даже к интерфейсу.

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

#2 Оффлайн   Alex

Alex
  • Автор темы
  • Администраторы
  • Сообщений: 3 735
  • Уровень сигнала: 52,61%
  • В игре: 392 час. 51 мин.

Награды

                 

Отправлено 16 Июль 2014 - 03:01

А ведь использовать карту как в обычном банкомате проще?или нет?

Нет! RFID карта просто хранит до 80 символов. Для чего это нужно, пока не понятно. Подойдет для хранения какой-то личной информации и ее считывания и идентификации. Карту можно перезаписывать. Не понятно, как ее выдавать игрокам. Так же ее легко потерять в бою с ким-то крипером. И толку от нее, как от зонтика для рыбки. Она же не шифрует Реднет сообщения:)

А у нас тема просвещена шифрованию и обмену информацией по открытому каналу связи.

#3 Оффлайн   Zer0Galaxy

Zer0Galaxy
  • Гуру
  • Сообщений: 1 228
  • Уровень сигнала: 0%
  • В игре: 0 час. 0 мин.

Награды

   5                              

Отправлено 16 Июль 2014 - 09:46

Если речь идет только о работе банковской системы, то может нет необходимости шифровать сообщения? Ну узнает Ева, что Алиса купила два алмаза. И что? Тут важнее идентификация абонента, что бы никто не покупал алмазики за чужой счет. Предлагаю рассмотреть следующий вариант. Предположим, пользователь User имеет пароль Password и хочет передать сообщение Message на сервер. Клиентская программа формирует строку Message+H(Message+User+Password), которая и передается по незащищенному каналу. Где H() - хеш-функция. Обратите внимание, сообщение передается незашифрованным, но сопровождается подписью, подделать которую невозможно не зная пароля.

#4 Оффлайн   Zer0Galaxy

Zer0Galaxy
  • Гуру
  • Сообщений: 1 228
  • Уровень сигнала: 0%
  • В игре: 0 час. 0 мин.

Награды

   5                              

Отправлено 16 Июль 2014 - 10:30

А по поводу первого поста.

1. Нужно разобраться с блоком Cryptographic Accelerator.

С Cryptographic Accelerator разбирался когда то. Вроде, ничего сложного. Могу освежить. Помню, там строки для шифрования ограничены по длине. Если предполагается, что пользователь будет работать со своего компьютера, а не с банковского терминала, то этот вариант не приемлем т.к. нуб вряд ли сможет скрафтить Cryptographic Accelerator, даже если бы он крафтился.

2. Придумать свой алгоритм шифрования

Когда то поднимал тему шифрования открытым ключом. Вопрос передачи ключа при этом снимается, но я не смог решить задачу эффективной генерации пары ключей. Если использовать закрытый ключ, то его можно генерировать один раз для каждого пользователя, а хранить на RFID-карте. Карту же выдавать при личном посещении пользователем банка.

3. Может как то использовать возможность сети интернет и по нему передать ключи.

Лично я противник всего, что выходит за игровой сервер. Исключение делаю только для pastebinа и то не всегда

#5 Оффлайн   NEO

NEO
  • Пользователи
  • Сообщений: 1 748
  • Уровень сигнала: 4,88%
  • В игре: 36 час. 25 мин.
  • ГородСолнце

Награды

   3                        

Отправлено 16 Июль 2014 - 13:17

Можно сделать систему логин пароль к роутеру , а данные логина и пароля шифровать и передавать на роутер,нужно что бы роутер выдал компьютеру уникальный адрес (физический)

#6 Оффлайн   Zer0Galaxy

Zer0Galaxy
  • Гуру
  • Сообщений: 1 228
  • Уровень сигнала: 0%
  • В игре: 0 час. 0 мин.

Награды

   5                              

Отправлено 16 Июль 2014 - 13:22

Можно сделать систему логин пароль к роутеру , а данные логина и пароля шифровать и передавать на роутер,нужно что бы роутер выдал компьютеру уникальный адрес (физический)

Не совсем понятно. Поясни на примере, пожалуйста.

#7 Оффлайн   Alex

Alex
  • Автор темы
  • Администраторы
  • Сообщений: 3 735
  • Уровень сигнала: 52,61%
  • В игре: 392 час. 51 мин.

Награды

                 

Отправлено 16 Июль 2014 - 14:24

Обратите внимание, сообщение передается незашифрованным, но сопровождается подписью, подделать которую невозможно не зная пароля.

Но ведь Message+H я могу перехватить и отправить от имени отправителя, то есть на его радиочастоте адресату что-то типа MyMessage+H, при этом мне пароль то и не нужен?

#8 Оффлайн   Totoro

Totoro
  • Хранители Кода
  • Сообщений: 1 734
  • Уровень сигнала: 0,3%
  • В игре: 2 час. 13 мин.

Награды

                                      

Отправлено 16 Июль 2014 - 14:41

Но выходит, что H(Message+User+Password) != H(MyMessage+User+Password), следовательно, полученное сообщение было подделано.

#9 Оффлайн   Zer0Galaxy

Zer0Galaxy
  • Гуру
  • Сообщений: 1 228
  • Уровень сигнала: 0%
  • В игре: 0 час. 0 мин.

Награды

   5                              

Отправлено 16 Июль 2014 - 16:05

Да, действительно. При такой схеме можно только продублировать перехваченное сообщение, но не подделать. Чтобы и дублирование было невозможно нужно в хеш вставлять еще какую нибудь соль, например случайно сгенерированное число, которое генерируется сервером для каждого сеанса связи. Но я не об этом. Я о том, что если работать не в направлении шифрования сообщений, а в направлении электронной подписи?

#10 Оффлайн   NEO

NEO
  • Пользователи
  • Сообщений: 1 748
  • Уровень сигнала: 4,88%
  • В игре: 36 час. 25 мин.
  • ГородСолнце

Награды

   3                        

Отправлено 16 Июль 2014 - 16:22

Не совсем понятно. Поясни на примере, пожалуйста.

когда ты будешь подключаться к роутеру нужно будет ввести логин пароль

#11 Оффлайн   Zer0Galaxy

Zer0Galaxy
  • Гуру
  • Сообщений: 1 228
  • Уровень сигнала: 0%
  • В игре: 0 час. 0 мин.

Награды

   5                              

Отправлено 16 Июль 2014 - 16:46

когда ты будешь подключаться к роутеру нужно будет ввести логин пароль

А зачем это роутеру? Если я решу сделать Craftnet платным, тогда понятно. Но Craftnet платным не будет пока я в нем участвую.
Может кто нибудь захочет стать провайдером и продавать трафик, тогда пусть делает

#12 Оффлайн   Zer0Galaxy

Zer0Galaxy
  • Гуру
  • Сообщений: 1 228
  • Уровень сигнала: 0%
  • В игре: 0 час. 0 мин.

Награды

   5                              

Отправлено 16 Июль 2014 - 17:05

Обнаружил неприятную особенность сети rednet. Оказывается символы с кодом больше 127 передаются некорректно. Тоже касается и записи на диск. Это надо учитывать при разработке алгоритма шифрования.

#13 Оффлайн   Alex

Alex
  • Автор темы
  • Администраторы
  • Сообщений: 3 735
  • Уровень сигнала: 52,61%
  • В игре: 392 час. 51 мин.

Награды

                 

Отправлено 16 Июль 2014 - 17:55

А зачем это роутеру? Если я решу сделать Craftnet платным, тогда понятно. Но Craftnet платным не будет пока я в нем участвую.
Может кто нибудь захочет стать провайдером и продавать трафик, тогда пусть делает

:DLike

Обнаружил неприятную особенность сети rednet. Оказывается символы с кодом больше 127 передаются некорректно. Тоже касается и записи на диск. Это надо учитывать при разработке алгоритма шифрования.

Zer0Galaxy! Можно, подробнее, пожалуйста, какая версия, мод, сервер, что не так передается? И нет ли таблицы символов под рукой?

#14 Оффлайн   Zer0Galaxy

Zer0Galaxy
  • Гуру
  • Сообщений: 1 228
  • Уровень сигнала: 0%
  • В игре: 0 час. 0 мин.

Награды

   5                              

Отправлено 16 Июль 2014 - 18:37

Пробую в эмуляторе CCEmu [ATTACH]127[/ATTACH] На скриншоте видно, что пытаюсь отправить символ с кодом 195, а принимаю - 239. Почему так, не знаю На всякий случай реализовал алгоритм шифрования, у которого на выходе строка содержащая только шестнадцатеричные цифры. В результате зашифрованная строка вдвое длиннее незашифрованной

Прикрепленные изображения

  • crypt.jpg


#15 Оффлайн   Zer0Galaxy

Zer0Galaxy
  • Гуру
  • Сообщений: 1 228
  • Уровень сигнала: 0%
  • В игре: 0 час. 0 мин.

Награды

   5                              

Отправлено 16 Июль 2014 - 19:13

Предлагаю для тестирования свежеиспеченный алгоритм шифрования на основе сети Фейстеля
http://ru.wikipedia....i/Сеть_Фейстеля
http://pastebin.com/KC7uE6ZP
Работает это следующим образом:
Сначала создаем массив ключей key. Это обычная луа-таблица из 16-ти числовых элементов. Она используется для шифрования и дешифрования строк. У передающей и принимающей сторон она должна быть одинаковой, а взломщику известна быть не должна. Как она генерируется не важно, но я сделал функцию getkey(pwd) на входе которой произвольная строка. а на выходе - требуемая таблица.
И так, первое действие key=getkey('secret_password'). Его нужно выполнить и на передающей и на принимающей стороне. Если секретный пароль одинаков, то и таблица ключей сгенерируется одинаково.
Затем вызываем функцию crypt(str,key). Тут str - передаваемое сообщение, а key - таблица ключей. На выходе получим кучу букв и цифр, что и есть зашифрованное сообщение. Зашифрованное сообщение передаем получателю по незащищенному каналу.
Получатель вызывает функцию decrypt(str,key). Где str - зашифрованное сообщение, а key - догадываетесь что.
Алгоритм работает с блоками данных 64 бита (8 символов), поэтому если длина исходной строки не кратна 8-ми, она дописывается нулевыми символами, которые можно наблюдать в расшифрованном сообщении в виде знаков вопроса. Не удивляйтесь.
  • HeroBrine1st это нравится

#16 Оффлайн   Alex

Alex
  • Автор темы
  • Администраторы
  • Сообщений: 3 735
  • Уровень сигнала: 52,61%
  • В игре: 392 час. 51 мин.

Награды

                 

Отправлено 28 Август 2014 - 20:44

Попробовал на сервисе запустить, ошибка [string "stdin"]:24: attempt to index global 'bit' (a nil value) при попытке вызова функции getkey

...

mstr = 'hello world'
mkey=getkey('qwerty')
print(crypt(mstr,mkey))

#17 Оффлайн   Zer0Galaxy

Zer0Galaxy
  • Гуру
  • Сообщений: 1 228
  • Уровень сигнала: 0%
  • В игре: 0 час. 0 мин.

Награды

   5                              

Отправлено 29 Август 2014 - 09:24

Сервис не поддерживает всех CraftOSовских библиотек. В данном случае ругается на библиотеку bit

#18 Оффлайн   Alex

Alex
  • Автор темы
  • Администраторы
  • Сообщений: 3 735
  • Уровень сигнала: 52,61%
  • В игре: 392 час. 51 мин.

Награды

                 

Отправлено 09 Октябрь 2014 - 14:20

Дима, подскажи, как лучше и разумнее сделать отсечку добавочных символов в 64-битном последнем блоке на получателе?

Изображение

В исходное сообщение я буду вставлять время-дату формирования пакета. Тогда получатель его может получить только один раз и все эхо-дубликаты хакера отбросит. Но что делать с кратными символами. Может получателю еще в зашифрованном сообщении передать длину исходной строки в виде числа, тогда получатель расшифрует строку, найдет в ней время отправки и длину реального сообщения, и потом служебную информацию выкусит вместе с нулевыми символами?
То есть шифровать уже буду, например, строку: T=2345569051L=29M=hello world. Получатель расшифрует текст, выкинет нулевые знаки и начнет работать с исходной строкой. http://puu.sh/c5pb3/554dd8ceba.png
Или как еще можно сделать?

П.С. Ну и decrypt, видимо, придется запускать в безопасном режиме, так как крашится при попытке расшифровки абракадабры, а не реального шифротекста.

#19 Оффлайн   Zer0Galaxy

Zer0Galaxy
  • Гуру
  • Сообщений: 1 228
  • Уровень сигнала: 0%
  • В игре: 0 час. 0 мин.

Награды

   5                              

Отправлено 09 Октябрь 2014 - 15:51

Отбросить нулевые символы можно при помощи заклинания
mess=mess:match("(%Z*)")
, где mess - принятое сообщение. Передавать длину сообщения при этом не нужно.
А вот на счет краша при приеме абракадабры, я подумаю над алгоритмом.
  • Alex это нравится

#20 Оффлайн   Alex

Alex
  • Автор темы
  • Администраторы
  • Сообщений: 3 735
  • Уровень сигнала: 52,61%
  • В игре: 392 час. 51 мин.

Награды

                 

Отправлено 09 Октябрь 2014 - 16:01

Отбросить нулевые символы можно при помощи заклинания...

Отлично! Работает заклинание:)Like Ты Маг!:D




Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных