Это не зебра - Описание и уязвимости технологий штрих-кодов

CUK77

Professional
Messages
1,193
Reputation
3
Reaction score
386
Points
83
Мы встречаем их везде. На упаковках товаров, на книгах и журналах, на коробках из-под CD, на продуктах и даже на билетах пригородных электричек. Они окружают нас повсюду, прочно войдя в нашу жизнь. Мы так привыкли к ним, что даже никогда не обращаем на них внимания. Я имею в виду штрих-коды, рисунки, состоящие из полосок, которые считывают лазером продавщицы в супермаркетах и турникеты на ж/д станциях. Тебе никогда не было интересно, какую информацию содержат в себе эти черно-белые коды? Как функционирует эта технология, насколько она эффективна и, самое главное, насколько она уязвима?

Объект изучения

Штриховой код (barcode) представляет собой последовательность черных и белых полос, содержащих в себе некоторую информацию. Все разновидности штрих-кодов можно разделить на три вида: линейные, двухмерные и композитные.

Линейный штрих-код читается в одном направлении, и имеет большое число разновидностей, например, EAN, UPC, Code39, Code128 и другие. Насколько мне известно, этих видов насчитывается уже более сотни. Такие коды могут содержать небольшой объем информации (до 20-30 символов).

Двухмерные (Two-dimensional или 2D-code) bar-коды расшифровываются в двух измерениях: по вертикали и по горизонтали, что требует более сложного оборудования, чем для считывания линейных кодов. Они могут включать в себя гораздо больший объем информации (до нескольких страниц текста). Разработано более 20 различных символик двухмерных штрих-кодов. Наиболее популярны коды - PDF417, Datamatrix, Aztec.

Композитный код объединяет в себе двухмерный и линейный код, позволяя, таким образом, использовать для считывания различное оборудование. Пример такого кода - Aztec Mesa.

Для большинства символик значение цифр, входящих в штрих-код, определяется разработчиком системы. Наиболее распространенной символикой с предопределенными значениями позиций являются товарные символики EAN-13, EAN-8, UPC-A и UPC-E.

EAN-UCC

EAN (European Article Numbering) International - это Некоммерческая Международная Ассоциация, управляющая международной системой товарной нумерации и стандартов штрихового кодирования. На территории России действует ассоциация автоматической идентификации ЮНИСКАН/EAN (www.ean.ru), являющаяся представительством EAN в нашей стране.

Часто можно встретить аббревиатуру EAN вместе с аббревиатурой UCC (Uniform Code Council) - организацией, занимающейся распространением стандартов штрихового кодирования на территории США. Следствием взаимодействия этих организаций стала совместимость продвигаемых ими стандартов (UCC имеет свой стандарт кодирования UPC (Universal Product Code), который является прародителем кодировок EAN). К примеру, код EAN-13 отличается от кода UPC-A наличием дополнительной цифры (стоящей в начале кода, но не рисующейся полосками), позволившей значительно расширить диапазон маркированных товаров.

В настоящее время около миллиона компаний в 133 странах мира используют стандарты EAN-UCC в повседневной практике. Ежедневно осуществляется свыше 5 миллиардов сканирований кодов EAN/UPC.

Код EAN-13

Этот код представляет для нас наибольший интерес, так как используется повсеместно в сфере розничной торговли. С его изучения лучше всего начинать знакомство с линейными штрих-кодами. На рисунке изображен пример кода EAN-13, посмотрим, из чего он состоит. А состоит он из тридцати двух черных полосок различной ширины, кодирующих тринадцать цифр и, собственно, надписи из этих самых цифр.

Первые 2-3 цифры кода означают принадлежность к различным региональным отделениям EAN или принадлежность к печатной продукции. По ним можно определить, в какой стране изготовлен товар, помеченный этим штрих-кодом (для этого задействуй, к примеру, прогу EAN-13 CountryFinder). Далее 4-5 цифр означают код присвоенный изготовителю товара. Это по стандартам EAN, на деле многие страны, в том числе Россия присваивают производителям 7 цифр. Оставшиеся цифры присваиваются различным товарам данного производителя. Последняя цифра - контрольная, служит для проверки корректности считанного кода. Алгоритм вычисления контрольной цифры весьма прост:

1. Сложить цифры, стоящие на четных местах:

7+1+0+1+1+0=10

2. Полученную сумму умножить на 3:

