Пятиразрядный ANSI-код (цифровой):
Следует отметить, что у данного кода младшие значащие разряды стоят в начале, что соответствует порядку следования битов на магнитной дорожке, когда карта проходит в нормальном направлении считывания (слева направо лицом к головке).
Наибольшую важность представляют три особых символа: флажок начала (
Символ
Мы знаем, что для синхронизации демодулятора запись всегда должна начинаться, по крайней мере, с десяти нулей, которые, естественно, требуется удалить при декодировании.
Блок «полезных» данных может начинаться с одного или нескольких битов в состоянии 0, но при этом флажок
Начало и конец дорожки заполняются нулями, что объясняет явное несоответствие между объявленными объемами: так, например, 40 символов На дорожке ISO 2 соответствует 200 бит, в то время как дорожка может вместить их до 253. Аналогичный расчет возможен и для дорожки ISO 3, которая в состоянии вместить 708 бит, а ограничена 107 символами, представляющими только 535 бит, так же, как и дорожка ISO 1, содержащая 79 полезных символов по 7 бит (то есть 553 бита).
Практический опыт подсказывает, что при кодировании следует примерно поровну распределить лишние нулевые биты, между началом и концом дорожки. Тогда полезные данные окажутся размещенными в зоне, наиболее благоприятной для считывания, а именно посередине дорожки.
Ниже представлена таблица истинности семибитного кода ANSI в той же форме, что и предыдущая.
Семиразрядный ANSI-код (алфавитно-цифровой):
Помимо значительно большего числа специальных символов, редко используемых на практике, вновь можно отметить наличие флажков
Правильно разработанный декодер будет полностью в состоянии распознать «на лету» флажок
При считывании магнитных носителей, таких как карты и билеты, ошибок бывает предостаточно. Дорожка может быть загрязнена, поцарапана или частично размагничена; кроме того, сам процесс вставки карт в считывающее устройство может быть не вполне удачным, в то время как качество считывающей головки также не всегда бывает безупречным.
Во избежание того, чтобы ошибка в одном единственном бите кредитной карточки не могла привести к вычитанию суммы одной из ваших покупок с банковского счета какой-либо знаменитости, совершенно необходимо внедрить целый комплекс мер по определению ошибок.
Наиболее простой метод заключается в добавлении бита четности к каждой группе битов, предназначенных для кодирования символа.
Принято выбирать значение бита чётности таким образом, чтобы общее число единичных битов в общем коде символа всегда оставалось нечетным (контроль на нечетность).
Например, в пятибитном коде цифра 6, записываемая как 0110 в двоичной системе и содержащая четное число битов в состоянии 1, будет тогда закодирована в виде 01101 путем прибавления в качестве бита четности 1, что в сумме приведет к 3 — нечетной цифре.
В семибитном коде буква Т, определяемая битами 001011, наоборот, будет закодирована как 0010110 путем добавления в качестве бита четности 0, что приведет общее число битов в состоянии 1 к 3 — также нечетной цифре.
Если во время считывания обнаруживается, что один или несколько символов содержат четное число битов, устройство заключает, что считывание было проведено с ошибкой, и, следовательно, необходимо еще раз вставить карту в считывающее устройство. В таком случае обычно прибегают к способу, состоящему в протирании карты о рукав одежды, что действительно может помочь очистить загрязнившуюся дорожку, но не является гарантированным средством решения любой проблемы.
Важно иметь в виду, что некоторые ошибки могут исказить два бита одного символа, и данная схема контроля четности в этом случае не определит ошибку. Поэтому для лучшей защиты следует предусмотреть, по крайней мере, дополнительный уровень безопасности, а еще лучше — два.
Защита с помощью LRC, применяемая к словам из любого числа битов, состоит в последовательном применении операции исключающего ИЛИ (XOR) ко всем словам, а затем в присоединении к ним результата такого вычисления в виде одного единственного слова.
Например, рассмотрим следующий блок данных (без бита четности, младший бит стоит в начале):
Определение LRC происходит по следующим этапам:
Защищенный блок данных будет тогда записан в следующем виде:
или, добавляя бит четности к каждому из составляющих его слову:
Предположим, что первое слово подвержено двойной ошибке. Это позволяет преодолеть контроль четности:
Вычислим LRC этого блока ошибочных данных (без учета входящих в него битов четности и LRC):
Вычисленный код LRC блока с ошибками (5) отличается от LRC, переданного в составе блока без ошибок (0), что индицирует наличие ошибки, не позволяя, однако, определить ее местоположение: LRC — механизм не исправления ошибок, а только их обнаружения.
В подобном случае следует повторно проводить считывание до тех пор, пока контроль четности и по LRC пройдет успешно.
В частном случае стандартизованных магнитных карт (а также большого числа нестандартных магнитных носителей) обычно прибегают к защите с помощью LRC всех символов, начиная с флажка
Вероятность того, что одна или несколько ошибок смогут ускользнуть от такого двойного контроля, крайне мала. Несмотря на это, как правило, используется дополнительный третий уровень защиты.
Рассматриваемая чисто арифметическая обработка, применимая только к цифровым данным, существует в двух вариантах в зависимости от четного или нечетного числа цифр контролируемого числа.
Если число включает четное количество цифр, необходимо, прежде всего, умножить на два каждую цифру из нечетного ряда и вычесть из полученного результата 9, если он превышает или равен 10. Все цифры, обработанные таким образом, затем складываются, и к ним добавляются все цифры четного ряда.
Контролируемое число считается верным тогда и только тогда, когда окончательный результат кратен 10. В случае карт с нечетным количеством цифр поступают наоборот: удваиваются цифры четного ряда.
На практике довольствуются добавлением одной цифры или «ключа контроля» к цифрам, правильность которых должна быть гарантирована, — и это вне зависимости от количества содержащихся в числе цифр.
Естественно, эта цифра выбирается таким образом, чтобы проверялись все перечисленные выше правила. Можно доказать, что это всегда возможно и что рассматриваемая цифра единственна.
К примеру, защищенные таким каскадным способом тройного контроля цифры кредитной карточки, считываемые на дорожке ISO 2, вполне могут считаться защищенными от любого случайного сбоя. Между тем, они не носят никакого конфиденциального характера, поскольку полностью отпечатываются кассовым аппаратом на любом чеке и хранятся продавцом в качестве доказательства.
Только проверка подписи или, еще лучше, четырехзначного конфиденциального кода может считаться достаточным доказательством подлинности произведенной транзакции, хотя банки все чаще стараются на договорной основе перекладывать эту ответственность на плечи своих клиентов.
Несмотря на то что стандарты, фиксирующие содержимое различных дорожек (и особенно ISO 2), касаются, в основном, карт с финансовой направленностью, единообразие которых должно обеспечиваться на международном уровне, они, в конце концов, применяются и подавляющим большинством изготовителей самых разнообразных карт.
Для изготовителей это своего рода упрощение и залог надежности, а для нас — удача в том смысле, что нам проще будет раскрывать маленькие секреты карт, считыванием которых мы сейчас и займемся.
Банковские карты
Прежде всего, обратимся к изучению банковских карточек, которые выпускаются в строжайшем соответствии со стандартами, и дорожки ISO 2, поскольку она используется чаще других.
Пример, приведенный выше, естественно, не взят с персональной банковской карточки автора, а составлен на базе выдуманного номера, широко используемого на табличках, указывающих на то, что в данном месте принимаются банковские карточки: 4970 1012 3456 7890. И хотя этот номер недействителен (ключ контроля намеренно неверен), его первые цифры совершенно правдивы. Они идентифицируют изготовителя карточки, а следующие принадлежат ее владельцу. Таким образом, номера MASTERCARD и EUROCARD начинаются с 5, a VISA — с 4.
Например, цифры 4970 встречаются в начале номеров карт VISA, выпущенных La Poste, а номера карт, выпущенных, скажем, Societe Generale, начинаются с 4973. За границей встречаются другие номера, например 4567.
Первое поле данных (между флажком и разделителем) содержит только номер карты в том виде, в котором он выдавлен. Второе поле начинается сразу после разделителя с четырех цифр, указывающих срок действия данной карты в соответствии с форматом ААММ (год, год, месяц, месяц). Мы выбрали 9912 (декабрь 1999) совершенно произвольно.
Группа из трех цифр (101), которая следует затем, встречается, похоже, на всех банковских карточках. Речь идет о «служебном коде» данного приложения. Стоящие далее нули заменяют более конфиденциальные данные, которые никогда не пропечатываются ни на чеках продавцов, ни на билетах. Здесь содержится в зашифрованном виде копия четырехзначного конфиденциального кода владельца карты. Аналогичный код используется и в банковских чип-картах.
Создается впечатление, что эти так называемые дискретизированные данные просто-напросто игнорируются в некоторых приложениях, которые, обрабатывая транзакции (пересылки), проводимые только с небольшими суммами, не контролируют конфиденциальный код (например, автоматы платы за проезд по скоростной дороге, автоматы в телефонных кабинках и т. д.). Естественно, это значительно упрощает операции, но может вызвать серьезные проблемы в случае привлечения к ответственности или опротестования.
На рис. 2.2 представлено содержимое дорожки ISO 2, подтверждающее то, о чем мы так легко догадались сами, и вносящее некоторые полезные уточнения.
Рис. 2.2.