PCB-бейдж, которого не будет, или как преодолеть все и проиграть на финише

Привет, Хабр! Мы живем в интересное время: дипфейки, торговые войны, политические игрища, Грета Тунберг, и если вам этого казалось мало, то получите-распишитесь за новинку — коронавирусную инфекцию COVID-19.

Распространение коронавируса повлияло и на нашу конференцию по практической кибербезопасности OFFZONE 2020. Ее пришлось перенести до лучших времен.

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

ief1rg3jsuf2w4pr1ndiyghyqqg.jpeg


Концепция: главный секрет бейджа

Чуть раньше мы успели приоткрыть завесу тайны над тем, каким должен был быть бейдж конференции OFFZONE 2020. Если кратко, то это:


  • PCB в роли носителя информации об участнике конференции,
  • идентификатор OFFCOIN-кошелька,
  • некоторая интеграция с DIY-зоной пайки,
  • возможность прокачки внешнего вида за счет установки Shitty Add-on«ов.


Но это еще не все секреты! Главную фишку бейджа мы задумали, когда узнали, что в рамках конференции OFFZONE 2020 пройдет финал соревнований по практической кибербезопасности CTFZone. За этим турниром собирались следить многие: победа на CTFZone определяет, кто отправится на DEFCON CTF и сразится с сильнейшими командами мира.

«А давайте транслировать текущее положение дел на CTF каждому посетителю конференции!» — предложила команда разработчиков бейджа. — «Такого еще никто не делал».

В CTF-соревновании участвует 10 команд. Постоянно кто-то кого-то атакует, кто-то защищается, кто-то выжидает удобного момента. Если всем командам выделить по одному RGB-светодиоду на плате, то каждое такое взаимодействие можно выразить в цветовом эквиваленте. Получится система из 10 RGB-светодиодов, состояние которых однозначно определяет текущий расклад сил на CTF.

Идея всем зашла, и мы принялись за работу.

bkwnve-yhv6p1h9okhl-xa6tqpy.jpeg

Прототип: от макета до рабочей модели


После непродолжительного этапа спагетти-инжиниринга (макетирования на отладках) дней за десять бейдж превратился в первый прототип на текстолите.

Именно во время макетирования возникла идея дополнить бейдж возможностью кастомизации при помощи Shitty Add-on Connector и самодельных аддонов. Ходили бы участники конференции все с уникальными бейджами, красота!

Для интересующихся опишем компонентную базу нашей PCB.


  • Сердцем бейджа служит довольно худой, но проверенный МК STM32F070R6P6 (ARM Cortex-M0 48 МГц, 32 КБ Flash, 6 КБ SRAM, корпус TSSOP20).
  • За светомузыку отвечает десяток RGB-светодиодов WS2812B.
  • Модуль приемопередатчика NRF24L01 обеспечивает прием сообщений по радио.
  • Некоторая схема питания и обвяз из резисторов-конденсаторов.
  • Ну и по традиции питается все от 4 батареек ААА.


Возможностей МК STM32 как раз хватало на реализацию функциональности OFFCOIN-кошелька, управление светодиодами и обработку радиосообщений.

_bvijjfrtwzhdcxqc89uegejshg.png

Прототип оказался более чем рабочим и вселял радость в наши души веселым перемигиванием светодиодов. Рядом с каждым светодиодом на PCB расположили лого команды — участницы CTF: горит светодиод красным — эта команда атакует, зеленым — защищается, синим — затаилась и к чему-то готовится. Все это было готово уже к началу февраля…

… Когда мы узнали, что из-за мер по нераспространению COVID-19 к нам не смогут приехать 2 зарубежные команды.

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

Софт и промышленный дизайн: пого-пины великолепны


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

Про софт мы рассказывать особо не будем. Не потому, что тайна, а потому, что там нет ничего интересного. На бейдже HAL-драйвер без ОСРВ, WS2812B управляется при помощи таймера и ШИМ-генерации, OFFCOIN-кошелек реализован через PKI, какой-то драйвер NRF24. Ничего интересного. Поверьте.

А вот с инфраструктурой мы заморочились.

