Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Контроль доступа

Метка содержит биты доступа, которые управляют доступом к данным, хранящимся на метке. В этой главе мы разберём, как работают эти биты. Этот раздел может показаться немного сложным, поэтому я постараюсь объяснить его как можно проще.

Caution

Изменение битов доступа: будьте осторожны при записи битов доступа, потому что неверные значения могут сделать сектор непригодным для использования.

Разрешения

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

ОперацияОписаниеПрименимо к типу блока
ReadЧтение одного блока памятиЧтение/запись, значение, служебный блок
WriteЗапись одного блока памятиЧтение/запись, значение, служебный блок
IncrementУвеличение содержимого блока и сохранение результата во внутреннем буфере передачиЗначение
DecrementУменьшение содержимого блока и сохранение результата во внутреннем буфере передачиЗначение
RestoreЧтение содержимого блока во внутренний буфер передачиЗначение
TransferЗапись содержимого внутреннего буфера передачи в блокЗначение, чтение/запись

Условия доступа

Начнём с главного вопроса: условия доступа. В ходе своих исследований я заметил, что многие люди с трудом разбираются в разделе об условиях доступа в даташите. Вот моя попытка объяснить его понятно 🤞.

Для управления разрешениями каждого блока используются всего 3 битовые комбинации. В официальном даташите это обозначается с помощью записи вида CXY (C1₀, C1₂… C3₃) для битов доступа. Первое число (X) в этой записи — номер бита доступа, от 1 до 3, и каждый соответствует определённому типу разрешения. Однако смысл этих разрешений различается в зависимости от того, является ли блок блоком данных или служебным блоком. Второе число (Y) в нижнем индексе обозначает относительный номер блока, от 0 до 3.

Таблица 1: Условия доступа для служебного блока сектора

В исходном даташите номер в нижнем индексе в таблице не указан. Я добавил индекс «3», так как служебный блок сектора находится в блоке 3.

Important

Читаемый ключ: если ключ можно прочитать, его нельзя использовать для аутентификации. Поэтому в этой таблице, когда ключ B читаем, он не может выполнять роль ключа аутентификации. Как вы могли заметить, да, ключ A никогда нельзя прочитать.

Биты доступа Условие доступа для Примечание
Ключ A Биты доступа Ключ B
C13 C23 C33 Чтение Запись Чтение Запись Чтение Запись
0 0 0 никогда ключ A ключ A никогда ключ A ключ A Ключ B может быть прочитан
0 1 0 никогда никогда ключ A никогда ключ A никогда Ключ B может быть прочитан
1 0 0 никогда ключ B ключ A|B никогда никогда ключ B
1 1 0 никогда никогда ключ A|B никогда никогда никогда
0 0 1 никогда ключ A ключ A ключ A ключ A ключ A Ключ B может быть прочитан; конфигурация по умолчанию
0 1 1 никогда ключ B ключ A|B ключ B никогда ключ B
1 0 1 никогда никогда ключ A|B ключ B никогда никогда
1 1 1 никогда никогда ключ A|B никогда никогда никогда

Как разобраться в этой таблице?

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

Например, пусть вы выбрали «1 0 0» (третья строка таблицы). Тогда ключ A и ключ B нельзя прочитать. Однако ключом B можно изменить и ключ A, и ключ B. Биты доступа можно прочитать и ключом A, и ключом B. Но сами биты доступа изменить нельзя никогда.

Теперь вопрос: где хранить эти биты? Мы разместим их в 6-м, 7-м и 8-м байтах в определённом месте, которое будет объяснено чуть позже.

Таблица 2: Условия доступа для блоков данных

Это относится ко всем блокам данных. В исходном даташите нет индекса «Y», я добавил его для ясности. Здесь «Y» обозначает номер блока (от 0 до 2).

Конфигурация по умолчанию означает, что и ключ A, и ключ B могут выполнять все операции. Однако, как видно из предыдущей таблицы, ключ B читаем (в конфигурации по умолчанию), поэтому он не может использоваться для аутентификации. Следовательно, можно использовать только ключ A.

