Re[4]: Шифрование и дедупликация
От: Pzz Россия https://github.com/alexpevzner
Дата: 14.09.17 18:06
Оценка:
Здравствуйте, Stanislaw K, Вы писали:

Pzz>>А как WhatsApp соблюдает закон Яровой?


SK>А как закон касается ватзапа?


Ну, они там распостранители информации. Должны архивировать трафик и выдавать органам по требованию.
Re[8]: Шифрование и дедупликация
От: SteeLHeaD  
Дата: 14.09.17 18:40
Оценка:
Здравствуйте, wildwind, Вы писали:

W>Здравствуйте, SteeLHeaD, Вы писали:


SLH>>Насчет дедупликации:

SLH>>может,я неправильно понимаю Ваш вопрос?
SLH>>Для меня ответ довольно очевиден:

W>Вопрос не в том, как работает дедупликация вообще, это я понимаю. Вопрос в том, как она будет работать вместе с твоей криптосхемой.


W>Представь себя на месте сервера в облаке. К тебе поступает запрос от клиента: сохранить файл. Дальше передается имя файла, сами данные и т.д. В общем, протокол в твоей власти. Тебе нужно придумать такой протокол, чтобы сервер мог выполнить дедупликацию, и содержимое файлов оставалось зашифрованным end-to-end. Как я понял, этим ты все еще не готов поступиться.

W>Аналогично с запросом на чтение.

Я считал, что файл передаётся на сервер уже зашифрованным.
Шифруется и расшифровывается он на клиенте.
В моей "детской" (во всех отношениях) схеме шифрования — это возможно.
Причём, я не то, чтобы защищаю именно эту схему,
я хочу как раз у более опытных людей спросить про правильную схему.

И про правильную схему условия очень хорошо сформулировал Pzz:
"Если бы такой алгоритм сущесвовал, это означало бы, что существует некая форма хранения файла,
которую могут расшифровать и Алиса и Боб, не раскрывая при этом своих секретов ни друг другу, ни серверу."
Re[6]: Шифрование и дедупликация
От: SteeLHeaD  
Дата: 14.09.17 19:05
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>Здравствуйте, wildwind, Вы писали:


Pzz>>>Если бы такой алгоритм сущесвовал, это означало бы, что существует некая форма хранения файла, которую могут расшифровать и Алиса и Боб, не раскрывая при этом своих секретов ни друг другу, ни серверу. Интуитивно мне кажется, что этого сделать нельзя. Могу ошибаться.


W>>Сервер шифрует файл случайно сгенерированным симметричным ключом. Этот ключ шифруется отдельно публичными ключами Алисы и Боба. Эти два зашифрованных ключа сохраняются вместе с файлом.


Pzz>Т.е., сервер знает контент файла?


По мому, самый ценный совет мне дал wildwind, спасибо большое!
Смотрите.
Действительно, у Алисы есть файл.
Потом Алтса шифрует его случайно сгенерированным ключом kSimm при помощи симметричного алгоритма.
Зашифрованный файл она кладёт на сервер.
Чтобы сервер не знал содержимого файла, Алиса не передает на сервер ключ шифрования.
Но она шифрует его своим открытым ключем kAliceOpen, и получает файл k0(kAliceOpen, kSimm).
Этот ключ она тоже сохраняет на сервере.

Результат:
сервер содержит зашифрованый файл, ключа от которогоу сервера нет.
А Алиса, имея приватный ключ, может взять с сервера k0, расшифровать его своим приватным ключем и получить ключ шифрования kSimm.
Re[6]: Шифрование и дедупликация
От: wildwind Россия  
Дата: 14.09.17 19:20
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>>>Если бы такой алгоритм сущесвовал, это означало бы, что существует некая форма хранения файла, которую могут расшифровать и Алиса и Боб, не раскрывая при этом своих секретов ни друг другу, ни серверу. Интуитивно мне кажется, что этого сделать нельзя. Могу ошибаться.


W>>Сервер шифрует файл случайно сгенерированным симметричным ключом. Этот ключ шифруется отдельно публичными ключами Алисы и Боба. Эти два зашифрованных ключа сохраняются вместе с файлом.