10*3=30

3. Сложить цифры, стоящие на нечетных местах, без контрольной цифры:

9+7+6+9+0+0=31

4. Сложить числа, указанные в пунктах 2 и 3:

30+31=61

5. Возьмем остаток от деления на 10:

31%10=1

6. Из 10 вычесть полученное в пункте 5:

10-1=9 - контрольная цифра.

Как видишь, наш штрих-код правильный. Несовпадение контрольной цифры на штрихкоде товара, скорее всего, означает, что товар поддельный.

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

Каждая цифра, кроме самой первой, кодируется и в графическом виде представляется двумя черными полосками. Первая цифра не кодируется, а определяется в зависимости от того, какие кодировки используют следующие за ней шесть цифр. Код EAN-13 использует три вида кодировок: code A, code B, code C. Двоичный код code C получается в результате проведения операции логического отрицания code A, то есть NOT code A, а code B - это «обратный» code C. В двоичной системе цифры этих кодировок выглядят следующим образом:

Code A Code B Code C
0: 0001101 0100111 1110010

1: 0011001 0110011 1100110

2: 0010011 0011011 1101100

3: 0111101 0100001 1000010

4: 0100011 0011101 1011100

5: 0110001 0111001 1001110

6: 0101111 0000101 1010000

7: 0111011 0010001 1000100

8: 0110111 0001001 1001000

9: 0001011 0010111 1110100

Несложно догадаться, что единицы будут графически выглядеть на штрих-коде как закрашенные области кода, нули - как не закрашенные. Разделительные полосы по краям кода можно обозначить как 101, а посередине - как 01010. Правая часть кода (последние шесть цифр) EAN-13 всегда кодируется как code C. Цифры левой части кода могут кодироваться методами A и B в зависимости от первой цифры штрих-кода. Зависимость эту можно представить следующим образом:

№ цифры => 2 3 4 5 6 7

0: A A A A A A

1: A A B A B B

2: A A B B A B

3: A A B B B A

4: A B A A B B

5: A B B A A B

6: A B B B A A

7: A B A B A B

8: A B A B B A

9: A B B A B A

Взгляни на рисунок кода EAN-13. Первая цифра - 9, значит, следующие шесть будут закодированы как ABBABA. Это объясняет, почему идущие после девятки семерки имеют разный рисунок.

Применение трёх видов кодировок в коде EAN-13 осуществлено вовсе не для того, чтобы их было труднее расшифровать, а для обеспечения совместимости со стандартом UPC-A. UPC-A имеет 12 цифр, каждая из которых преобразуется в полоски, шесть первых - методом A, шесть последних - методом C. Таким образом, сканер, работающий по стандарту EAN, присвоит такому коду 0 в начале.

Халява от EAN

Европейским хакерам в восьмидесятых годах прошлого века не составило труда разобраться в кодировках EAN-13. Многие товары, такие как одежда, продававшаяся в супермаркетах, помечались наклейкой со штрих-кодом, которую хакеры заменяли своей, аналогичной тем, что были на более дешёвых товарах того же типа. Вскоре подделка штрих-кодов превратилась в новый вид мошенничества.

Код EAN-13, присваиваемый определенному продукту, не содержит в себе никаких данных об этом товаре (цена, вес и пр.). Все эти данные содержатся в базе данных, из которой их извлекает кассовый аппарат при сканировании штрих-кода на упаковке продукта. Впрочем, это не всегда так. Многие продукты, цена которых зависит от веса, продаются в супермаркетах со штрих-кодами, наклеенными самим супермаркетом. В зависимости от системы применяющейся в магазине, такие штрих-коды могут либо содержать привязку к базе данных товаров, либо содержать сведения, влияющие на цену или вес. И в том и в другом случае есть возможности для мошенничества. Иногда магазины сами упрощают задачу мошенникам.

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

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

Халява в электричках

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

Считать код билета оказалось проще простого, так как используется стандартное кодирование Interleaved 2-of-5. Я не буду рассказывать, как устроено это кодирование. Об этом ты сможешь почитать на документах, которые лежат на диске. Я лучше поведаю тебе о том, чего удалось добиться хакерам железных дорог.

Как выяснилось, информация о билете (дата, разновидность, зоны, цена и так далее) довольно хитрым образом кодируется в число, записываемое на билет. Наивно было бы ожидать, что эти данные будут находиться на поверхности.

