вторник, 18 июня 2019 г.

Медвежья услуга пользователям VeraCrypt, или Как правильно сдаться

На ру-борде завязалась тема (надо сказать, не в первый раз), что потенциальная возможность иметь скрытый том опасна для тех, кто его не имеет. Т.е. если они согласятся под давлением выдать пароль, то все равно их будут подозревать в наличии скрытых данных.

С одной стороны — да, и на этом держится т.н. «правдоподобное отрицание причастности»: пользователь, владеющий страшными секретами, должен быть неотличим от того, кому «нечего скрывать».

С другой стороны, если уж вам действительно нечего скрывать и вы хотите доказать это противнику, то решение есть.

Трижды подумайте, прежде чем читать дальше! Сейчас вы узнаете, как сделать доказуемым отсутствие скрытого тома. И поэтому вам станет труднее отвергать подозрения в его наличии, если он у вас есть ;)

Самое очевидное — действительно создать скрытый том и предъявить пароль от него. Однако мы уже знаем, что скрытых томов может быть несколько. И вообще, любые случайные данные можно заподозрить в наличии зашифрованного содержимого. А как раз случайными данными VeraCrypt и заполняет свободное пространство тома. Так что это решение прокатит только для глупого противника.

Решение, чтобы убедить умного противника — заполнить свободное пространство тома регулярными данными. Попросту — создать файл максимального размера, заполненный одинаковыми байтами, и тут же удалить. Сделать это (вернее, нечто похожее) можно простым батником, см. ниже. Вот теперь отсутствие скрытых томов доказано. Или нет?..

Проблема в том, что глупый противник этого доказательства не поймет. Так что задача, как прогнуться одновременно под умного и под идиота, ожидаемо непростая. Скорее всего, понадобится сначала заполнить регулярными данными пространство на внешнем томе. Затем создать скрытый. Затем заполнить пространство на скрытом.

Однако теперь обещанный батник.

Назовите его как угодно, например, Surrender.bat и расположите где угодно на шифрованном томе. Когда запустите и он отработает, свободное пространство этого тома заполнится регулярными данными.

@echo off
Setlocal EnableDelayedExpansion

md "%~f0.tmp" || goto end
cd /d "%~f0.tmp"
echo.>1
set j=1

:loop1
set /a i=j
set /a j=i+1
copy /b !i!+!i! !j! && goto loop1

:loop2
set /a j=j+1
copy /b !i! !j! && goto loop2

set /a i=i-1

for /L %%j in (!i!,-1,1) do copy /b %%j _%%j

cd /d ..
rd /s /q "%~f0.tmp"

:end
pause

Вообще-то останется несколько кластеров, которые батник заполнит лишь частично, но для нашей цели сойдет. Однако для безвозвратного униичтожения удаленных данных этот батник не годится.