Pzz>Т.е., сервер знает контент файла?


Да. В твоей постановке на это ограничений нет.
Re[9]: Шифрование и дедупликация
От: wildwind Россия  
Дата: 14.09.17 19:27
Оценка:
Здравствуйте, SteeLHeaD, Вы писали:

SLH>Я считал, что файл передаётся на сервер уже зашифрованным.

SLH>Шифруется и расшифровывается он на клиенте.

В этом и проблема. Шифруется файл на клиенте, а дедупликацию нужно делать на сервере (иначе какой в ней смысл).

SLH>В моей "детской" (во всех отношениях) схеме шифрования — это возможно.

SLH>Причём, я не то, чтобы защищаю именно эту схему,
SLH>я хочу как раз у более опытных людей спросить про правильную схему.

Так я ответил сразу, "правильной" схемы пока нет. А если уж ты взялся ее придумывать, то придумывай до конца, не оставляй пробелов.
Re[7]: Шифрование и дедупликация
От: Pzz Россия https://github.com/alexpevzner
Дата: 14.09.17 20:15
Оценка:
Здравствуйте, wildwind, Вы писали:

Pzz>>Т.е., сервер знает контент файла?


W>Да. В твоей постановке на это ограничений нет.


Это не моя постановка.

Если сервер знает контент файла, то задача дедупликации не имеет к криптографии никакиго отношения.
Re[8]: Шифрование и дедупликация
От: wildwind Россия  
Дата: 14.09.17 20:23
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>Это не моя постановка.


Я отвечал на твою. Давай я еще раз ее процитирую.

существует некая форма хранения файла, которую могут расшифровать и Алиса и Боб, не раскрывая при этом своих секретов ни друг другу, ни серверу.


В ней ничего нет про дедупликацию. Про нее я ответил ТС отдельно. Я просто обратил внимание, что твое утверждение неверно.
Re: Шифрование и дедупликация
От: vsb Казахстан  
Дата: 14.09.17 20:33
Оценка:
Передаём серверу хеш файла. Он нам возвращает список клиентов, которые заливали этот файл. Связываемся с этими клиентами, генерируем вместе новый ключ (что-то вроде диффи-хельмана), шифруем новым ключом файл, заливаем на сервер, клиенты проверяют, что залито то, что нужно, дают одобрение и сервер удаляет предыдущую копию.
Re[2]: Шифрование и дедупликация
От: SteeLHeaD  
Дата: 14.09.17 20:49
Оценка:
Здравствуйте, vsb, Вы писали:

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


Спасибо за идею!
Я еще не осознал ее крутизны, но продумаю её на днях.
Re[3]: Шифрование и дедупликация
От: vsb Казахстан  
Дата: 14.09.17 20:58
Оценка:
Здравствуйте, SteeLHeaD, Вы писали:

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


SLH>Спасибо за идею!

SLH>Я еще не осознал ее крутизны, но продумаю её на днях.

Тут ещё важно мотивировать клиента на дедупликацию, т.к. клиент всегда может зашифровать файл ещё один раз перед дедупликацией (или просто дописать любую чушь в любом месте), чтобы файл стал ни на что не похож. Или даже обманывать сервер, передавая неправильный хэш, проверить-то не выйдет. Поэтому сервер должен, например, при удачной дедупликации выставлять клиенту счёт меньше (т.е. если у двух клиентов один и тот же файл размером в терабайт, то каждый после дедупликации платит за 500 гигабайтов).
Re[2]: Шифрование и дедупликация
От: wildwind Россия  
Дата: 14.09.17 21:03
Оценка:
Здравствуйте, vsb, Вы писали:

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


Вот тут всё и обломится.
Re[3]: Шифрование и дедупликация
От: vsb Казахстан  
Дата: 14.09.17 21:08
Оценка: :)
Здравствуйте, wildwind, Вы писали:

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


W>Вот тут всё и обломится.