Однако человеческий энтузиазм безграничен - куча людей принялась собирать базы данных с номерами билетов, пытаясь уловить какую-то закономерность между параметрами тикета и его кодом. Это было не так уж легко, но в конце концов хитрый код все-таки поддался хакерам и некоторые время можно было наблюдать нервных дядек у касс, за 5 рублей продающих билетики «до любой зоны».

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

В интернете даже есть целый сайт, посвященный этой теме - http://barcodes.narod.ru. Сайт уже давно не обновлялся, но все еще живет гостевой книгой - сейчас там можно встретить весьма актуальные сообщения. Если для тебя актуальна тема бесплатной езды на электричках, то советую обратиться к этому сайту.

Заключение

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

Полезные программы

EAN-13 CountryFinder - умеет определять региональную принадлежность или принадлежность к определенным видам печатной продукции товарного кода EAN-13 по первым трем цифрам.
Barcode for Office - тулза, позволяющая легко и непринужденно создавать наиболее распространенные виды (25 видов и разновидностей) линейных кодов. Встраивается в приложения Microsoft Office, что позволяет вставлять в них рисунок штрих-кода прямо из меню: Вставка => Объект… => Bocai Barcode. Весьма удобна для создания штрих-кодов. Единственное ограничение триальной версии - надпись Trial Only, расположенная над создаваемым рисунком.

Другие штрих-коды

Далее хочу очень кратко ознакомить тебя с другими часто применяющимися штрих-кодами.

UCC/EAN 128 создан для автоматизации логистических операций (то есть движения товаров от производителей к потребителям) и повсеместно применяется в оптовой торговле. Он может содержать в себе множество информации, такой как размеры, вес, даты изготовления, информацию о производителе и т.д. Этот код включает в себя символы компьютерных кодировок ANSI и UNICODE. Существует три набора символов данного кода (A, B и C).
Двухмерные штрих-коды получили распространение значительно позже линейных. В основе их лежит идея независимой базы данных, содержащей информацию об определенном объекте. Первым 2D-баркодом стал PDF417, введенный в 1991 году фирмой Symbol Technologies. PDF происходит от сокращения Portable Data File (Портативный Файл Данных). Его штрих-кодовый символ состоит из 17 модулей, каждый из которых содержит 4 штриха и пробела (отсюда номер 417). Этот штрих-код открыт для общего пользования. Структура данного кода поддерживает кодирование максимального числа от 1000 до 2000 символов в одном коде при информационной плотности от 100 до 340 символов. Каждый такой код содержит стартовую и стоповую группы штрихов, увеличивающие высоту штрихкода. Существует также разновидность этого кода - Micro PDF417.
Aztec Code был введен Энди Лонгэйсером (Andy Longacre) из фирмы Welch Allyn Inc. в 1995 году и открыт для общего использования. Aztec Code разрабатывался для легкой печати и легкой расшифровки. Он представляет собой квадратную матрицу с концентрическими квадратами в центре, которые служат для определения позиции кода относительно сканера и мерной линейкой по краю кода. Наименьший штрих-код Aztec имеет площадь 15x15 модулей, наибольший - 151x151. Минимальный код Aztec кодирует 13 цифр или 12 букв, а максимальный - 3832 цифры или 3067 букв или 1914 байт данных. Символика этого кода не требует свободной зоны вокруг штрихкода. Существуют 32 градации размера кода с возможностью пользовательской установки защиты от ошибок по методу Рида-Соломона (Reed-Solomon) от 5% до 95% от области кода. Спецификацию Ацтека можешь найти на http://dcd.welchallyn.com/techover/dcdwhite.htm .
Код Data Matrix - двухмерный код от фирмы CiMatrix, разработанный для размещения большого объема информации на ограниченной площади поверхности. Data Matrix может хранить от одного до 500 символов. Data Matrix имеет теоретическую максимальную плотность 500 миллионов символов на дюйм! На практике плотность, конечно, ограничивается разрешающей способностью печатающих устройств и сканеров. Наиболее популярными применениями Datamatrix является маркировка небольших предметов, таких как электронные элементы и печатные платы электронных приборов.

WWW

Получить дополнительную информацию о кодировании Interleaved 2-of-5 можно здесь:
www.4guysfromrolla.com/webtech/082500-1.shtml

WARNING

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