Биты доступа Условие доступа для Применение
C1Y C2Y C3Y Чтение Запись Инкремент Декремент, перенос/восстановление
0 0 0 ключ A|B ключ A|B ключ A|B ключ A|B Конфигурация по умолчанию
0 1 0 ключ A|B никогда никогда никогда блок чтения/записи
1 0 0 ключ A|B ключ B никогда никогда блок чтения/записи
1 1 0 ключ A|B ключ B ключ B ключ A|B блок значения
0 0 1 ключ A|B никогда никогда ключ A|B блок значения
0 1 1 ключ B ключ B никогда никогда блок чтения/записи
1 0 1 ключ B никогда никогда никогда блок чтения/записи
1 1 1 никогда никогда никогда никогда блок чтения/записи
Примечание: «Если ключ B можно прочитать в служебном блоке сектора, его нельзя использовать для аутентификации. В результате, если считыватель использует ключ B для аутентификации блока с условиями доступа, которые используют ключ B, карта откажет в любом дальнейшем доступе к памяти после аутентификации».

Как разобраться в этой таблице?

Она похожа на предыдущую: показывает связь между битовыми комбинациями и разрешениями.

Например, если выбрать «0 1 0» (вторая строка таблицы) и применить это разрешение к блоку 1, то для чтения блока 1 можно использовать и ключ A, и ключ B. Однако никакие другие операции с блоком 1 выполнить нельзя.

Обозначение такое: номер блока записывается как нижний индекс к меткам битов (например, C11, C21, C31). Здесь индекс «1» обозначает блок 1. Для выбранной комбинации «0 1 0» это означает:

  • C11 = 0
  • C21 = 1
  • C31 = 0

Эти биты также будут размещены в 6-м, 7-м и 8-м байтах в определённом месте, которое будет объяснено чуть позже.

Таблица 3: Таблица условий доступа

Раскрасим исходную таблицу, чтобы лучше увидеть, что означает каждый бит. Седьмой и третий биты в каждом байте относятся к служебному блоку сектора. Шестой и второй биты соответствуют блоку 2. Пятый и первый биты связаны с блоком 1. Четвёртый и нулевой биты относятся к блоку 0.

Надчёркивание в обозначении означает инвертированное значение. Это значит, что если значение CXy равно 0, то CXy становится равным 1.

Байт 7 6 5 4 3 2 1 0
Байт 6 C23 C22 C21 C20 C13 C12 C11 C10
Байт 7 C13 C12 C11 C10 C33 C32 C31 C30
Байт 8 C33 C32 C31 C30 C23 C22 C21 C20

Биты доступа по умолчанию — «FF 07 80». Попробуем понять, что это значит.

Байт 7 6 5 4 3 2 1 0
Байт 6 1 1 1 1 1 1 1 1
Байт 7 0 0 0 0 0 1 1 1
Байт 8 1 0 0 0 0 0 0 0

Из таблицы выше можно вывести значения CXY. Обратите внимание: только C33 равно 1, а все остальные значения равны 0. Теперь посмотрите Таблицу 1 и Таблицу 2, чтобы понять, какому разрешению это соответствует.

Блок C1Y C2Y C3Y Доступ
Блок 0 0 0 0 Все разрешения с ключом A
Блок 1 0 0 0 Все разрешения с ключом A
Блок 2 0 0 0 Все разрешения с ключом A
Блок 3 (служебный) 0 0 1 Ключ A можно записать с помощью ключа A. Биты доступа и ключ B можно читать и записывать только с помощью ключа A.

Поскольку ключ B читаем, его нельзя использовать для аутентификации.

Калькулятор на следующей странице

Всё ещё сложно? Используйте калькулятор на следующей странице, чтобы поэкспериментировать с различными комбинациями. Меняйте разрешения для каждого блока и смотрите, как соответственно меняются значения битов доступа.

Ссылка