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

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

Нам понадобятся следующие инструменты:

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

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

 

  • 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
@echo off
rem Получение ключей
copy %3 "%~dp0/pubring.gpg" /Y >> nul
rem Упаковка
%~dp0/7z.exe a %1.7z %1 >> nul && start/wait %~dp0/gpg.exe --homedir=%~dp0 -r %2 --quiet -o%1.enc -e %1.7z
IF NOT %ERRORLEVEL% == goto fail
echo ENCRYPTED SUCCESSFULL
%~dp0/eraserl.exe -file %1.7z -silent && %~dp0/eraserl.exe -folder %1 -subfolders -silent >> nul
goto end
:fail
echo ENCRIPTION FAILED
:end
rem Зачищаем ключи
%~dp0/eraserl.exe -file "%~dp0/pubring.gpg" -silent

dec.bat
@echo off
rem Получение ключей
copy %3 "%~dp0/pubring.gpg" /Y >> nul
copy %4 "%~dp0/secring.gpg" /Y >> nul
rem Расшифровка
start/wait %~dp0/gpg.exe --homedir=%~dp0 -r %2 --quiet -o%1.7z -d %1
IF NOT %ERRORLEVEL% == goto fail
rem Распаковка
%~dp0/7z.exe x %1.7z -o%~dp1 >> nul && del %1 /Q && %~dp0/eraserl.exe -file %1.7z -resultsonerror
echo DECRYPTED SUCCESSFULL
goto end
:fail
echo DECRYPTION FAILED
:end
%~dp0/eraserl.exe -file "%~dp0/secring.gpg" -resultsonerror && %~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 различает папки и файлы, но при наличии необходимой сноровки это досадное недоразумение легко поправимо.

Leave a Reply

Your email address will not be published. Required fields are marked *