Arduino и WebSocket SHA1 Base64

hagemann
Offline
Зарегистрирован: 18.10.2015

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

Я код считывания показаний и отправки сделал, и все работает. На смартфоне сделал html страничку, которая с помощью javascript, раз в секунду обращается к ардуинке а она отправляет данные.

И вроде бы на этом можно отстановиться, но это лишние телодвижения. Хочу сделать на WebSocket чтобы ардуинка сама слала данные на андроид.

А для этого надо на ардуине использовать две библиотеки, а их заставить работать и немогу! это криптомодуль sha1 и base64.

sha https://github.com/Cathedrow/Cryptosuite

base64 https://github.com/adamvr/arduino-base64

помогите пожалуйста!

 

#include <sha1.h>
#include <Base64.h>

HardwareSerial & ESPport = Serial;
char Stroka[] = "TESTING";
#define BUFFER_SIZE 128
char buffer[BUFFER_SIZE];
int           i; 
int ch_id;
int packet_len;

void setup() 
{    
  uint8_t* hash;
  Sha1.init();
  Sha1.print(Stroka);
  hash = Sha1.result();
  ESPport.begin(115200); // ESP8266  
  clearSerialBuffer();
  GetResponse(hash[0], 500);
}

String GetResponse(String AT_Command, int wait)
{
  String tmpData;
  ESPport.println(AT_Command);
  delay(wait);
  while (ESPport.available() >0 )  
   {
   char c = ESPport.read();
    tmpData += c;
    
    if ( tmpData.indexOf(AT_Command) > -1 )         
     tmpData = "";
   else
      tmpData.trim();       
          
   }
   return tmpData;
}

 

hagemann
Offline
Зарегистрирован: 18.10.2015
#include <sha1.h>
#include <Base64.h>

HardwareSerial & ESPport = Serial;
char Stroka[] = "TESTING";
#define BUFFER_SIZE 128
char buffer[BUFFER_SIZE];
int           i; 
int ch_id;
int packet_len;

void setup() 
{    
  uint8_t* hash;
  Sha1.init();
  Sha1.print(Stroka);
  hash = Sha1.result();
  ESPport.begin(115200); // ESP8266  
  clearSerialBuffer();
  GetResponse(hash[0], 500);    // Вот здесь этот запрос по моей идее должен слать криптованный символ, а на страничке нифига нету. хотя и ошибок при компиляции нету
}

String GetResponse(String AT_Command, int wait)
{
  String tmpData;
  ESPport.println(AT_Command);
  delay(wait);
  while (ESPport.available() >0 )  
   {
   char c = ESPport.read();
    tmpData += c;
    
    if ( tmpData.indexOf(AT_Command) > -1 )         
     tmpData = "";
   else
      tmpData.trim();       
          
   }
   return tmpData;
}

 

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

подниму тему, что нового появилось в вопросе безопасного обмена данными, что использует народ кроме sha1?

rkit
Offline
Зарегистрирован: 23.11.2016

ua6em пишет:

подниму тему, что нового появилось в вопросе безопасного обмена данными, что использует народ кроме sha1?

Безопасного от чего и для чего? sha1 это хеш, и к обмену данными отношение имеет весьма отдаленное.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Это да, к обмену прямого отношения не имеет, а вот к целостности и истинности данных видимо да?

Logik
Offline
Зарегистрирован: 05.08.2014

Отношение к обмену вполне имеет. По протоколу клиент должен прислать криптограмму в заголовке HTTP запроса в  Sec-WebSocket-Key, а сервер должен посчитать по ней SHA1 и еще чемуто там, перекодировать хеш в Base64 и отправить обратно клиенту в ответе в Sec-WebSocket-Accept. Насколько я понимаю это для защиты от кэширующего прокси делалось. 

А вообще SHA1 давно уже скомпроментирован, что не мешает его реально использовать т.к. поиск коллизий очень ресурсоемкий. Так чтоб представлять сложность, майнинг биткоина намного проще чем поиск коллизий этих. Хотя по сути своей оба процесса схожи, но при майнинге ищут не полностью совпадающий хеш, а "красивый" - соответствующий некоторым требованиям.  Ну и в битке SHA256.

 

 

b707
Offline
Зарегистрирован: 26.05.2017

Постановка задачи у ТС бредовая - потому и не выходит каменный цветок. Имея уно и есп8266, он почему-то жаждет формировать сокет на Уно, а есп трактовать лишь как тупой подчиненный модуль.Надо сменить концепцию и позволить Есп заниматься тем, для чего онаи предназначена -сетевым обменом .

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

я продумываю задачу как защитить обмен с MYSQL

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

Можно поинтересоваться, ну одним глазком, хотя бы, что за данные такие, которым для защиты MD5 не хватает? ;)))

Не иначе как "щпиёнские страсти"? ЦРУ не дремлет, уже не говоря о МИ6 и МОССАДе, так?

-------------------

Вообще не могу представить данные на контроллере, которым не достаточно обычной CRC для контроля целостности!

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

wdrakula пишет:

