Контроль доступа
Метка содержит биты доступа, которые управляют доступом к данным, хранящимся на метке. В этой главе мы разберём, как работают эти биты. Этот раздел может показаться немного сложным, поэтому я постараюсь объяснить его как можно проще.
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 | никогда | никогда | никогда | никогда | блок чтения/записи |
Как разобраться в этой таблице?
Она похожа на предыдущую: показывает связь между битовыми комбинациями и разрешениями.
Например, если выбрать «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 читаем, его нельзя использовать для аутентификации.
Калькулятор на следующей странице
Всё ещё сложно? Используйте калькулятор на следующей странице, чтобы поэкспериментировать с различными комбинациями. Меняйте разрешения для каждого блока и смотрите, как соответственно меняются значения битов доступа.