Кунсткамера
Remote DCrypt — параноидальное шифрование
Cloud Drive своими руками. Берем шифрование файлов под полный контроль
Бинарные файлы и исходный код .
Небольшая утилита, написанная на C# .NET2.0 для курсовой работы. Актуальность решения исходит из новости (http://habrahabr.ru/blogs/infosecurity/118220/). Естественно, это было изначально известно, но все равно неприятно.
А что нужно для надежного хранения зашифрованных файлов?
- Не хранить ключи для дешифровки файлов там, где они хранятся в зашифрованном виде. Использовать симметричное шифрование.
- Хранить даные ключи в зашифрованном виде. Притом, ключ для дешифровки должен генерироваться из пароля, который в свою очередь также не должен где-либо храниться.
- Обеспечить шифрование канала передачи файлов. Из п.п. 1-2 следует, что файлы нужно шифровать поточно на стороне клиента и передавать на сервер шифрованный файл. Таким образом на стороне клиента не останется записей о том, что даный зашифрованный файл был на его компьютере. Саму передачу файлов нужно шифровать дополнительно, чтобы нельзя было перехватить и зашифрованный файл.
- Шифрование канала передачи зашифрованных файлов вести с помощью симметричного шифрования.
- Реализовать на практике легко воспроизводимый алгоритм.
Содержимое файлов шифруем алгоритмом AES. Ключи для дешифрирования файлов храним в отдельном файле «keys.key», который шифруется с помощью пароля, вводимого с клавиатуры. Пароль никуда не сохраняется.
Соединение с сервером осуществляем по протоколу SSH2. Здесь важно получить реальный ключ с сервера, чтобы исключить расшифровку потока где-то на середине пути (а-ля MITM SSL).
Также шифруются имена файлов, используя шаблон
<PREFIX>.<CRYPTED_NAME>
например
0.A765.A799.V86F.G78.65D
Для шифрования имен файлов используем отдельный ключ.
Остальное – дело техники. На сервере файлы будут храниться в следующем виде
-rw-r—r— 1 w_675655 virtwww 51452 27 ??? 01:12 0.5678.754.899.5633.4678
-rw-r—r— 1 w_675655 virtwww 21487 26 ??? 00:13 0.677.345.234.874.876
-rw-r—r— 1 w_675655 virtwww 2514785 26 ??? 04:13 0.878.3567.6767.332.226
-rw-r—r— 1 w_675655 virtwww 651233 27 ??? 05:25 0.563.536.7643.245.5654
-rw-r—r— 1 w_675655 virtwww 213 26 ??? 06:27 0.123.456.6542.334.756
-rw-r—r— 1 w_675655 virtwww 735634 27 ??? 04:45 0.1154.734.567.211.652
-rw-r—r— 1 w_675655 virtwww 78657464 27 ??? 02:01 0.654.357.323.777.342
-rw-r—r— 1 w_675655 virtwww 4566 26 ??? 15:24 0.555.632.7543.234.634
Удачи!