Почему? Связываться можно и через сервер, и не в реал-тайме.
Отредактировано 14.09.2017 21:09 vsb . Предыдущая версия .
Re[4]: Шифрование и дедупликация
От: Qulac Россия  
Дата: 14.09.17 21:38
Оценка: +1
Здравствуйте, vsb, Вы писали:

vsb>Здравствуйте, wildwind, Вы писали:


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


W>>Вот тут всё и обломится.


vsb>Почему? Связываться можно и через сервер, и не в реал-тайме.


Мы не доверяем серверу в плане хранения тайны(как я понял из т.з), сервер может выдать себя за одного из клиентов и получить ключ.
Программа – это мысли спрессованные в код
Re[5]: Шифрование и дедупликация
От: vsb Казахстан  
Дата: 15.09.17 09:15
Оценка:
Здравствуйте, Qulac, Вы писали:

W>>>Вот тут всё и обломится.


vsb>>Почему? Связываться можно и через сервер, и не в реал-тайме.


Q>Мы не доверяем серверу в плане хранения тайны(как я понял из т.з), сервер может выдать себя за одного из клиентов и получить ключ.


Согласен. Тогда предлагаю небольшую модификацию. Во-первых файлы хранятся не целиком, а сначала делятся на куски определённого размера: с одной стороны не слишком мелкие, с другой стороны клиент должен быть способен скачать нужный кусок без особых проблем. Скажем 100 мегабайтов. И каждый блок шифруется и дедуплицируется отдельно. Во-вторых при согласовании нового ключа каждому клиенту отправляется запрос на подтверждение того, что клиент владеет этим файлом, т.е. просьба подсчитать хеш от заданного куска. Нормальный клиент скачает с сервера этот кусок, расшифрует и ответит.

Тут надо следить за тем, чтобы сервер не устроил MitM-атаку, подменив одного из клиентов. Вроде с закрытыми-открытыми ключами это всё можно сделать.
Re: Шифрование и дедупликация
От: · Великобритания  
Дата: 15.09.17 10:16
Оценка: 3 (1)
Здравствуйте, SteeLHeaD, Вы писали:

А как такое? Идея — публиковать ключ шифрования файла зашифрованный самим файлом.

Клиент C1 геренит случайный симметричный ключ kSym. Шифрует им файл F. Шифрует своим публичным ключом kPubC1 ключ kSym и отправляет на сервер:
Клиент C2 имеет файл F. Считает hash(F), отправляет на сервер. Сервер лезет в субд и находит magic и salt по dataSignature, отправляет её клиенту. Клиент имея F и salt считает hash(F+salt). Затем вычисляет symDecrypt(key: hash(F+salt), data: magic) что выдаст нам kSym, а магия в том, что этот kSym будет доступен только тому у кого уже есть файл F. А дальше просто — C2 просто отправляет asymCrypt(key: kPubC2, data: kSym) серверу, зашифрованные данные на сервере уже есть. Клиент C2 так же может верифицировать эти данные загрузив cipherData к себе и сравнив F с symDecrypt(key: kSym, data: cipherData).
После этого на сервере будут хранится только C1Secret, C2Secret, cipherData, dataSignature, salt, magic.

И, таки да, сервер должен мотивировать клиентов делать дедупликацию и отправлять валидный magic, т.к. сервер корректность проверить не может.
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Отредактировано 15.09.2017 10:25 · . Предыдущая версия . Еще …
Отредактировано 15.09.2017 10:17 · . Предыдущая версия .
Отредактировано 15.09.2017 10:17 · . Предыдущая версия .
Re[2]: Шифрование и дедупликация
От: SteeLHeaD  
Дата: 15.09.17 11:49
Оценка:
Здравствуйте, ·, Вы писали:

·>Здравствуйте, SteeLHeaD, Вы писали:


·>А как такое? Идея — публиковать ключ шифрования файла зашифрованный самим файлом.


·>Клиент C1 геренит случайный симметричный ключ kSym. Шифрует им файл F. Шифрует своим публичным ключом kPubC1 ключ kSym и отправляет на сервер:

