![](https://habrastorage.org/webt/dt/yf/2z/dtyf2zz2kgjtgnk_rmupldtew4m.png)
С момента появления криптоанализа и по мере разработки всё новых хакерских техник стоимость получения несанкционированного доступа к вашим данным становится всё ниже, что, в свою очередь, делает их для злоумышленников более привлекательной добычей. В этом руководстве я не буду вдаваться в разбор возможных мотивов и целей кражи данных, а вместо этого просто сосредоточусь на решении данной проблемы.
По моему мнению, единственный способ сохранения недоступности данных – это максимальное повышение затрат, необходимых для получения к ним неавторизованного доступа. В идеале эти затраты должны превышать любую потенциальную выгоду, какую злоумышленники могут в итоге получить.
И для того, чтобы увеличить сложность неавторизованного доступа, я разработал Cipherbox, который считаю своего рода криптографическим швейцарским ножом.
В этом устройстве задействуется шесть алгоритмов шифрования, а также хранилище, защищаемое с помощью четырёх RFID-карт, имени пользователя и пароля. При этом использовать Cipherbox может много людей одновременно, не мешая друг другу (думаю, можно даже сделать на основе этого сервис).
Состоит разработанное мной устройство из трёх микроконтроллеров: ESP32, Arduino Uno и ESP8266.
- ESP32 – это его основа. Все алгоритмы шифрования и SQLite выполняются на нем.
- Arduino Uno служит в качестве драйвера клавиатуры и посредником между ESP32 и RFID-ридером.
- ESP8266 – это ресивер, который выполняет только алгоритм AES+Serpent в режиме дешифровки.
▍ Компоненты
![](https://habrastorage.org/webt/ea/kl/5u/eakl5udpznjix-qithwa1m8-qpc.png)
Компоненты хранилища:
- ESP32 x1;
- Arduino Uno x1;
- 2.4” TFT LCD c ILI9341 x1;
- Mifare RC522 x1;
- RFID-карты x4;
- клавиатура PS/2 x1;
- порт PS/2 x1;
- резисторы 580Ом x2;
- светодиод x1;
- конденсатор 10мкФr x1, необязателен.
Компоненты ресивера:
- ESP8266 x1;
- дисплей Nokia 5110 x1.
▍ Шаг 1: алгоритмы шифрования
Из 6 используемых в этом устройстве алгоритмов 4 выполняют так называемое супершифрование.
![](https://habrastorage.org/webt/dm/7-/yd/dm7-ydqzr1aoom7bkidoxdp4slo.png)
![](https://habrastorage.org/webt/ke/bj/bq/kebjbqfbwoturoetpd1tljegxpy.png)
![](https://habrastorage.org/webt/13/wy/vs/13wyvsoarlx5tqv0pjswkyi6ku4.png)
![](https://habrastorage.org/webt/oh/g_/_j/ohg__js53wwxx-b4wmfqy5-eb6k.png)
![](https://habrastorage.org/webt/hk/3m/da/hk3mdanu0cya2snlsgfxqqh360y.png)
![](https://habrastorage.org/webt/tw/3s/fs/tw3sfszjlc72d701yw59qg_eqci.png)
Согласно определению NIST, супершифрование – это операция шифрования, при которой входящим текстом для преобразования выступает шифротекст, полученный из предыдущей операции шифрования.
Подобная организация алгоритмов позволяет с лёгкостью создать из них один комбинированный, который получится (по меньшей мере) — не слабее самого сильного в каскаде, будет иметь более длинный ключ, может оказаться более устойчив к некоторым видам атак, а также будет генерировать шифротекст с более высокой энтропией. Как бы то ни было, дополнительный слой безопасности (или несколько) точно не помешает.
А теперь перейдём к описанию.
Для начала хочу отметить тот факт, что все используемые в устройстве алгоритмы являются симметричными (один ключ используется и для шифрования, и для расшифровки данных).
Первые четыре алгоритма выполняют супершифрование, а первые пять используют векторы инициализации и случайные числа для предотвращения атак с выбором открытого текста и повышения энтропии шифротекста.
- Blowfish + AES + Serpent + AES – это самый мощный алгоритм, используемый в этом устройстве. Получая на входе 8 символов, он выдаёт 64. (Уверен, его также можно отнести к разряду устойчивых против квантовых атак).
- AES + Serpent + AES практически аналогичен Blowfish + AES + Serpent + AES, за исключением отсутствия Blowfish.
- Serpent + AES уже несколько слабее предыдущих двух, но всё равно достаточно силен для защиты данных.
- Blowfish + Serpent – это алгоритм, который на входе получает 8 символов, а на выходе выдаёт 32.
- Serpent представляет собой голый минимум для защиты данных. Получая 8 символов, он также выдаёт 32.
- AES. На вашем месте я бы обратил на него внимание. Используемую в рассматриваемом устройстве реализацию этого алгоритма я бы не назвал поистине безопасной. Она работает и вполне может шифровать данные, но при этом не задействует преимущества IV и случайных чисел. Этот алгоритм при повторном шифровании одного и того же сообщения будет выдавать один и тот же шифротекст, что делает его уязвимым для атак с выбором открытого текста и особенно для криптоанализа. Добавил же я его сюда лишь потому, хотел дать вам возможность поиграться с «голым AES».
▍ Шаг 2: установка драйверов и настройка Arduino IDE *необязательно
Если вы раньше не занимались прошивкой ESP32 или ESP8266, то для загрузки программ на платы вам потребуется настроить Arduino IDE и установить драйвера. Вот все необходимые ссылки:
- Драйвер CP210x для ESP32;
- Драйвер CH340 для ESP8266;
- На случай если у вас нет Arduino IDE, можете скачать её здесь.
Настройка IDE в это руководство не входит, но вы можете почитать об этом здесь:
▍ Шаг 3: скачивание прошивки с GitHub
![](https://habrastorage.org/webt/-n/38/fw/-n38fwmypthiqj5b4nzl_l_ffko.png)
Прошивку можно взять здесь: https://github.com/Northstrix/Cipherbox
▍ Шаг 4: скачивание и установка библиотек
- Adafruit-GFX-Library;
- Adafruit_ILI9341;
- Adafruit_BusIO;
- PS2Keyboard;
- esp32_arduino_sqlite3_lib;
- rfid;
- nokia-5110-lcd-library;
Распаковываются библиотеки стандартно. Можете извлечь содержимое архива в каталог: ...\Arduino\libraries, либо открыть Arduino IDE, кликнуть Sketch -> Include Library -> Add .ZIP Library... и выбрать каждый архив с библиотеками.
Остальные необходимые пакеты, так или иначе, уже присутствуют.
▍ Шаг 5: установка загрузчика файловой системы ESP32
![](https://habrastorage.org/webt/7h/fc/2o/7hfc2o6n24kwh6xuxcknpoebyya.png)
Основная цель этого загрузчика – позволить вам загружать файлы в файловую систему ESP. В этом руководстве он будет использоваться для загрузки в ESP пустого образа SPIFFS.
Скачайте файл ESP32FS-1.0.zip отсюда: https://github.com/me-no-dev/arduino-esp32fs-plugin/releases/
Затем извлеките его содержимое в каталог ...\Arduino\Tools\ и перезапустите Arduino IDE.
▍ Шаг 6: форматирование встроенной флэш-памяти ESP32
![](https://habrastorage.org/webt/8s/sa/uk/8ssaukuy4r4qmyrhfsrmtrjd1xe.png)
Кликните Tools -> ESP32 Sketch Data Upload. Далее во всплывающем окне кликните Yes, и программа отформатирует флэш-память микроконтроллера.
Некоторые платы удастся прошить без проблем, но, к сожалению, не все. Если вы правильно настроили IDE, установили драйверы, выбрали соответствующий порт и всё равно получаете ошибку
A fatal error occurred: Failed to connect to ESP32: Timed out waiting for packet header
, подключите на время прошивки к плате конденсатор 10мкФ. Плюс нужно кинуть на контакт EN микроконтроллера, а минус (обычно обозначен серой полоской) на GND.Не забудьте после прошивки конденсатор отключить.
▍ Шаг 7: генерация ключей
Для того чтобы сделать неавторизованную расшифровку ваших данных вычислительно нецелесообразной, важно генерировать собственные ключи и никогда не использовать их повторно.
![](https://habrastorage.org/webt/gf/fp/wy/gffpwyzresolhfyeuxscunkelr0.png)
Лучше всего генерировать случайные ключи с помощью броска 20-гранного кубика.
Если выпадает число от 1 до 9, запишите его.
Если выпало число от 10 до 15, запишите соответствующую ему букву:
10 = A;
11 = B;
12 = C;
13 = D;
14 = E;
15 = F.
Если бросок показал 20, пишите 0.
В других случаях ничего не пишите, а перебросьте кубик.
Можно пойти и более простым путём. Я изменил один из своих предыдущих проектов для работы в качестве генератора чисел. Генерируемый им вывод для меня выглядит «достаточно случайным», но тесты я не проводил, так что гарантировать полную случайность не буду. Используйте на свой страх и риск.
Для генерации ключей запустите в каталоге Untested RNG файл gen.exe, после чего кликните по кнопке «Generate keys for Cipherbox». При нажатии этой кнопки фон сменится с чёрного на синий.
▍ Шаг 8: получение MAC-адреса ресивера
![](https://habrastorage.org/webt/eg/e9/ma/ege9ma2_qbbn5znobwp6umm_68s.png)
Для получения MAC-адреса ресивера загрузите в ESP8266 следующий код:
#include <ESP8266WiFi.h>
void setup(){
Serial.begin(115200);
Serial.println();
Serial.println(WiFi.macAddress());
}
void loop(){
}
Затем откройте Serial Monitor и перезагрузите плату.
Если всё сделать правильно, в консоли должен отобразиться MAC-адрес. Для данной платы это
5C:CF:7F:FD:85:1D
.▍ Шаг 9: изменение прошивки
![](https://habrastorage.org/webt/fv/3z/rx/fv3zrxr2qks4mt-xzbb8wijwv9a.png)
Откройте файлы Firmware_for_ESP32.ino и Firmware_for_ESP8266.ino из каталогов Cipherbox-main\V1.0\Firmware_for_ESP32 и Cipherbox-main\V1.0\Firmware_for_ESP8266. В них нужно заменить мои ключи на те, что вы сгенерировали.
Хранилищу требуется шесть ключей, а ресиверу всего два. Убедитесь, что
projection_key
и proj_serp_key
на обоих устройствах совпадают.Не забудьте заменить MAC-адрес ресивера в строке
uint8_t broadcastAddress[] = {0x5C, 0xCF, 0x7F, 0xFD, 0x85, 0x1D}; //Receiver's MAC address
в файле Firmware_for_ESP32.ino.▍ Шаг 10: прошивка Arduino
Загрузите прошивку из каталога Cipherbox-main\V1.0\Firmware_for_Arduino на Arduino.
![](https://habrastorage.org/webt/9z/rt/go/9zrtgooauklsvdn-jczuy46zn_a.png)
▍ Шаг 11: прошивка ESP32
Загрузите прошивку из каталога Cipherbox-main\V1.0\Firmware_for_ESP32 на ESP32.
![](https://habrastorage.org/webt/cg/0s/3a/cg0s3adrvifiu2z4psxyvmf6l-m.png)
▍ Шаг 12: прошивка ESP8266
Загрузите прошивку из каталога Cipherbox-main\V1.0\Firmware_for_ESP8266 на ESP8266.
![](https://habrastorage.org/webt/h_/_7/yt/h__7yta08qf4ni6yml8jfq9rxsw.png)
▍ Шаг 13: сборка хранилища
Сборка хранилища сложностей вызвать не должна. На мой взгляд, труднее всего будет правильно подключить порт PS/2.
![](https://habrastorage.org/webt/pr/46/c9/pr46c9-ugtwkcebubo7t6vpa0vw.png)
▍ Шаг 14: схема хранилища
![](https://habrastorage.org/webt/lw/zw/if/lwzwifqzr67cwqkd8rybfpfz1gm.png)
▍ Шаг 15: сборка ресивера
Ресивер собирать ещё проще. Просто подключите дисплей к ESP8266.
![](https://habrastorage.org/webt/fb/ms/8g/fbms8gxlw8kcqervsqhbymlptbk.png)
▍ Шаг 16: схема ресивера
![](https://habrastorage.org/webt/ff/-9/uo/ff-9uog01ayswbcpkvqizu5qotq.png)
▍ Шаг 17: запитывание хранилища и считывание четырёх RFID-карт
Хорошо, пришло время разблокировать хранилище. Запитайте его и поочерёдно поднесите к нему четыре RFID-карты. Подносить их каждый раз нужно в одном и том же порядке, в противном случае расшифровать информацию не получится.
Важно: если вы хотите перезагрузить ESP32, перезагружайте все платы. Если же вдруг перестанет корректно работать клавиатура, перезагрузите только Arduino Uno.
▍ Шаг 18: авторизация в хранилище
При первом вводе нового имени пользователя и пароля этот процесс можно назвать «регистрацией, сопровождаемой авторизацией». Во всех остальных случаях это будет просто авторизация.
![](https://habrastorage.org/webt/fw/e9/4t/fwe94ttlcllzili8huys0srma4c.png)
![](https://habrastorage.org/webt/qm/jr/8x/qmjr8xiciti1ab0wbb2hsnw6dme.png)
![](https://habrastorage.org/webt/uu/ew/oj/uuewojzeyq3b5dwsao5pdphaqna.png)
Здесь вы вольны ввести любое имя пользователя и пароль, только храните их в тайне. Я объясню почему. Имя пользователя определяет имя базы данных, которая будет использоваться для хранения ваших заметок, а пароль используется в процессе генерации ключа.
Если атакующий узнает имя пользователя, то сможет удалить все ваши учётные записи и заметки. Если же он узнает ещё и пароль, то сможет расшифровать всю информацию.
В случае если вас не интересует хранилище, и вы хотите использовать только шифры, то можете авторизовываться под любым именем пользователя или оставлять это поле пустым. Только всегда вводите один пароль, иначе данные расшифровать не удастся.
Для переключения между полями используйте «Tab». Текущее поле обозначается подписью снизу. Когда закончите ввод, жмите «Enter» для входа в хранилище.
Для пароля
1234567890-=qwertyuiop[]asdfghjkl;'zxcvbnm,./LKJHGFDSA?><MNBVCXZ+_(*&^%$#@!
я получил верификационный номер 6117.После попадания в главное меню — управление следующее:
- клавиша ↓ для перемещения вниз.
- клавиша ↑ для перемещения вверх.
- клавиши ← и → изменение режима AES.
▍ Шаг 19: шифрование текста
Откройте Serial Monitor и установите скорость в бодах на 115200, так как шифротекст будет выводиться в Serial Monitor.
![](https://habrastorage.org/webt/v-/ld/4-/v-ld4-gduwqqfek15bybjrpxoio.png)
![](https://habrastorage.org/webt/zi/nj/x4/zinjx4o2nizyb5qfnsasibthwiy.png)
![](https://habrastorage.org/webt/wb/zt/bk/wbztbkrjo95ie9acdgyegz3he9q.png)
Для шифрования текста выберите в меню нужный алгоритм и нажмите на клавиатуре “1”. После этого введите целевой текст и нажмите “Enter”.
Вот что получилось у меня:
Открытый текст:
Cipherbox is what I consider to be a cryptographic swiss knife. The existence of this device wouldn't've been possible without a lot of open source code that I've found on the Internet and put together.
Шифротекст:
4c31cfb14b75d0ba0902f1c5fc243471dab7dca6e94fd89d07936b969bff63980311223bd62d9cf4d012235cf308e41c3c431f2e1ca78e3778341cc7ed21d2dd0f878187ff15d34fa42f8ede7c490ee3a18d81beed0599df1d4ad8619abef667ae5ba9cec776dc348e532e61f448c74883a2cd54c6f583ca3d10d01d2a2dd7bb682c8c2b579fec10a93772324e39db0afa09667b0b4b3631d033690b9868a32ccce7592bafb4280d46b3aa6ad44c0f51749fd7d7698944286342c9107690f90b0021d0d87ae831298f9f89dfc486b8f2d4ed36d901fa602a13fb7f9f7086fcd0f2da1ab23d65dc1cf87dd3eecff73a97d90ea16528d1a42f9d74bc7e2f742c80c2ba820f0195318eb680ffa7e69ca00a0c142f4edc05815412f58a9a5056a8620fc79e521c658d3865411baf1f41bfa88370124a400f36b4ae1dfa5e09036d22c9696c42faa7ec0020f9a9f417de42c04d60d92c941e7aa3f8f5aa305840de88a9b866e3b99966f556b45482c3c7b889db214fa642b395f61d64ddae03142742dc1e4c5300559bf9157af0c4ce3922d0f3843398a6ecbb2cb5eafd679f4ee814bfb7e3d675e16bc1c27cf8f97438454836a1ce806243da42292428f9e82e73eb5bcb55c45f55550cb0bce6b909bbd2f47fe2946c82148a12a4a28ed6d4fa435c6f6bd1cfa0961fd76ac3a23d7bfcfe3aad723e5898821ad4f6fb6a966b37e5343e028ceac0d562954ad7346d1d4ea04ed573feeeb3e4707e06f41777e7e77172caef4039b2c8a6f08e87f93a528d3591d3e90406a3bbf5ce4da651a129529c92c99da7c63d41b6ee645ebaa664950259f02f9e102a563d676cfc091371dd87321f3f99033399edb02631ddeb973801f1e310bbf4ca9a1aaec375a104baaddb3e0f0992b306a34db3505feb199c2e823f9e7f32cf42ea43d24dc494bd66e6bb9eca4f956a63195c17c7b6d1f345e4a0bcc50373d1d610fe143fa96046234832c62f58438242ac845fcbc00dccc121da6a902f53e467b7df936d3eed47da7548c92df0498d143db4a2a00cb1e8390b64a95f6f38c593b9e3e8587e88d1696ab52b71caa14d2d20fc7829b329c098ce87b576efdd761dd9e4a5d8fb0f1a6f9dab0bb28c5595fcb928215bc3e67695096de5c2107da3de17d49c436abc600eb58341
▍ Шаг 20: расшифровка текста
![](https://habrastorage.org/webt/ss/ic/uk/ssicukpyzdcadlcgoqqzgx1s-60.png)
Откройте Serial Monitor и установите скорость в бодах на 115200, поскольку шифротекст нужно будет вставлять в Serial Monitor.
Для расшифровки выберите в меню алгоритм, который использовался для шифрования, и нажмите “2”. После этого вставьте шифротекст в Serial Monitor и нажмите “Send”.
Вот мой результат:
Шифротекст:
4c31cfb14b75d0ba0902f1c5fc243471dab7dca6e94fd89d07936b969bff63980311223bd62d9cf4d012235cf308e41c3c431f2e1ca78e3778341cc7ed21d2dd0f878187ff15d34fa42f8ede7c490ee3a18d81beed0599df1d4ad8619abef667ae5ba9cec776dc348e532e61f448c74883a2cd54c6f583ca3d10d01d2a2dd7bb682c8c2b579fec10a93772324e39db0afa09667b0b4b3631d033690b9868a32ccce7592bafb4280d46b3aa6ad44c0f51749fd7d7698944286342c9107690f90b0021d0d87ae831298f9f89dfc486b8f2d4ed36d901fa602a13fb7f9f7086fcd0f2da1ab23d65dc1cf87dd3eecff73a97d90ea16528d1a42f9d74bc7e2f742c80c2ba820f0195318eb680ffa7e69ca00a0c142f4edc05815412f58a9a5056a8620fc79e521c658d3865411baf1f41bfa88370124a400f36b4ae1dfa5e09036d22c9696c42faa7ec0020f9a9f417de42c04d60d92c941e7aa3f8f5aa305840de88a9b866e3b99966f556b45482c3c7b889db214fa642b395f61d64ddae03142742dc1e4c5300559bf9157af0c4ce3922d0f3843398a6ecbb2cb5eafd679f4ee814bfb7e3d675e16bc1c27cf8f97438454836a1ce806243da42292428f9e82e73eb5bcb55c45f55550cb0bce6b909bbd2f47fe2946c82148a12a4a28ed6d4fa435c6f6bd1cfa0961fd76ac3a23d7bfcfe3aad723e5898821ad4f6fb6a966b37e5343e028ceac0d562954ad7346d1d4ea04ed573feeeb3e4707e06f41777e7e77172caef4039b2c8a6f08e87f93a528d3591d3e90406a3bbf5ce4da651a129529c92c99da7c63d41b6ee645ebaa664950259f02f9e102a563d676cfc091371dd87321f3f99033399edb02631ddeb973801f1e310bbf4ca9a1aaec375a104baaddb3e0f0992b306a34db3505feb199c2e823f9e7f32cf42ea43d24dc494bd66e6bb9eca4f956a63195c17c7b6d1f345e4a0bcc50373d1d610fe143fa96046234832c62f58438242ac845fcbc00dccc121da6a902f53e467b7df936d3eed47da7548c92df0498d143db4a2a00cb1e8390b64a95f6f38c593b9e3e8587e88d1696ab52b71caa14d2d20fc7829b329c098ce87b576efdd761dd9e4a5d8fb0f1a6f9dab0bb28c5595fcb928215bc3e67695096de5c2107da3de17d49c436abc600eb58341
Открытый текст:
Cipherbox is what I consider to be a cryptographic swiss knife. The existence of this device wouldn't've been possible without a lot of open source code that I've found on the Internet and put together.
▍ Шаг 21: добавление учётной записи
Для добавления учётной записи выберите в меню “Login” и нажмите “1”. Далее введите название, имя пользователя, пароль и сайт. Для перехода к следующему окну нажмите “Enter”.
![](https://habrastorage.org/webt/9e/ud/k8/9eudk87v0v3cjoqj6rgqvzvomkg.png)
![](https://habrastorage.org/webt/oq/yb/cy/oqybcyf_qouebdtrpjkti-xonfq.png)
![](https://habrastorage.org/webt/cs/pn/cd/cspncdlgiu2lpaooedeqbf_coei.png)
![](https://habrastorage.org/webt/m6/vj/xn/m6vjxnv2g8gm8o2ymaibcv4k58o.png)
![](https://habrastorage.org/webt/pr/iy/kw/priykw_y_4chg4y9kdr0pbfnchk.png)
![](https://habrastorage.org/webt/-7/ck/cy/-7ckcynmerhxkuwjvi7xf5cyszu.png)
Как показали тесты, которые я провёл во время разработки предыдущих проектов, ESP32 может без проблем зашифровать/расшифровать запись длиной 700 символов. Так что технически вы можете вводить в каждое поле каждой категории 700 символов.
▍ Шаг 22: просмотр списка всех учётных записей
Для просмотра всех учётных записей выберите в меню “Login” и нажмите “5”. В результате отобразятся все названия с именами пользователей. Если все учётные записи на экран не входят, всегда можно открыть Serial Monitor и просмотреть их там.
Я добавил в список ещё одну запись.
![](https://habrastorage.org/webt/8z/nz/dv/8znzdv-lruihw56lq6q0pdbndve.png)
▍ Шаг 23: просмотр учётной записи
Для просмотра учётной записи выберите в меню “Login” и нажмите “4”. Перед вами отобразятся все названия под номерами. Для просмотра отдельной записи введите её номер на клавиатуре и нажмите “Enter”.
![](https://habrastorage.org/webt/2j/jk/-q/2jjk-qvydkibk0npyjx5wbxc1xo.png)
![](https://habrastorage.org/webt/7i/tg/lg/7itglgcyzlcswjp6fqnttc5439e.png)
Функция “Remove” работает в точности так же, как просмотр, но вызывается с помощью “2”.
▍ Шаг 24: редактирование учётной записи
Чтобы отредактировать учётную запись, выберите в меню “Login” и нажмите “2”, отобразятся все названия с номерами. Для изменения записи введите её номер и нажмите “Enter”. После этого введите новый пароль и снова нажмите “Enter” для сохранения. Для отмены используйте “Esc”.
![](https://habrastorage.org/webt/ji/r8/wq/jir8wqdrkflzgpbmt3lt1ebcy4o.png)
![](https://habrastorage.org/webt/j4/4l/fq/j44lfqiea01rrn5a4y8kdgrevrk.png)
![](https://habrastorage.org/webt/n4/zr/gr/n4zrgrkrswivuwi0gf9x8hhmvuq.png)
▍ Шаг 25: отправка текста на ресивер
Cipherbox даёт возможность безопасно отправлять текст на расстояние до 200 метров.
Для отправки нажмите “Tab”, введите текст, который хотите передать и нажмите “Enter”. Мне удалось без проблем отправить сообщение из 84 символов. Полученный текст также отображается в Serial Monitor.
![](https://habrastorage.org/webt/ow/aa/kn/owaaknoogics2-jtkfmnontsklq.png)
![](https://habrastorage.org/webt/oj/xv/b-/ojxvb-coi_lovnmvql1kyutp9w8.png)
Внимание!!! Ресивер уязвим для атак повторением (когда атакующий повторно отправляет перехваченные ранее пакеты). Поэтому либо храните прошивку и обе ESP подальше от любого, кто не должен иметь к ним доступа, либо не отправляйте таким образом особо чувствительную информацию.
Я нахожу это самым слабым местом устройства, так что будьте осторожны.
▍ Шаг 26: поиск удачного применения Cipherbox
![](https://habrastorage.org/webt/ym/js/uf/ymjsufe_jc4ahrm1xoyoewzwk9c.png)
![](https://habrastorage.org/webt/mw/-s/33/mw-s33_kpxdh0wkpm6xd_7fpcku.png)
![](https://habrastorage.org/webt/bk/7f/58/bk7f58k5qpm9jkanv_hc4sysi7q.png)
![](https://habrastorage.org/webt/td/m7/92/tdm792mrbgwrz-srp6g57gswtou.png)
![](https://habrastorage.org/webt/v-/ld/4-/v-ld4-gduwqqfek15bybjrpxoio.png)
![](https://habrastorage.org/webt/k7/zw/if/k7zwifwnkepvg5_7dbkcu4z1zzo.png)
![](https://habrastorage.org/webt/kt/jv/jw/ktjvjwgkxmlzlu2cszlkqsk0h_8.png)
![](https://habrastorage.org/webt/hf/4y/p6/hf4yp6cuptxlgozqalyxwkw-1ie.png)
![](https://habrastorage.org/webt/19/uw/jr/19uwjrcqih2ua7go1pytkekmrqe.png)
![](https://habrastorage.org/webt/bd/yf/ey/bdyfeygrykqe2wvploqyutzhkbg.png)
![](https://habrastorage.org/webt/pe/-z/97/pe-z97nedjw2fjdxyhvyaelr454.png)
Я постарался сделать Cipherbox максимально безопасным и полезным устройством.
Он содержит 6 алгоритмов шифрования (на деле их 14, если посчитать 3 режима AES у 4-х из них). Кроме того, он предоставляет хранилище, защищаемое паролем и четырьмя RFID-картами, а также вполне приемлемый графический интерфейс. Так что теперь решение о его применении за вами.
![](https://habrastorage.org/webt/ou/g5/kh/oug5kh6sjydt9llengsiebnp40w.png)
Комментарии (24)
saipr
10.07.2022 13:47+5Он содержит 6 алгоритмов шифрования (на деле их 14, если посчитать 3 режима AES у 4-х из них).
Это с каких пор режимы шифрования вдруг стали самостоятельными алгоритмами шифрования?
И настораживает заключение:постарался сделать Cipherbox максимально безопасным и полезным устройством.
garwall
10.07.2022 13:57+5и супершифрование не ослабляет ли стойкость?
Moraiatw
11.07.2022 06:17+1Не ослабляет, доказано криптографами. Другое дело, что
супершифрованиекаскадный шифр делается совсем по другому.Zhuravlev-A-E
12.07.2022 13:42+1Можете ссылкой на док-во поделиться?
Moraiatw
13.07.2022 08:08Сейчас уже не вспомню, где читал.
Смысл такой: стойкость каскадного шифра не может быть ниже самого стойкого из составляющих криптопримитивов. Если какой -то из составляющих криптопримитивов в будущем будет взломан, общая стойкость будет держаться за счет остальных.
EighthMayer
10.07.2022 16:21+9Забавная игрушка и не более того. Ключи хранятся во flash, при этом он даже не закрыт от чтения. Всё устройство - одна сплошная дыра в безопасности, собранная по принципу "ну если выглядит сложно значит наверное секурно".
AllSystemsMalfunction
10.07.2022 18:20+3Не раскрыта тема наличия уязвимости в самом esp32
Прятать esp не считаю вариантом: это примерно как - котенок гав «спрятал» котлету
agalakhov
10.07.2022 19:25+2Мы в подобном алгоритме ключи шифрования вытаскивали непосредственно из флеш-памяти, немножко кое-чего попаяв на плате. "Защита от считывания" у флеша микроконтроллеров легко обходится, если внимательно изучить документацию. Там полно дыр.
Никакой алгоритм шифрования, основанный на одних лишь симметричных шифрах, не может быть секьюрным. Абсолютно необходима криптографическая схема генерации и хранения самих ключей.
Moraiatw
11.07.2022 06:11"Защита от считывания" у флеша микроконтроллеров легко обходится
Есть же фьюзы. Если не применять ультрафиолетовое сканирование кристалла (или как его там), то вполне себе защищают от внешнего считывания.
randomsimplenumber
10.07.2022 19:32+2Не совсем понятно, от каких именно атак эта система защищает. Для Неуловимого Джо конструкция выглядит избыточной.
VT100
10.07.2022 20:41Bright_Translate в очередной раз облажался с переводом русский-английский-русский, вместо того, чтобы пригласить автора в хабра-блог своих хозяев.
Barnaul
Hi, my name is Max. I'm a Computer Science student.
Aleksandr-JS-Developer
12.07.2022 22:151ab16 z1cj7 jy1da o4z1c j7jz1 dfigy 1e03a z1eod ay1dr klz1d i0pz1 dp84z 1d164 y1eqq lz1e2 g1z1d p84y1 clj6z 1d600 z1di0 pz1dr klz1d p84z1 cso9z 1eekg z1fbi 9z5i1 z5mo
Hidden text
русские символы only
Hidden text
символов в исходном тексте: 29
Hidden text
шифрование самопальное, на коленке, никаких ключей, 10 строк кода дешифровка, 11 - шифровка. без библиотек и магии.
Hidden text
таблица Юникод - наше всё)
pohjalainen
Так, стоп. Я ничего не понял:
зачем и кому нужно это устройство? Какую именно задачу оно решает?
какого рода информацию и в каком объеме на нем можно хранить? Про скорость как у аналогового модема - я осознал.
В чем прикол четырехкратного перешифрования? В отсутствие аутентификации и контроля целостности, кстати.
Если я возьму флэшку, зашифрую ее, допустим, штатными средствами LUKS, чем это будет хуже?
В чем прикол-то? Где какие-то инновации, новые решения, алгоритмы? Главное - ЗАЧЕМ?... Вопросы, вопросы...
И да. Перевод уровня "голый минимум" - это меметично.
pistoletov
я думал я один такой - ) тоже не совсем понял какие задачи решает это устройство. Хранилка паролей? как-то слишком много мк для одной такой задачи, как по мне это вполне можно реализовать как одно usb устройство на каком-нибудь stm32 с cypher аппаратным или программным на борту
kotandvla
Мне всегда была интересна идея написать шифратор хотя бы на двух и более алгоритмах, разработанных разными странами - именно с той точки зрения, чтобы информация была защищена от атак через какие-нибудь заложенные в алгоритм дыры.
SellerOfSmiles
Это такой способ защиты информации. Пока вы не понимаете что это и зачем это, вы не сможете это взломать. :)