Хранение шифрованных данных на удаленной машине

Тема в разделе "WASM.CRYPTO", создана пользователем apple, 25 ноя 2007.

  1. apple

    apple Виктор

    Публикаций:
    0
    Регистрация:
    26 апр 2005
    Сообщения:
    907
    Адрес:
    Russia
    Предупреждаю сразу: в криптографии я полный NULL! @я еще только учусь@

    Программа для безопасного обмена файлами.

    Смысл в том, что с помощью такой проги надо делать меньшее количество операций. Взял файл (нешифрованый), нажал кнопочку "отправить" - он загрузился на сервер уже шифрованный. То есть даже если админ сервера перехватит ssh сессию или нагло полазиет по файлам пользователя, то ничего он не получит. Так как (на сервере лежат только зашифрованные файлы)
    Он увидит примерно следующее:
    Код (Text):
    1. -rw-r--r--  1 w_788139  virtwww     43536 27 ??? 15:25 0.1148.1145.1168.1145.1158.133.169.193.183
    2. -rw-r--r--  1 w_788139  virtwww     31760 26 ??? 00:21 0.140.134.167.197.165
    3. -rw-r--r--  1 w_788139  virtwww   6583472 26 ??? 07:21 0.161.174.163.150.166.168.164.99.155.175.157
    4. -rw-r--r--  1 w_788139  virtwww    511024 27 ??? 01:28 0.183.186.163.121.125.132.95.164.148.166
    5. -rw-r--r--  1 w_788139  virtwww       766 26 ??? 07:30 0.189.202.172.202.181.179.176.122.174
    6. -rw-r--r--  1 w_788139  virtwww    454672 27 ??? 00:48 0.202.205.183.202.187.124.178.196.176
    7. -rw-r--r--  1 w_788139  virtwww  26191152 27 ??? 01:06 0.204.203.167.196.175.175.180.122.174.178.181
    8. -rw-r--r--  1 w_788139  virtwww      4544 26 ??? 14:26 0.209.191.168.202.164.186.188.175.182.120.186.168.184
    Никакие ключи для шифрования файлов по сети не передаются.

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

    Алгоритм:

    1. Создаем ssh-сессию.
    2.1 Допустим, нам надо передать файл:
    а) Определяемся с именем файла.
    б) Шифруем имя файла.
    в) Шифруем содержимое файла.
    г) Передаем файл на сервер
    Как видно, даже если ssh будет перехвачен/сервер взломан, то до файлов не добраться, так как они тоже пошифрованы
    Содержимое файла шифруется Rijndaelс, используя ключ, полученный хешированием введенного в настройки программы пароля.
    Имя файла шифровано DES

    2.2. Для скачивания файла получаем список файлов, расшифровываем имена файлов для наглядного представления и выводи в окно программы. Выбираем нужный, нажимаем "Скачать". На компьютер он падает уже расшифровынный.

    Реализация концепции
    За пару дней набросал программку. Это даже не альфа-версия - это первая заработавшая версия, так что претензии по коду не принимаются :)

    Программку я погонял - у меня пока без глюков лежит около 1ГБ разных файлов.
    Если кому интересно: http://crypt.netcode.ru/ (исходники на сайте не светятся http://crypt.netcode.ru/downloads/Remote_DCryptSRC.7z)
    Требует наличие .NET 2.0 и выше.

    Как работать

    По умолчанию используются настройки существующего тестового сервера.
    Работает так:
    Действия -> Список файлов на сервере.
    Или попробуйте загрузить любой файл двойным щелчком из левой панели.
    При первом коннекте откроется окно запроса пароля. Пароль сохранятся только на время сеанса в памяти компьютера (можно стереть Действия -> Стереть пароль из памяти)

    Скриншот

    Интересно увидеть комментарии/пожелания. Больше всего интересует, существуют ли user-friendly решения.
     
  2. Ruptor

    Ruptor Marcos el Ruptor

    Публикаций:
    0
    Регистрация:
    9 янв 2005
    Сообщения:
    167
    Адрес:
    Australia
    Suschestvuyut, no user-friendly poka netu.
     
  3. apple

    apple Виктор

    Публикаций:
    0
    Регистрация:
    26 апр 2005
    Сообщения:
    907
    Адрес:
    Russia
    А можно названия, ссылки?
     
  4. apple

    apple Виктор

    Публикаций:
    0
    Регистрация:
    26 апр 2005
    Сообщения:
    907
    Адрес:
    Russia
    Обновил версию. Спрашиваете, если сто непонятно.
     
  5. ntldr

    ntldr New Member

    Публикаций:
    0
    Регистрация:
    20 ноя 2007
    Сообщения:
    125
    Это как? SHA это алгоритм хеширования. Чем на самом деле шифруется и в каком режиме?
     
  6. Ruptor

    Ruptor Marcos el Ruptor

    Публикаций:
    0
    Регистрация:
    9 янв 2005
    Сообщения:
    167
    Адрес:
    Australia
    ntldr: luboi hash mozhno ispolzovat kak stream cipher v CTR mode: data ^= hash(i++);
     
  7. apple

    apple Виктор

    Публикаций:
    0
    Регистрация:
    26 апр 2005
    Сообщения:
    907
    Адрес:
    Russia
    Опечатался. SHA и AES.

    Вернее сначала получается ключ sha-хешированием "пароля", введенного в настройках программы.
    Код (Text):
    1. PasswordDeriveBytes pdb = new PasswordDeriveBytes("пароль", null);
    2. pdb.HashName = "SHA512";
    3. string Key = pdb.GetBytes(keylen >> 3);
    Далее данные "поблочно" шифруются Rijndael CBC (AES)
    Код (Text):
    1. int buflen = ((2 << 16) / alg.BlockSize) * alg.BlockSize;
    Имена файлов шифруются простым сложением аскей символа имени файла с символом ключа.

    Не устраивает скорость шифрования в дотнете. Ооочень медленно.
     
  8. Spiteful

    Spiteful New Member

    Публикаций:
    0
    Регистрация:
    24 янв 2004
    Сообщения:
    33
    Может не стоит так просто, чтобы символы ключа не вычислили ? ;)
     
  9. apple

    apple Виктор

    Публикаций:
    0
    Регистрация:
    26 апр 2005
    Сообщения:
    907
    Адрес:
    Russia
    Это заглушка пока. Я пока не нашел шифр, который в итоге давал те символы, которые одинаковы в большинстве разных кодировок (0-9, a-z, A-Z. А лучше вообще только 0-9). Это надо для хранения файлов и предупоеждения трабл с разными кодировками на разных серверах.

    Согласен с тем, что имея исходное имя файла, можно ключ вычислить. Для этого есть возможность использовать разные ключи для имен и содержимого.
     
  10. Spiteful

    Spiteful New Member

    Публикаций:
    0
    Регистрация:
    24 янв 2004
    Сообщения:
    33
    Пошифровать имя файла "нормальным" шифром, а потом байты полученного "имени" через base64, base32 ... по вкусу
     
  11. ftre

    ftre New Member

    Публикаций:
    0
    Регистрация:
    30 июн 2007
    Сообщения:
    34
    Крайне небезопасный дилетантской подход. Применение такой "заглушки" даже в первой бета версии раз и навсегда убивает доверие к программе и ее автору. В общем, непростительная и фатальная ошибка, проект можно закрывать.
     
  12. apple

    apple Виктор

    Публикаций:
    0
    Регистрация:
    26 апр 2005
    Сообщения:
    907
    Адрес:
    Russia
    1. Где ты видел бета-версию? Я выложил то, что заработало и задал вопросы.
    2. Как ты собрался расшифровывать, не зная исходного имени файла. Это при том, что длина ключа заведомо не меньше имени файла. Само содержимое шифруется аес, если не заметил.
    В отличии от тебя, я не пишу "только 0-day программы", поэтому мне до тебя далеко вестимо.
     
  13. ntldr

    ntldr New Member

    Публикаций:
    0
    Регистрация:
    20 ноя 2007
    Сообщения:
    125
    А почему бы не использовать стандарт pkcs5.2 ?

    +1. Автор AES обзывает SHA, делает детские ошибки в реализации, да и написано все на тормозном дотнете. В таком виде как сейчас проекту прямой путь в топку. На месте автора я бы повесился от стыда. CipherWall (где-то тут был топик) выглядит гораздо серьезнее.
     
  14. apple

    apple Виктор

    Публикаций:
    0
    Регистрация:
    26 апр 2005
    Сообщения:
    907
    Адрес:
    Russia
    Я в шифры только подался. Если б знал, что куда. Не спрашивал бы на форуме :)
     
  15. ntldr

    ntldr New Member

    Публикаций:
    0
    Регистрация:
    20 ноя 2007
    Сообщения:
    125
    Автор - убей себя. При использовании криптоалгоритмов принято считаться с всеми известными видами атак, а атака по открытому тексту занимает среди них первое место.

    P.S. извиняюсь за столь резкую критику, но меня крайне бесит столь дилетантский подход к безопасности, а еще больше бесят попытки оправдаться. Читай RTFM и не делай таких ошибок, тогда и мнение будет другое.
     
  16. apple

    apple Виктор

    Публикаций:
    0
    Регистрация:
    26 апр 2005
    Сообщения:
    907
    Адрес:
    Russia
    Ну извини. Я программю на серверной машине. Все летает. Вообще дотнет быстро работает на современных компьютерах (была тут темка, где он с++ обогнал). Начиная где-то от P2140/1ГБ RAM никаких тормозов не замечал. На С1.6/512 формочки уже заметно как прорисовываются.

    В любом случае года через 3-5-8 нынешняя техника выйдет из строя, тогда у всех разницы заметно не будет.
    Ты путаешь форум с рынком. Здесь задают вопросы и это нормально.
     
  17. apple

    apple Виктор

    Публикаций:
    0
    Регистрация:
    26 апр 2005
    Сообщения:
    907
    Адрес:
    Russia
    Гыыы. Давно флейма не было.
     
  18. ntldr

    ntldr New Member

    Публикаций:
    0
    Регистрация:
    20 ноя 2007
    Сообщения:
    125
    Мда, что сказать - синдром современного программиста :) Написать тяп-ляп и готово, и советовать всем докупать железо чтобы это работало быстро.
    Кстати, тебе не кажется что мощь современного железа будет куда более востребована для шифрования больших обьемов данных, нежели для преодоления тормознутости дотнета?
    Ну а насчет путания форума с рынком, ты ошибаешся. Есть такое понятие как репутация, и безупречной она может быть только если человек не делал фатальных ошибок ни в одной своей программе. В криптографии репутация имеет решающее значение. Вот почему желательно закрыть проект, и переписать заново, на другом языке и под другим названием. Только больше не делать ошибок, так как одна ошибка и репутация проекта погублена навсегда.
     
  19. UbIvItS

    UbIvItS Well-Known Member

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    6.243
    честно говоря, не понял в чём смысл этого проекта: люди хранящие важные файлы на публичных серверах, обычно шифруют их перед заброской на сервач. тот же рар-архив и сжатие и шифр.
     
  20. apple

    apple Виктор

    Публикаций:
    0
    Регистрация:
    26 апр 2005
    Сообщения:
    907
    Адрес:
    Russia
    С этим соглашусь.
    Решение мне Spiteful подсказал, за это ему спасибо.

    Значит, у нас есть 2 ключа-симметрика, настройки пользователя. Хранить их надо в пошифрованном виде. С этим вроде ясно.

    Как это делать наиболее безопасно?
    Думаю, ключ к расшифрованию не хранить в системе. Допустим, вводить вручную/считывать с какого-то внешнего оборудования.

    Или есть способы лучше?