Информационный портал по безопасности » Железо » Сделай Сам » Создаем USB Mass Storage Device(флешка) на PIC18F4550 с аппаратным шифрованием(опционально-маскированием)

 

Создаем USB Mass Storage Device(флешка) на PIC18F4550 с аппаратным шифрованием(опционально-маскированием)

Автор: admin от 20-01-2012, 14:07, посмотрело: 8 017

Вступление

Однажды возникла довольно-таки интересная идея одного девайса.

Сразу оговорюсь, что уже получены патенты на изобретение и промышленный образец, поэтому приветствуется лишь реализация «для себя».

Идея:

  • Флэшки, которые мы используем работают по какому-то протоколу. Наверняка его описание можно найти, изучить и понять, что помимо данных есть служебные команды.
  • Ясное дело, что внутри флэшки находится контроллер и он обрабатывает команды от хоста и записывает данные в память.
  • Но мы же можем записывать не так, как нам приказал хост.
  • Таким образом мы можем проводить аппаратное шифрование(в более простом случае-маскирование) на уровне БИТОВ.
  • Сам я программист и с такими вещами сталкивался постольку-поскольку. Однако идея показалась мне достойной, и я решил во что бы то ни стало реализовать хотя бы прототип. Собственно, о нем и пойдет речь; приглашаю всех под кат. [Картинки!]

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

    Создаем USB Mass Storage Device(флешка) на PIC18F4550 с аппаратным шифрованием(опционально-маскированием)

    Итак, требования к устройству:

  • Plug`n`Play. Я хочу, чтобы я мог просто вставить его в USB, набрать код на корпусе и всё. Никакого геммороядрайверов/софта.
  • Расширенные индикаторы состояния. Я хочу видеть, как работает устройство. подробнее про ссостояния — ниже.
  • Теория

    Для реализации этой штуки пришлось очень долго вкуривать мануалычитать документацию на официальном сайте USB.

    Теория непростая и тонкостей здесь очень много, поэтому ниже я приведу лишь выдержки из поста, который я указал ниже в источниках. Это позволит примерно понять, о чем дальше будет идти речь.

    «MSD или Mass Storage Class это ничто иное, как один из стандартных классов USB для описания и взаимодействия с утройствами хранения информации. Реализаций и стандартов MSD довольно много и заморачиваться на каждом из них нет смысла. Опишу самый распространенный из них(он же самый простой на мой взгляд): Bulk-only или BBB.

    В стандарте USB есть такое понятие, как конечная точка(end-point). Конечная точка — это часть USB-устройства, которая имеет уникальный идентификатор и является получателем или отправителем информации, передаваемой по шине USB. Проще говоря, это буфер, сохраняющий несколько байт. Обычно это блок данных в памяти или регистр микроконтроллера. Данные, хранящиеся в конечной точке, могут быть либо принятыми данными, либо данными, ожидающими передачу. Хост также имеет буфер для приема и передачи данных, но хост не имеет конечных точек.

    Конечная точка имеет следующие основные параметры:

  • Частота доступа к шине
  • Допустимая величина задержки обслуживания
  • Требуемая ширина полосы пропускания канала
  • Номер конечной точки
  • Способ обработки ошибок
  • Максимальный размер пакета, который конечная точка может принимать или отправлять;
  • Используемый конечной точкой тип посылок
  • Направление передачи данных
  • Любое USB-устройство имеет конечную точку с нулевым номером (Endpoint Zero). Эта точка позволяет хосту опрашивать устройство с целью определения его типа и параметров, выполнять инициализацию и конфигурирование устройства.

    Кроме нулевой точки, устройства, обычно, имеют дополнительные конечные точки, которые используются для обмена данными с хостом. Дополнительные точки могут работать либо только на прием данных от хоста (входные точки, IN), либо только на передачу данных хосту (выходные точки, OUT). Число дополнительных конечных точек устройств определяется режимом передачи.

    Для низкоскоростных устройств допускается наличие одной или двух дополнительных конечных точек, а для высокоскоростных — до 15 входных и 15 выходных дополнительных точек.

    Но это только теория, которая выглядит довольно абстрактно. Будем считать, что конечная точка, это ничто иное как фунция в языке C, которая только принимает параметры, или только возвращает значения.

    Так вот, мы строим устройство, отвечающее спецификации bulk-only. И тут самое приятное: все события делятся на три фазы:

    Прием команды от хоста(копьютера)(CBW)

    Прием/Передача запрашиваемых данных(DATA)

    Передача хосту результата выполнения принятой комманды(STATUS)»

    Создаем USB Mass Storage Device(флешка) на PIC18F4550 с аппаратным шифрованием(опционально-маскированием)

    Информации на эту тему огромная куча. Именно описания протокола. В конце статьи я постараюсь дать самые весомые ссылки на эту тему. Стоило добавить немного информации о тех самых командах, но тем, кто захочет реализовать что-то свое, внизу предлагаются исходные коды. Алгоритмы оттуда можно подергать как делать нечего.

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

    Аппаратная часть

    Были долгие попытки реализовать это на Arduino, просто AVRках(8bit). Чтобы сэкономить кучу времени тем, кто сейчас занимается этим же самым пишу большими буквами: НЕ ПЫТАЙТЕСЬ, ЛИШЬ ПОТЕРЯЕТЕ ВРЕМЯ.

    Имеет смысл использовать лишь те чипы, которые сами аппаратно поддерживают USB. Да и то, зависит от конкретной задачи. Требования к нашему проекту:

  • Микроконтроллер:
  • Аппаратное USB
  • SPI
  • Периферия:
  • Слот под SD/MMС
  • 4 светодиода
  • USB коннектор
  • Это минимум. Мне было дорого мое время и я решил приобрести отладочную плату USB-PIC-STK и программатор к нему Pic Kit 2.

    Дешевле всего это добро стоило в Терраэлектронике. Не сочтите за рекламу, но там НАМНОГО дешевле — платка всего 1300р.

    Внимательные хабровчане могли заметить, что на сайте OLIMEX есть пример MSD. Вот я так думал ошибался…

    Реализация

    Я не привожу здесь схем устройства и прочее по той причине, что для конечного устройства было сделано много изменений и схемотехника сильно изменена. Здесь же описывается прототип, а его схемы можно подергать с сайт OLIMEX.

    Первым делом я хотел заставить работать пример MSD. Он категорически отказывался работать как надо. Было сделано очень много изменений в коде, выкурены сотни мануалов, но оно таки заработало. Девайс определялся как флэшка и с ним можно было работать как с флэшкой. Это была почти победа. Далее переходим к самому интересному: меняем процедуры чтени и записи в память.

    for(index = 0; index < SDC_SECTOR_SIZE; index++) //Reads in 512-byte of data

    {

    buffer[index] = readspi();

    }

    на

    for(index = 0; index < SDC_SECTOR_SIZE; index++) //Reads in 512-byte of data

    {

    buffer[index] = readspi()+0x01;//profit!

    }

    И

    for(index = 0; index < 512; index++) //Send 512 bytes of data

    {

    writespi(buffer[index]);

    }

    на

    for(index = 0; index < 512; index++) //Send 512 bytes of data

    {

    writespi(buffer[index]-0x01);/profit!!

    }

    Я специально вырвал код из контекста. Это не DIY-статья, по крайней мере, не полноценная. Если кто-то захочет полную DIY-статью, я обязательно напишу. А сейчас остановимся на этом моменте. Это и есть реализация основной идеи записывать не то, что нам приказывает хост. А при чтении отправлять ему данные после обратного преобразования, таким образом, все довольны. Далее нужно дать волю вашей фантазии и творить. Я не буду приводить тот алгоритм, который использовал в конечном устройстве, пусть это будет для хороших умов десертом. Мне кажется, это был самый приятный момент во всем проекте.

    Далее я приведу фотографии и скрины работы прототипа.

    Результат

    Ниже приведены скрины с разных ОС, о том, как ведет себя в системе устройство:

    Создаем USB Mass Storage Device(флешка) на PIC18F4550 с аппаратным шифрованием(опционально-маскированием)

    Создаем USB Mass Storage Device(флешка) на PIC18F4550 с аппаратным шифрованием(опционально-маскированием)

    Создаем USB Mass Storage Device(флешка) на PIC18F4550 с аппаратным шифрованием(опционально-маскированием)

    А вот что будет если попытаться использовать флэш карту без криптера или неправильно указать ключ(в статье я о нем не упоминал и оставил прелесть реализации для вас):

    Создаем USB Mass Storage Device(флешка) на PIC18F4550 с аппаратным шифрованием(опционально-маскированием)

    Ну и буквально пара фото(все равно они есть на сайте OLIMEX):

    Создаем USB Mass Storage Device(флешка) на PIC18F4550 с аппаратным шифрованием(опционально-маскированием)Создаем USB Mass Storage Device(флешка) на PIC18F4550 с аппаратным шифрованием(опционально-маскированием)

    Послесловие

    Дорогие хабровчане! Это статья, которая была призвана заинтересовать тех, кто когда то хотел этим заняться и помочь тем, кто сейчас этим занимается. Я с удовольствием напишу DIY-статью, если это действительно кому то будет нужно. Я понимаю, что не раскрыл очень многого, но я надеюсь. что читать было интересно. Я отвечу на все возникшие вопросы и буду рад любой критике, потому как писака из меня негодный. Прошу прощения, если я кого-то только запутал — все разъясню в комментариях.

    В статье использовал цитату из этого поста.

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

    И как обещал, исходники под ту самую плату и среду разработки MPLAB IDE и компилятор C18

    тыц

    Спасибо за внимание.

    P.S. Может, лучше в другой блог какой перенести? Все-таки не DIY





    Категория: Железо / Сделай Сам

    Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
    Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.
    <
    • Публикаций: 0
    • Комментариев: 0
    • ICQ: {icq}
    15 июля 2013 10:26

    Александр

    Цитата
    • Группа: Гости
    • Регистрация: --
    • Статус:
     
    Ну такие флешки давно выпускают -причем уже и у нас в рф можно купить www.usbparol.ru/fleshka-datashur.html


    Добавление комментария

    Имя:*
    E-Mail:
    Комментарий:
    • bowtiesmilelaughingblushsmileyrelaxedsmirk
      heart_eyeskissing_heartkissing_closed_eyesflushedrelievedsatisfiedgrin
      winkstuck_out_tongue_winking_eyestuck_out_tongue_closed_eyesgrinningkissingstuck_out_tonguesleeping
      worriedfrowninganguishedopen_mouthgrimacingconfusedhushed
      expressionlessunamusedsweat_smilesweatdisappointed_relievedwearypensive
      disappointedconfoundedfearfulcold_sweatperseverecrysob
      joyastonishedscreamtired_faceangryragetriumph
      sleepyyummasksunglassesdizzy_faceimpsmiling_imp
      neutral_faceno_mouthinnocent