Задача 1: сделать из бейджа удобный кошелек. Первая большая задача, которую нужно было решить, — обеспечить быстрое и удобное пополнение баланса кошелька OFFCOIN.

На OFFZONE 2019 передача идентификатора кошелька OFFCOIN была бесконтактной: мы использовали ИК-приемник на считывателе и ИК-передатчик на бейдже. Эта система работала, но медленно, причем только при запитанном от батареек или USB бейдже и только если пользователь верно подобрал угол наклона спины и величину изгиба шеи по отношению к ИК-приемнику. Быстрота и удобство — это было не про прошлогодний бейдж.

В этом году все серьезнее! Платежная система стала контактной и может сама подать питание на бейдж. Интерфейс кошелька теперь UART, а само физическое подключение хитро спроектировано: за контакт между считывателем и платой бейджа отвечают пого-пины.

Пого-пины — это такие удобные подпружиненные контакты, которые обычно используют для установки временного электрического соединения. На специально разработанной плате считывателя установлены 4 таких контакта, а на самом бейдже сделаны 4 контактные площадки: TX, RX, 3V3 и GND. Так что теперь для соединения со считывателем достаточно нужным местом приложить плату бейджа к пинам и немного подержать в таком положении.

bl9w0rcb8cnaty-egzo5ehq76rk.jpeg


Еще мы зарядились парой умных статей на тему промдизайна и изобрели свой собственный корпус для считывателя. Первый дизайн-минутку накидали на клочке бумаги в обеденный перерыв. Дальше — полдюжины итераций на 3D-принтере и термоклей, в лучших традициях прототипирования.

Здесь пришлось изрядно помучиться с подбором величины зазоров и толщины стенок корпуса. Почему? Потому что дизайн с бумажки надо было сразу перенести в САПР и человеческий чертеж, а не лепить с ходу в Tinkercad. Одно отверстие подвинул, другое забыл… Но зато теперь у нас есть гора прототипов и финальный дизайн корпуса.

Корпус получился довольно удобным. Теперь не нужно корячиться перед считывателем: вставляешь бейдж в корпус, он сам центрует плату, как нужно, и надежно удерживает ее в себе. За это отвечают два захвата-ограничителя и борт, повторяющий контур нижней части платы. А благодаря интерфейсу UART, который намного надежнее и быстрее ИК, сам процесс обмена данными кошелька теперь занимает доли секунды.

qtdpw2enwzunnoy0wtahpayflds.jpeg


Задача 2: обеспечить максимальную зону покрытия для NRF24. У нас был план помещения и были данные, насколько эффективно в помещении передает и принимает NRF24. От нас требовалось рассчитать, где и как нужно понатыкать передатчиков, чтобы на территории конференции не было мертвых зон и бейджики всегда транслировали актуальную информацию о CTF.

Это оказалось несложно. В качестве передатчика мы выбрали одноплатник Raspberry PI и тот же NRF24. Чтобы не плодить два десятка малин с макетными проводами и NRF, мы сделали собственный шилд. Он рассчитан на подключение всевозможных типов модулей NRF24 и имеет пару светодиодов для индикации состояния малины. Оставалось только на месте проверить зону покрытия передатчиков и при необходимости подкорректировать расчеты.

uipwokekhdpb6gstqk5a-c_o54k.jpeg

Закупка компонент: что делать, когда все идет не так


До этого момента подготовка бейджа шла в целом гладко. Все изменилось, когда мы приступили к закупке компонент и заказу производства плат.

Проблема 1: коронавирус в Китае. По опыту предыдущего года мы помнили, как важно заранее договориться с поставщиками и заводами. Мы и договорились.

А потом случилось то-о-чем-все-знают. Из-за ограничения экспорта и простоя производства в Китае половина поставщиков электронных компонент извинялась и просто разводила руками, не называя никаких сроков. Вторая половина рисовала ×2—×3 от подходящего нам срока.

Та же история с производством плат: два месяца или около того на производство и доставку. С учетом монтажа к OFFZONE 2020 мы не успевали…

По совету коллег-инженеров попробовали обратиться через посредников на один завод в Латвии. Но там сказали ласковое «nē» («нет» по-латышски), как только узнали, что нам нужно произвести 40+ квадратных метров текстолита.

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

