Pull to refresh

Безопасное хранение секретов

Reading time4 min
Views8.1K
image Расскажу об одном из портативных, кроссплатформенных методов хранения секретов на накопителях, в основе которого лежит только открытое, свободно распространяемое ПО.


Никогда не мог запомнить все логины, пароли и прочие коды доступа ко всем моим учетным записям. Порой регистрационное имя и заветный код необходимы в самый неподходящий момент, поэтому я таскаю их на флэшке. Для того, чтобы не рвать на себе волосы при потере заветного накопителя информации я и написал скриптики, речь о которых пойдет ниже.


Сформулируем задачу.
Существует папка с секретами (личные дневники, информация об аккаунтах, статьи на хабр и т.д.), которую ну никак нельзя хранить в открытом виде. Возможность прочитать данные из нее хочется иметь на любом компьютере, на который занесет. Для простоты описания дальнейших манипуляций сузим до всех компьютеров под управлением Windows. Но никто не мешает расширить этот круг, так как все используемое ПО кроссплатформенное.

Нам понадобятся следующие инструменты:
  • консольный архиватор
  • пакет программ, реализующих инструменты криптографии
  • шреддер файлов

Я буду использовать 7-Zip portable, GnuPG и Eraser portable.
На *nix системах это может быть к примеру tar, GnuPG и wipe

Создаем на флешке рабочую директорию (к примеру F:\bin\secure). Копируем в нее нужные нам инструменты:
  • 7z.exe, 7z.dll — из 7-Zip portable
  • Eraserl.exe, Eraser.dll — из Eraser portable
  • gpg.exe из GnuPG

Дальше нам необходимо сгенерировать закрытый и открытый ключи для операций криптографии. Делается это очень просто с помощью все той же gpg:

F:\bin\secure\gpg.exe --gen-key --home=C:\

Ответив на все вопросы (если не понимаете что спрашивают в первых трех вопросах, можете ответить так: 1, 1024, 0) получим открытый и закрытый ключи, а также базу доверенных сертификатов. Это файлы:
  • C:\pubring.gpg
  • C:\secring.gpg
  • C:\random_seed
  • C:\trustdb.gpg

Самыми важными являются pubring (открытый ключ, с помощью которого можно зашифровать) и secring (закрытый ключ, с помощью которого можно расшифровать). Кроме того, советую запомнить имя владельца ключа и пароль. Записываем все на зарегистрированный носитель и кладем в сейф. Мне портативность важнее безопасности, поэтому оба файла я буду хранить на той же флешке. Просто положу их в такое место, где их врятли будут искать. Даже если и найдут, для расшифрования закрытым ключем понадобится пароль.

Пусть закрытый ключ будет F:\ЗАКРЫТЫЙ.КЛЮЧ, а открытый — F:\ОТКРЫТЫЙ.КЛЮЧ. Базу доверенных сертификатов (нужна, чтобы gpg не ругался при осуществлении операций шифрования/расшифрования) — файлы random_seed и trust_db кладем к gpg.exe, то есть в F:\bin\secure.

Замечание:
Если вы работаете дома и в офисе, таская важную информацию туда и обратно, ключи можно хранить на рабочем и офисном компьютере. Таким образом «в пути» информация будет защищена от кражи, потери или встречи в темном переулке с группой гопников-ITшников.

Осталось только реализовать скрипт шифрования, реализующий следующие операции:
  • Копипрование нужных ключей в F:\bin\secure
  • Архивирование каталога с сектерами
  • Шифрование архива
  • Полное удаление каталога, архива и ключей в F:\bin\secure

И скрипт расшифрования —
  • Копирование ключей
  • Расшифрование
  • Распаковка
  • Полное удаление архива и ключей
  • Удаление зашифрованного архива

Вот эти скрипты на batch:

enc.bat
 1 @echo off
 2 rem Получение ключей
 3 copy %3 "%~dp0/pubring.gpg" /Y >> nul
 4 rem Упаковка
 5 %~dp0/7z.exe a %1.7z %1 >> nul && start/wait %~dp0/gpg.exe ^
 6   --homedir=%~dp0 -r %2 --quiet -o%1.enc -e %1.7z
 7 IF NOT %ERRORLEVEL% == 0 goto fail
 8 echo ENCRYPTED SUCCESSFULL
 9 %~dp0/eraserl.exe -file %1.7z -silent && %~dp0/eraserl.exe -folder %1 ^
10   -subfolders -silent >> nul
11 goto end
12 :fail
13 echo ENCRIPTION FAILED
14 :end
15 rem Зачищаем ключи
16 %~dp0/eraserl.exe -file "%~dp0/pubring.gpg" -silent


dec.bat
 1 @echo off
 2 rem Получение ключей
 3 copy %3 "%~dp0/pubring.gpg" /Y >> nul
 4 copy %4 "%~dp0/secring.gpg" /Y >> nul
 5 rem Расшифровка
 6 start/wait %~dp0/gpg.exe --homedir=%~dp0 -r %2 --quiet -o%1.7z -d %1
 7 IF NOT %ERRORLEVEL% == 0 goto fail
 8 rem Распаковка
 9 %~dp0/7z.exe x %1.7z -o%~dp1 >> nul && del %1 /Q && %~dp0/eraserl.exe ^
10   -file %1.7z -resultsonerror
11 echo DECRYPTED SUCCESSFULL
12 goto end
13 :fail
14 echo DECRYPTION FAILED
15 :end
16 %~dp0/eraserl.exe -file "%~dp0/secring.gpg" -resultsonerror && ^
17 %~dp0/eraserl.exe -file "%~dp0/pubring.gpg" -resultsonerror


Располагаем их в той же папке F:\bin\secure. Если запаковать Eraserl.exe, Eraser.dll и gpg.exe с помощью upx, то вся папка secure вместе с ключами легко помещается на зарегистрированной 3,5" дискете.
Сам процесс зашифрования выглядит так:

F:\bin\secure\enc.bat F:\ВАЖНАЯ_ПАПКА ИМЯ_ВЛАДЕЛЬЦА_КЛЮЧА F:\ОТКРЫТЫЙ.КЛЮЧ

а расшифрования так:

F:\bin\secure\dec.bat F:\ВАЖНАЯ_ПАПКА.enc ИМЯ_ВЛАДЕЛЬЦА_КЛЮЧА F:\ОТКРЫТЫЙ.КЛЮЧ F:\ЗАКРЫТЫЙ.КЛЮЧ

В процессе расшифровки вас попросят ввести пароль на закрытый ключ.

Замечание:
Данные скрипты шифруют только папки, потому что eraserl различает папки и файлы, но при наличии необходимой сноровки это досадное недоразумение легко поправимо.
Tags:
Hubs:
+14
Comments51

Articles