Вообще не могу представить данные на контроллере, которым не достаточно обычной CRC для контроля целостности!

про MD5 слышал, но не знаю, есть ли библиотека в составе комплекта ESP, а так важен сам алгоритм задачи, как минимум чтобы не брутфорсили базу, кто и как эту задачу решает?

Logik
Offline
Зарегистрирован: 05.08.2014

ua6em пишет:

я продумываю задачу как защитить обмен с MYSQL

Посмотри в отвлеченных темах, я там игрался des-ом.

rkit
Offline
Зарегистрирован: 23.11.2016

Logik пишет:

Отношение к обмену вполне имеет. По протоколу клиент должен прислать криптограмму в заголовке HTTP запроса в  Sec-WebSocket-Key, а сервер должен посчитать по ней SHA1 и еще чемуто там, перекодировать хеш в Base64 и отправить обратно клиенту в ответе в Sec-WebSocket-Accept. Насколько я понимаю это для защиты от кэширующего прокси делалось. 

Всё написанное не имеет никакого отношения к обмену данными, а имеет отношения к требованиям конкретного протокола. Дурацким и бесполезным, замечу.

rkit
Offline
Зарегистрирован: 23.11.2016

ua6em пишет:

я продумываю задачу как защитить обмен с MYSQL

В mysql есть всё что надо из коробки.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Logik пишет:

ua6em пишет:

я продумываю задачу как защитить обмен с MYSQL

Посмотри в отвлеченных темах, я там игрался des-ом.

Это?

Logik
Offline
Зарегистрирован: 05.08.2014

ua6em пишет:

Logik пишет:

ua6em пишет:

я продумываю задачу как защитить обмен с MYSQL

Посмотри в отвлеченных темах, я там игрался des-ом.

Это?

Да. Для ардуины оно.

А для MySQL поддержка  DES уже должна существовать. Нутром чую )))

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Logik пишет:

Да. Для ардуины оно.

А для MySQL поддержка  DES уже должна существовать. Нутром чую )))

я вообще не сторонник MYSQL наружу светить, общение только через PHP скрипт

rkit
Offline
Зарегистрирован: 23.11.2016

ua6em пишет:

я вообще не сторонник MYSQL наружу светить, общение только через PHP скрипт

Тогда зачем ты пишешь, что тебе нужно защищать mysql?

Logik
Offline
Зарегистрирован: 05.08.2014

ua6em пишет:

Logik пишет:

Да. Для ардуины оно.

А для MySQL поддержка  DES уже должна существовать. Нутром чую )))

я вообще не сторонник MYSQL наружу светить, общение только через PHP скрипт

Я кстати тоже. Но если данные для MySQL то и расшифровывать их внутри БД логично. Хотя в РНР тоже возможно DES расшифровать разумеется.

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

Ысчо рас, прости - не понял. Ты связываешься с MySQL сервером вот-прям с ESP? Клиентской библиотекой на порт 3306? Так? В этом случае, если в библиотеке клиента нет шифрования, придется писать свою ;))).

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

rkit
Offline
Зарегистрирован: 23.11.2016

Logik пишет:

 

Я кстати тоже. Но если данные для MySQL то и расшифровывать их внутри БД логично. Хотя в РНР тоже возможно DES расшифровать разумеется.

НЕ НАДО НИЧЕГО ИЗОБРЕТАТЬ. Во всех серьезных сетевых протоколах всё уже есть. Надо просто чуть-чуть понимать то, чем пользуешься.

Logik
Offline
Зарегистрирован: 05.08.2014

wdrakula пишет:

Ысчо рас, прости - не понял. Ты связываешься с MySQL сервером вот-прям с ESP? Клиентской библиотекой на порт 3306? Так? В этом случае, если в библиотеке клиента нет шифрования, придется писать свою ;))).

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

Он жеж ясно написал - "общение только через PHP скрипт". Соответственно на сервере открывать сообщения либо в БД либо в PHP. А на ардуине закрывать своей реализацией. В криптолибе есть все, оттуда и драть себе код. Но в том виде как есть оно тяжеловато, на ПК расчитано. DES я адаптировал, ссылка выше

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Logik пишет:

Он жеж ясно написал - "общение только через PHP скрипт".

вот вот, защитить GET запросы до открытия и общения с базой, об этом и речь, опознание запросов по форме свой-чужой

rkit
Offline
Зарегистрирован: 23.11.2016

ua6em пишет:

вот вот, защитить GET запросы до открытия и общения с базой, об этом и речь, опознание запросов по форме свой-чужой

Вот, наонец-то внятно поставлена задача. Всё что надо есть в http из коробки. Авторизация и шифрование. Нужно просто настроить свой сервер.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

rkit пишет:

ua6em пишет:

вот вот, защитить GET запросы до открытия и общения с базой, об этом и речь, опознание запросов по форме свой-чужой

Вот, наонец-то внятно поставлена задача. Всё что надо есть в http из коробки. Авторизация и шифрование. Нужно просто настроить свой сервер.

и уже решена )))