Цитата:
Если все тут такие умные и образованные, что в простейшей криптографической схеме разобраться не могут, может тогда кто-нить предложит своё, простоё и понятное объяснение в виде 10-20 строк текста, как работает схема смены пароля, без перешифрации всего диска ? Вот только не надо ссылок на умные тексты, своим словами лучше объясните.
Ок, представлюсь.
Виталий. Учусь в аспирантуре по специальности "Теоретические основы информатики", работаю в Институте систем обработки изображений РАН. Область интересов - криптография, обработка изображений, стеганография.
Итак, по порядку.
Цитата:
1. Я где нибудь хоть слово про salt сказал ? Те константы что я привёл НИКАКОГО ОТНОШЕНИЯ К SALT НЕ ИМЕЮТ.
Предположим, что вы действительно не хеш имели в виду. ХОтя тогда непонятна ваша фраза
Цитата:
Да всё понятно, что реальная KDF сложнее. Но:
Ведь KDF - это именно функция "перемешиания" ключа и salt. Salt в данном случае нужен для защиты от перебора значений хеша. Очевидно, что количество различных хешей (256 бит) на порядки больше количества, например, восьмисимвольных паролей. Поэтому можно заранее перебрать все восьмисимвольные комбинации, вычислить от них хеш и получить универсальный "словарь" часто используемых значений хеша- и использовать в дальнейшем этот словарь для подбора паролей к любому контейнеру. Salt как раз делает невозможным данный перебор, т.к. он каждый раз новый и составить "универсальный" словарь нет возможности.
Далее.
Как
Цитата:
как работает схема смены пароля, без перешифрации всего диска
Во-первых, как уже сказали - диск шифруется так называемым "мастер-ключом". Обычно это случайное число размером этак 512 байт . К паролю этот мастер-ключ отношения никакого не имеет. Хешем пароля (либо хешем salt+пароль) шифруется мастер-ключ и записывается в заголовок контейнера (вот почему при повреждении заголовка криптоконтейнера данные нельзя извлечь уже никак - их просто нечем расшифровывать).
Таким образом, шифрование получается двухступенчатое - сначала контейнер шифруется мастер-ключем, а потом сам мастер-ключ шифруется хешем пароля и записывается в заголовок.
При смене пароля мастер-ключ извлекается из заголовка, зашифровывается уже с помощью хеша нового пароля. После этого перезаписывается ТОЛЬКО ЗАГОЛОВОК КОНТЕЙНЕРА. Сами данные в контейнере не изменяются.
У такой схемы есть принципиальная уязвимость - если атакующий смог скопировать заголовок и впоследствии узнал "старый" пароль, то он может расшифровать контейнер даже после смены пароля.
ИТОГО - при такой схеме шифрования использование вашего подхода с константами просто бессмысленно. Точнее, ваш подход будет просто вариацией на тему - в качестве зашифрованного мастер-ключа будет выступать константа A
Цитата:
hash пароля A + константа A = ключ для шифра A. Соответственно, при вводе пароля будет извлекаться его хеш и складываться с хранящимся в заголовке значением константы - и полученная сумма будет являться ключем шифрования.
В чем разница? В том, что вы СТОЙКУЮ к криптоанализу схему ШИФРОВАНИЯ мастер-ключа заменяете НЕСТОЙКОЙ операцией сложения или XOR с констатнтой. При этом размер хеша пароля
предполагается равным размеру мастер-ключа (в случае, если хеш будет значительно меньше мастер-ключа, то мастер-ключ можно будет подобрать из значений, близких к записанной в заголовке константе) - что снижает производительность и гибкость такой схемы.
ВОПРОСЫ?