Об одной ошибке

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

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

    Эта история произошла в середине 90-х годов. Я учился на 4-ом курсе КАИ, попутно подрабатывая на кафедре ПМ. Помню, что я писал что-то на FoxBase для одного из местных «свечных заводиков», совместно с несколькими сотрудниками института. Сама работа на кафедре способствовала тому, что я постоянно был на виду и, в один прекрасный момент, мне предложили поучаствовать в новом проекте, связанным с разработкой «железа», занимающегося криптографией. Разумеется, я согласился.

    Конечно, все было не так просто
    Мне дали задание. Подробно рассказали о разработанном Устройстве и попросили подготовить его описание для надвигающейся выставки. За одну ночь работы в институте (дома у меня тогда никакого компьютера, конечно, не было), на Turbo Pascal-е с ассемблерными вставками я подготовил «презентацию» с EGA-видеоэффектами, кучей текста и картинками, нарисованными Line-ами и Fill-ами. Потенциальный Работодатель слегка офигел от проявленного мной трудолюбия и вопрос о моем трудоустройстве был решен положительно.

    Наша группа состояла из пары вполне квалифицированных криптологов, электронщиков и программистов. Я, как молодой специалист, занимался HAL-ом. Ничего особенного, C++ и немного x86-го ассемблера. В последующем, мы, всей группой, весьма удачно трудоустроились в РЦИ НБ РТ.

    Вот как выглядело одно из наших изделий (ISA-карта со съемным ключем):



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

    Соединялось все следующим образом:



    Внутри ключа располагалась обычная ПЗУ-шка:



    При выполнении шифрования, из ПЗУ, по заданному адресу в Устройство считывались 16 байт ключа (подряд), после чего, на основании этого ключа и случайной синхропосылки, генерировалась гамма, используемая для шифрования. Сам ключ на ПК никогда не передавался.

    Не помню уже кому пришло в голову (возможно, что и мне), что если выбирать ключ из ПЗУ не подряд, а побайтно (управляя выборкой каждого байта), то, при помощи всевозможных перестановок, ключей можно получить значительно больше. Это была действительно ужасная идея. Тихо и незаметно в архитектуре аппаратно-программного комплекса образовалась дыра, позволяющая программно читать содержимое всего ПЗУ ключа.

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

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

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

    Этой небольшой статьей я хочу предостеречь Читателя от легкомысленного отношения к вопросам, связанным с криптографией. Криптография коварна и уязвимости легко могут возникнуть там, где их меньше всего ждешь. Вместе с тем, я не призываю «не профессионалов» к отказу от использования криптографии, подобно тому как это делается в этой статье.

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

    Подробнее
    Реклама

    Комментарии 45

      0
      Каким образом уязвимость была устранена?
        +1
        Убрали возможность побайтной загрузки ключа. То есть вернулись к первоначальному варианту.
          0
          а какой общий объём ключа? сколько раз можно было пользоваться этим устройством безопасно?
            +1
            Я уже честно говоря не помню общий объем (десятки килобайт точно, возможно сотни, можно посмотреть сколько памяти у этой микросхемы, использовали всю). Там, упрощенно, была такая схема: Для первого пользователя забивали всю ПЗУ случайными данными. Если следующий пользователь должен был быть связан с первым, первые 16 байт повторяли из первого ключа (и они становились их общим ключем), остальное случайными данными. Это упрощенное изложение, поскольку были еще и групповые ключи.
              +3
              нашел 16 килобит
              +1
              Судя по микросхеме на фото К573РФ5 — объём её составляет 2 килобайта то есть 128 раз по 16 байт, я совсем слаб в криптографии, объясните пожалуйста, каким образом работала защита от программного считывания, если после 128 подключений, и копирования части ключа по 16 байт — весь ключ становился известным? Кроме того, как вы защищали саму микросхему от считывания, если например умелец просто вынул ключ — и вставил в своё устройство?
                0
                Ключ не становился известным. Он никогда не попадал в компьютер. И ключ разумеется персональный. Если он попал в руки умельцу, все ключевые данные надо считать скомпрометированными
                  +2
                  ваша картинка, объясняющая работу системы совсем не информативна, напоминает магию, нарисован фокусник, шляпа и кролик, а как это всё взаимодействует, кроме того что, что куда вставляется: фокусник вынимает кролика из шляпы — не объяснено. По крайней мере для не специалистов в криптографии, вроде меня…
                    0
                    Ну я не знаю что там можно изобразить детальнее. Все просто — ПЗУ вставляется в плату, плата в ISA-порт.
                      +4
                      видимо я сильно некомпетентен в криптографии...(
                      спасибо
                        +1
                        Как я понял, вопрос про реализацию на уровне софта и железа как комплекса, а не просто что куда вставляется (как соединять вроде понятно, так как слишком легко).
                          0
                          К сожалению, за давностью лет у меня практически ничего не осталось по этому комплексу. Ни софта ни документации ни исходников. Помню я тоже далеко не все, а врать не хочется.
                        +1
                        Как я понял принцип работы девайса:
                        — есть плата аппаратного шифрования, которая управляется через порты ввода/вывода и/или маппингом на память, может имеет свой BIOS предоставляющее какой-то API
                        — есть ПЗУ, хранящие набор ключей.и используемое только платой, никакого программного доступа к ключу не предусмотрено
                        — есть некий софт, который шифрует данные посылая их на плату (черз порты/память или используя биос) и получая с неё зашифрованные и аналогично дешифрует

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

                        Второй — передача данных по незащищенному каналу (например на дискете курьером без допуска) — нужна пара пзу с одинаковыми ключами, которые передаются защищенными каналами (особистом под роспись)
                          +1
                          Все верно. Единственное, что конкретно это изделие управлялось только через порты. Маппинга в память не было. Производительность, впрочем, достигалась по тем временам очень хорошая (цифр уже не помню).
                        +1
                        раз уж про криптографию ничего не говорите скажите хотя бы чем было вызвано использование танталовых конденсаторов? Они же дорогие, даже если просто на лом сдавать (в конце 90х я таким занимался).
                          +1
                          Это вопрос к нашим электронщикам. Кроме того, плата стоила десятки тысяч рублей (уже не помню точно, да и деньги были другие), так что не думаю, что это было проблемой.
                            +5
                            тогда тем более интересно, какой принцип использовался для сокрытия гамма-ключа, и поток каких данных и каким именно образом шифровался с помощью этой системы, и в чём выражалась защита от дурака, или от злоумышленного-дурака, ведь не поняв как система работала в нормальном режиме, оценить ошибку очень сложно, ошибок вроде «и вот на четвёртый день Зоркий Сокол рассмотрел что в тюрьме одной стенки не хватает» в криптографии существует великое множество, но не поняв как устроена система, нельзя почувствовать вкус обнаружения и устранения этой ошибки
                              0
                              Принцип я описал — ключ попадает в устройство но никогда не попадает на компьютер. Ключ персональный, носится в кармане (был кстати, более удобный плоский вариант, с разъемом на лицевой панели). Само шифрование — более быстрое чем сложное. Блочные алгоритма не поддерживались, только гаммирование. Чтобы гамма не повторялась, всегда использовалась синхропосылка.
                                +3
                                Каким образом ключ не попадает на компьютер (это защита на уровне устройства или ПО)? У кого в кармане носится ключ? Какие данные шифруются? Что с этими зашифрованными данными происходит после шифрования? Куда они передаются? Каким образом в точке-приёмнике эти данные расшифровываются? Человек вынимает ключ и идёт вставляет в другой компьютер или как? Против каких уязвимостей данная система бессильна, от чего она защищает? Преценденты использования, и механизмы генерации ключа — передачи людям то есть как эта система жила на практике…
                                  0
                                  Есть два ключа в которых (ключи не торчат в платах постоянно, а носятся в кармане), по известному адресу записана одинаковая последовательность из 16 байт, в остальном они разные. Данные шифруются с использованием этих 16 байт в качестве ключа и синхропосылки и вместе с синхропосылкой передаются туда где есть второй ключ. Там они расшифровываются.
                                    +1
                                    известный адрес — это что? где находится эта известность? в ПО?

                                    и какие данные передавались таким образом, если конечно вы не обязаны об этом молчать 25 лет
                                      0
                                      Известный адрес да в ПО. был специальный софт, который, в частности управлял ключами. Данные любые. Устройство предназначалось для использования в малом и среднем бизнесе и ряде госструктур.
                                        0
                                        а из ПО — легко было достать этот адрес? И, насколько я понимаю, это было что-то вроде связки ключей, где один доверяет другому, и у нас есть ключи и платы и программы, с помощью которых мы можем обмениваться друг с другом относительно сильно зашифрованной информацией, но если кто-то потеряет контроль над ключом хотя бы на время (умышленно или по безолаберности), то весь эффект шифра пропадает так получается? в ситуации когда мы не доверяем каналу передачи информации.
                                          0
                                          Если кто-то потеряет ключ, часть ключей (та которая общая с кем-то) будет скомпрометрирована и их придется перегенерировать. Знание адреса ключа в ПЗУ ключ не компрометрирует, поскольку прочитать его можно только аппаратными средствами (то-есть имея аппаратный ключ на руках)
                                  +1
                                  опять же возможно спецам по криптографии всё ясно, но раз вы позиционируете статью для не спецов, то надо расписать чуть более подробно.
                                    0
                                    я стараюсь
                                      0
                                      спасибо) на самом деле, может я просто задаю глупые вопросы…
                                        0
                                        да нет, вполне нормальные
                              +3
                              Какие ж они танталловые? Керамика это, КМ. И ценность там представляет палладий. А во времена советские их в военке очень любили.
                                +2
                                Угу, и таким образом через военных и чёрные ходы эти конденсаторы были по доступной цене на любой толпучке. Я такие использовал налево и направо даже не подозревая об их особенной ценности (кроме технических показателей, конечно).
                                0
                                Мне в середине 90ых подарил один дяденька большую коробку этих КМ-ок, новеньких, только с завода, «для радиолюбительства» (просил я у него только один конденсатор, в телевизоре сломанный поменять). Сдавать на металл ни разу мысли не возникало, хотя можно было бы миллионером стать в те года. Использую эти запасы по делу до сих пор.
                        +1
                        Самое забавное заключается в том, что сколько таких примеров не приводи, куча народу все равно сами пытаются реализовывать криптографические системы, при этом экономя на специалистах на криптографии.

                        А пример отличный, огромное спасибо за доступный язык и терминологию, буду кидать ссылку на эту статью людям «сами-с-усами-в-крипто». ;)
                          0
                          Да, «наколенки» в области криптографии это плохо и ненадежно. Но как я уже сказал выше, от безделья ума не прибавится. Идеальный вариант для новичка — влиться в команду спецов и наращивать опыт, по мере сил. Впрочем, как и везде.
                            0
                            Ну почему же, если обьем посылок за используемый срок меньше размера ключа, то вполне себе секьюрно, щас это вполне себе реально, вплоть до того что само шифрование вынести на другое устройство не проблема а там хоть XOR шифруй себе наздоровье.
                            +1
                            Я правильно понимаю, что дыра срабатывала если ключ был в руках у заинтересованного человека?
                            Тогда получается, что на этот момент он уже скомпрометирован и смысла его «ломать» никакого?
                              0
                              А зловредное ПО?
                                0
                                Это мог быть резидент, работающий без ведома пользователя. Ключ разумеется должен был быть воткнут.
                                То есть это дополнительный канал компрометации, защититься от которого было бы сложно. Да и обнаружить тоже.
                                0
                                А насколько это было нужно кому-то делать?

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

                                Проще предположить, что трояна могли поселить мотивированные лица внутри организации. А зная теперешнее отношение к компьютерам чиновников, ключ поди торчал в порту во время походов в туалет и столовую.

                                Или это было вовсе не министерство рыбного хозяйства? ;)

                                  0
                                  Да, это было другое министерство (в том числе). В любом случае, дыра неприятная, а лица связанные с информационной безопасностью обязаны быть параноиками
                                    0
                                    С этим я не спорю.
                                  +1
                                  Извиняюсь за оффтоп, но если перед чтением статьи, вот прям с лету, смотреть на старую плату и на деревянный ключ к ней, то улыбку не возможно сдержать!
                                    0
                                    Серийный ключ был в пластиковом корпусе, вечером выложу фотографию, он не такой красивый. То что на фотографии к статье — эксклюзивный вариант. Потом была еще серия плоских ключей.
                                      0
                                      0
                                      Пользуясь случаем, напоминаю что на Coursera вчера стартовал курс по криптографии, на который еще не поздно записаться.

                                    Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                    Самое читаемое