·> ·>Клиент C2 имеет файл F. Считает hash(F), отправляет на сервер. Сервер лезет в субд и находит magic и salt по dataSignature, отправляет её клиенту. Клиент имея F и salt считает hash(F+salt). Затем вычисляет symDecrypt(key: hash(F+salt), data: magic) что выдаст нам kSym, а магия в том, что этот kSym будет доступен только тому у кого уже есть файл F. А дальше просто — C2 просто отправляет asymCrypt(key: kPubC2, data: kSym) серверу, зашифрованные данные на сервере уже есть. Клиент C2 так же может верифицировать эти данные загрузив cipherData к себе и сравнив F с symDecrypt(key: kSym, data: cipherData).
·>После этого на сервере будут хранится только C1Secret, C2Secret, cipherData, dataSignature, salt, magic.

·>И, таки да, сервер должен мотивировать клиентов делать дедупликацию и отправлять валидный magic, т.к. сервер корректность проверить не может.


привет,
в смысле дедупликации — это просто обалденно.
Но не понятно, как решить задачу "я клиент, пускай даже тот, у кого был файл. Сейчас я, не имея файла, хочу забрать его с сервера и расшифровать".
Не могли бы Вы пояснить, что то я не соображу, как такое сделать?
Re[3]: Шифрование и дедупликация
От: · Великобритания  
Дата: 15.09.17 13:27
Оценка:
Здравствуйте, SteeLHeaD, Вы писали:

SLH>в смысле дедупликации — это просто обалденно.

SLH>Но не понятно, как решить задачу "я клиент, пускай даже тот, у кого был файл. Сейчас я, не имея файла, хочу забрать его с сервера и расшифровать".
SLH>Не могли бы Вы пояснить, что то я не соображу, как такое сделать?
Так стандартно же — взять с сервера C1Secret и cipherData, расшифровать своим приватным ключом asymDecrypt(key: kPrivC1, data: C1Secret) получится kSym и им расшифровать cipherData.

Суть в том, что kSym доступен тем и только тем, у кого есть приватные ключи или у кого есть сам файл.
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[2]: Шифрование и дедупликация
От: wildwind Россия  
Дата: 15.09.17 14:02
Оценка:
Здравствуйте, ·, Вы писали:

·>После этого на сервере будут хранится только C1Secret, C2Secret, cipherData, dataSignature, salt, magic.


Если сервер знает хэши, то он фактически знает, кто какие файлы хранит (за исключением абсолютно уникальных, которых обычно не так много).
Ну и накладные расходы, конечно, огромные.
Re[3]: Шифрование и дедупликация
От: vsb Казахстан  
Дата: 15.09.17 14:29
Оценка:
Здравствуйте, wildwind, Вы писали:

W>Если сервер знает хэши, то он фактически знает, кто какие файлы хранит (за исключением абсолютно уникальных, которых обычно не так много).

W>Ну и накладные расходы, конечно, огромные.

Дедупликация подразумевает, что сервер знает, кто какие файлы хранит. Сервер всегда может прикинуться клиентом, попробовать залить интересующий файл и определить после этого, с какими клиентами произошла дедупликация. Это вне зависимости от используемых алгоритмов и протоколов. Поэтому от такой утечки данных защититься невозможно.
Re[3]: Шифрование и дедупликация
От: · Великобритания  
Дата: 15.09.17 14:37
Оценка:
Здравствуйте, wildwind, Вы писали:

W>·>После этого на сервере будут хранится только C1Secret, C2Secret, cipherData, dataSignature, salt, magic.

W>Если сервер знает хэши, то он фактически знает, кто какие файлы хранит (за исключением абсолютно уникальных, которых обычно не так много).
Это ещё почему? Сервер будет только знать, что клиент "C1" и клиент "C2" хранят одинаковый файл, и то при условии что оба согласились на дедупликацию, дав серверу верный magic и dataSignature. И, собственно, всё.

W>Ну и накладные расходы, конечно, огромные.

Какие огромные? На каждый файл — в пределах килобайта (salt, dataSignature, magic) и на каждого клиента CnSecret — тоже килобайт. Ну и, очевидно, cipherData — равное по объёму файлу.
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.