2023-07-16 11:01:28 +02:00
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2022-03-31 00:49:42 +02:00
< html xmlns = "http://www.w3.org/1999/xhtml" xml:lang = "ru" lang = "ru" >
2023-07-16 11:01:28 +02:00
< head >
< meta http-equiv = "content-type" content = "text/html; charset=utf-8" / >
< title >
VeraCrypt - Бесплатное надёжное шифрование дисков с открытым исходным кодом
< / title >
< meta
name="description"
content="VeraCrypt это бесплатное программное обеспечение для шифрования дисков с открытым исходным кодом для Windows, Mac OS X (macOS) и Linux. В случае, если злоумышленник вынуждает вас раскрыть пароль, VeraCrypt обеспечивает правдоподобное отрицание наличия шифрования. В отличие от пофайлового шифрования, VeraCrypt шифрует данные в реальном времени (на лету), автоматически, прозрачно, требует очень мало памяти и не использует временные незашифрованные файлы."
/>
< meta name = "keywords" content = "encryption, security, шифрование, безопасность" / >
< link href = "styles.css" rel = "stylesheet" type = "text/css" / >
< / head >
< body >
< div >
< a href = "Documentation.html"
>< img src = "VeraCrypt128x128.png" alt = "VeraCrypt"
/>< / a >
< / div >
2022-03-31 00:49:42 +02:00
2023-07-16 11:01:28 +02:00
< div id = "menu" >
< ul >
< li > < a href = "Home.html" > Начало< / a > < / li >
< li > < a href = "/code/" > Исходный код< / a > < / li >
< li > < a href = "Downloads.html" > Загрузить< / a > < / li >
< li > < a class = "active" href = "Documentation.html" > Документация< / a > < / li >
< li > < a href = "Donation.html" > Поддержать разработку< / a > < / li >
< li >
< a
href="https://sourceforge.net/p/veracrypt/discussion/"
target="_blank">Форум< / a >
< / li >
< / ul >
< / div >
2022-03-31 00:49:42 +02:00
2023-07-16 11:01:28 +02:00
< div >
< p >
< a href = "Documentation.html" > Документация< / a >
< img src = "arrow_right.gif" alt = ">>" style = "margin-top: 5px" / >
< a href = "Technical%20Details.html" > Технические подробности< / a >
< img src = "arrow_right.gif" alt = ">>" style = "margin-top: 5px" / >
< a href = "Keyfiles.html" > Ключевые файлы< / a >
< / p >
< / div >
2022-03-31 00:49:42 +02:00
< div class = "wikidoc" >
< h1 > Ключевые файлы< / h1 >
< div style = "text-align:left; margin-top:19px; margin-bottom:19px; padding-top:0px; padding-bottom:0px" >
< p > Ключевой файл VeraCrypt – это файл, содержимое которого объединено с паролем. В качестве ключевого файла можно
использовать любой файл. Пользователь также может сгенерировать ключевой файл с помощью встроенного генератора
ключевых файлов, который использует VeraCrypt RNG для создания файла с о случайным содержимым (см. подробности
в разделе < a href = "Random%20Number%20Generator.html" > < em > Генератор случайных чисел< / em > < / a > ).< / p >
2023-07-16 11:01:28 +02:00
< p > Максимальный размер ключевого файла не ограничен, однако обрабатываются только е г о первые 1 048 576 б а йт (1 М иБ)
2022-03-31 00:49:42 +02:00
(все остальные байты игнорируются, чтобы не жертвовать производительностью из-за обработки очень больших файлов).
Можно указывать один или несколько ключевых файлов (количество не ограничено).< / p >
< p > Ключевые файлы могут храниться на токенах безопасности и смарт-картах, совместимых с PKCS-11 [23], защищённых
несколькими пин-кодами (которые можно ввести с помощью аппаратной пин-панели или через графический интерфейс VeraCrypt).< / p >
< p > Ключевые файлы обрабатываются и применяются к паролю следующим способом:< / p >
< ol >
< li > Пусть < em > P< / em > это пароль тома VeraCrypt, указанный пользователем (может быть пустым)< / li >
< li > Пусть < em > KP< / em > это пул ключевых файлов< / li >
< li > Пусть < em > kpl< / em > это размер пула ключевых файлов < em > KP< / em > , в байтах (64, то есть 512 б ит);
< p > < em > kpl< / em > должен быть кратен выходному размеру хеш-функции < em > H< / em > < / p > < / li >
< li > Пусть < em > pl< / em > это длина пароля < em > P< / em > , в байтах (в текущей версии: 0 ≤ < em > pl< / em > ≤ 64)< / li >
< li > Если < em > kpl > pl< / em > , добавляем (< em > kpl – pl< / em > ) нулевых байт к паролю < em > P< / em > (таким образом,
< em > pl = kpl< / em > )< / li >
< li > Заполняем пул ключевых файлов < em > KP< / em > нулевыми байтами в количестве < em > kpl< / em > .< / li >
< li > Для каждого ключевого файла выполняем следующие шаги:
< ol type = "a" >
< li > Устанавливаем положение указателя пула ключевых файлов в начало пула< / li >
< li > Инициализируем хеш-функцию < em > H< / em > < / li >
< li > Загружаем все байты ключевого файла один за другим, и для каждого загруженного байта выполняем следующие шаги:
< ol type = "i" >
< li > Хешируем загруженный байт с помощью хеш-функции < em > H< / em > без инициализации хеша, чтобы получить
промежуточный хеш (состояние) < em > M< / em > . Н е финализируем хеш (состояние сохраняется для следующего раунда).< / li >
< li > Делим состояние < em > M< / em > на отдельные байты.< br >
Например, если выходной размер хеша составляет 4 б а йта , (< em > T< / em > < sub > 0< / sub > || < em > T< / em > < sub > 1< / sub > ||
< em > T< / em > < sub > 2< / sub > || < em > T< / em > < sub > 3< / sub > ) = < em > M< / em > < / li >
< li > Записываем эти байты (полученные на шаге 7.c.ii) по отдельности в пул ключевых файлов с помощью операции
сложения по модулю 2< sup > 8< / sup > (не заменяя старые значения в пуле) в позиции указателя пула. После записи
байта позиция указателя пула увеличивается на один байт. Когда указатель достигает конца пула, е г о положение
устанавливается в начало пула.
< / li > < / ol >
< / li > < / ol >
< / li > < li > Применяем содержимое пула ключевых файлов к паролю < em > P< / em > , используя следующий метод:
< ol type = "a" >
< li > Делим пароль < em > P< / em > на отдельные байты < em > B< / em > < sub > 0< / sub > ...< em > B< / em > < sub > pl-1< / sub > .< br >
Обратите внимание, что если пароль был короче пула ключевых файлов, то пароль дополнялся нулевыми байтами
до длины пула на ша г е 5 (следовательно, в этот момент длина пароля всегда больше или равна длине пула ключевых файлов).< / li >
< li > Делим пул ключевых файлов < em > KP< / em > на отдельные байты < em > G< / em > < sub > 0< / sub > ...< em > G< / em > < sub > kpl-1< / sub > < / li >
< li > Для 0 ≤ i < kpl выполняем: Bi = Bi ⊕ Gi< / li >
< li > < em > P< / em > = < em > B< / em > < sub > 0< / sub > || < em > B< / em > < sub > 1< / sub > || ... || < em > B< / em > < sub > pl-2< / sub > ||
< em > B< / em > < sub > pl-1< / sub > < / li > < / ol > < / li >
< li > Пароль < em > P< / em > (после применения к нему содержимого пула ключевых файлов) теперь передаётся в функцию
формирования ключа заголовка PBKDF2 (PKCS #5 v2), которая е г о обрабатывает (вместе с солью и другими данными)
2023-09-03 00:50:37 +02:00
используя выбранный пользователем криптографически безопасный алгоритм хеширования (например, SHA-512).
2022-03-31 00:49:42 +02:00
См. подробности в разделе < a href = "Header%20Key%20Derivation.html" >
< em > Формирование ключа заголовка, соль и количество итераций< / em > < / a > .
< / li > < / ol >
< p > Роль хеш-функции < em > H< / em > заключается просто в выполнении диффузии [2]. В качестве хеш-функции
< em > H< / em > применяется CRC-32. Обратите внимание, что вывод CRC-32 впоследствии обрабатывается с использованием
криптографически безопасного хеш-алгоритма: содержимое пула ключевых файлов (в дополнение к хешированию с помощью CRC-32)
применяется к паролю, который затем передаётся в функцию формирования ключа заголовка PBKDF2 (PKCS #5 v2), которая
е г о обрабатывает (вместе с солью и другими данными), используя выбранный пользователем криптографически безопасный
2023-09-03 00:50:37 +02:00
алгоритм хеширования (например, SHA-512). Результирующие значения используются для формирования ключа заголовка
2022-03-31 00:49:42 +02:00
и вторичного ключа заголовка (режим XTS).< / p >
< p > < / p >
< p > < a href = "Personal%20Iterations%20Multiplier%20%28PIM%29.html" style = "text-align:left; color:#0080c0; text-decoration:none; font-weight:bold.html" > Следующий раздел > > < / a > < / p >
< / div >
< / div > < div class = "ClearBoth" > < / div > < / body > < / html >