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 (передача)Записывает содержимое внутреннего буфера передачи в блокЗначение, чтение/запись

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

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

Для управления правами каждого блока используется всего три бита, то есть одна из восьми комбинаций. В официальном даташите это обозначается как 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» (3-я строка таблицы). Тогда вы не можете прочитать ни ключ A, ни ключ B. Однако вы можете изменить значение ключа A, а также ключа B, используя ключ 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» (2-я строка таблицы) и применить это право к блоку 1, то читать блок 1 можно будет либо ключом A, либо ключом B. Однако никакие другие операции с блоком 1 выполнять нельзя.

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

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

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

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

Раскрасим исходную таблицу, чтобы лучше видеть, что означает каждый бит. 7-й и 3-й биты каждого байта относятся к трейлеру сектора. 6-й и 2-й биты соответствуют блоку 2. 5-й и 1-й биты связаны с блоком 1. 4-й и 0-й биты относятся к блоку 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 можно прочитать, использовать его для аутентификации нельзя.

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

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

Ссылки