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