Contents |
Зашифрованный DiskCryptor раздел не содержит видимых сигнатур или иных идентификационных данных. Без знания пароля он неотличим от случайных чисел, и структура раздела может быть обнаружена лишь при наличии правильного пароля к нему. Зашифрованный раздел содержит область служебных данных (заголовок тома), после которой располагаются пользовательские данные.
Первые 2048 байт раздела занимает заголовок тома (volume header). В нем хранится информация о разделе и ключи к всем пользовательским данным. Заголовок тома зашифрован выбранным криптоалгоритмом в режиме XTS ключом, полученным из пользовательского пароля. Пользовательские данные находившиеся в первых 2048 байтах раздела перемещаются в область перемещения, непрерывную последовательность секторов в пользовательской части (подробности ниже). Заголовок не имеет никаких видимых сигнатур, и без знания пароля неотличим от случайных чисел.
typedef struct _dc_header {
u8 salt[PKCS5_SALT_SIZE]; /* pkcs5.2 salt */
u32 sign; /* signature 'DCRP' */
u32 hdr_crc; /* crc32 of decrypted volume header */
u16 version; /* volume format version */
u32 flags; /* volume flags */
u32 disk_id; /* unigue volume identifier */
int alg_1; /* crypt algo 1 */
u8 key_1[DISKKEY_SIZE]; /* crypt key 1 */
int alg_2; /* crypt algo 2 */
u8 key_2[DISKKEY_SIZE]; /* crypt key 2 */
u64 stor_off; /* temporary storage offset */
u64 use_size; /* user avalible volume size */
u64 tmp_size; /* temporary part size */
u8 tmp_wp_mode; /* data wipe mode */
u8 reserved[1422 - 1];
} dc_header;
| Смещение | Размер | Шифрование | Описание |
|---|---|---|---|
| 0 | 64 | Нет | Salt. Случайное число использующееся при получении ключа заголовка. |
| 64 | 4 | Да | Сигнатура тома DiskCryptor. Имеет значение 0x50524344 (ascii 'DCRP'). |
| 68 | 4 | Да | CRC32 остальной части заголовка (байт 72-2047). |
| 72 | 2 | Да | Версия формата заголовка. Имеет значение 1 для томов DiskCryptor 0.5. |
| 74 | 4 | Да | Флаги тома. Используются для указания состояния тома. |
| 78 | 4 | Да | Уникальный идентификатор тома. Используется для поиска раздела при выборе загрузки с указанного раздела. |
| 82 | 4 | Да | Идентификатор основного криптоалгоритма, которым зашифрован раздел. |
| 86 | 256 | Да | Основной ключ шифрования пользовательских данных тома. |
| 342 | 4 | Да | Идентификатор дополнительного криптоалгоритма, которым зашифрован раздел. Указывает на предыдущий криптоалгоритм при перешифровании. |
| 346 | 256 | Да | Дополнительный ключ шифрования пользовательских данных тома. Используется для хранения предыдущего ключа при перешифровании. |
| 602 | 8 | Да | Смещение в области пользовательских данных, по которому перемещены первые 2048 байт содержимого раздела. |
| 610 | 8 | Да | Размер области пользовательских данных. |
| 618 | 8 | Да | Размер зашифрованной области. Присутствует только в частично зашифрованном состоянии. |
| 626 | 1 | Да | Режим очистки диска использовавшийся при шифровании. Присутствует только в частично зашифрованном состоянии. |
| 627 | 1421 | Да | Зарезервировано. Заполнено нулями. |
Область перемещения - это непрерывная последовательность секторов, в которой хранятся первые 2048 байт данных раздела. В данный момент используются два способа размещения этой области: в файле $dcsys$, или в конце раздела. При шифровании раздела с уже имеющимися данными, эта область размещается в файле $dcsys$, который расположен в непрерывной цепочке кластеров. При форматировании нового раздела, эта область располагается в конце раздела, после пользовательских данных. Для предотвращения удаления, фрагментации, или перемещения файла $dcsys$, доступ к нему запрещается драйвером.