На двадцатом кругу обзвона всех возможных подрядчиков, ценой колоссальных нравственных и моральных страданий личного состава BI.ZONE, ценой слез бородатых инженеров нам удалось договориться о производстве печатных плат и поставке почти всех компонент так, что к OFFZONE 2020 мы бы успели. Впритык, но успели!

Проблема 2: неуловимые NRF24L01. Увы, с закупкой радиомодулей NRF24L01 нам так не повезло.

Изначально в проект PCB мы закладывали возможность использования двух разных модулей NRF с PCB-антенной: стандартного форм-фактора и его компактной версии NRF24L01 mini.

Однако контрагент, который взял на себя обязательства по поставке, в последний момент слился. Чтобы не сорвался монтаж, надо было за 5–6 дней найти нового поставщика — или придумать что-то еще.

Отчаянные времена требуют отчаянных мер. Мы не рискнули надеяться только на успех поисков и параллельно воспользовались первой заповедью DIY-щика: чего-то нет — сделай сам! Ну или скопируй у того, кто поумнее. В контексте NRF24 умнее, чем инженеры самого Nordic Semiconductor, вряд ли кто-то найдется. В даташите на NRF24L01 мы отыскали пример рекомендуемой схемотехники и PCB.

covs0duzbwflw9xkumizq31dlms.png


Этот же пример легко нашелся и в виде PCB-проекта Altium. Мы быстро изменили тип подключения с header 2×4 2,54 мм на необходимые нам 8 металлизированных полуотверстий 1,27 мм. Компоненты, полигоны, переходные, проводники и прочее оставили строго без изменений.

Итак, пока одни коллеги обрывали телефоны поставщикам электроники, другие в режиме ошпаренной кошки заказывали производство PCB и компоненты для десятка самодельных модулей. Через несколько дней все получили на руки и собрали. Удивительно, но заработало как надо! 3 из 3 собранных плат показали прекрасные результаты в тестах на прием и передачу.

Результаты оказались однозначно не хуже, чем у покупных изделий. Доктор Дью носа бы не подточил. И это даже с учетом некоторого упрощения технологического процесса: во имя ускорения производства мы отказались от рекомендуемого покрытия плат эмиссионным золочением.

Хотя помучиться со сборкой модулей все-таки пришлось. По неизвестным нам причинам инженеры Nordic в качестве контакта к паду земли (корпус у микросхемы трансивера QFN20) использовали не вскрытие в маске платы, а три переходных отверстия. Да и посмотрите на футпринт пассива: паять компоненты 0402, контактные площадки которых расположены спина к спине без зазора паяльной маски, — то еще удовольствие.

omf2_20dqifjtsxlsbbtz7wzr1k.jpeg


Впрочем, паять большую партию пришлось бы не нам, а бездушным машинам на производстве.

… Если бы не одно обстоятельство: в последний момент нашелся поставщик из Белоруссии, который выручил нас необходимым количеством модулей NRF24L01 mini.

Все тщетно


Со многим может справиться инженер. Даже нехватка ключевых компонент, как оказалось, его не остановит. Но когда теряет смысл сама концепция продукта, инженеру ничего не остается, как начать с чистого листа.

Наблюдая за развитием ситуации с распространением COVID-19, мы приняли трудное решение: OFFZONE 2020 нужно перенести. А вот CTFZone, как отборочный этап DEFCON CTF, откладывать нельзя (и мы проведем его в онлайн-режиме в конце апреля).

К сожалению, это хоронит идею бейджа, который транслирует действия СTF-команд.

Текстолит уже сделан, и теперь у нас на руках 10 000 электронных компонент и железок. На подходе еще 1 000 000. Увы, они никогда не увидят свет.

Что-то кончается, что-то начинается


Унывать — не наш стиль. Команда разработки бейджа резко перешла из режима горения в режим охлаждения, но лишь для того, чтобы с новыми силами взяться за генерацию безумных идей бейджа для OFFZONE 2020 v. 2.0!

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

Если у вас есть какие-либо идеи или пожелания, то делитесь ими — постараемся совместными усилиями воплотить их в жизнь. Следите за новостями и не чихайте!

© Habrahabr.ru