id: Гость   вход   регистрация
текущее время 07:38 18/07/2018
Автор темы: Alex_B, тема открыта 18/01/2018 11:18 Печать
Категории: инфобезопасность, защита email, атаки
https://www.pgpru.com/Форум/Криптография/ОдноразовыйБлокнотДляШифрованияКороткихСтрокe-mailОценитеПожалуйста
создать
просмотр
ссылки

"Одноразовый блокнот" для шифрования коротких строк (e-mail). Оцените пожалуйста


Добрый день,
оцените/прокомментируйте пожалуйста такую схему реального применения одноразового блокнота.


Для эксперимента хочу сделать сервис который прячет e-mail от спамботов (типа такого).


Взаимодействие с сервисом
E-mail-ы сервис хранить не будет. Работать будет так:
1. Пользователь ввел свой e-mail
2. Сервис
– зашифровал e-mail одноразовым блокнотом
– сформировал ссылку типа http://mysrv.com/ШИФРОТЕКСТ
3. Пользователь размещает ссылку у себя на сайте
4. При клике на http://mysrv.com/ШИФРОТЕКСТ сервис показывает капчу
– если проверка на человека пройдена
– сервис расшифровывает ШИФРОТЕКСТ из url, показывает пользователю e-mail


Формирование гаммы
Один и тот же блокнот(гамму) для разных e-mail использовать нельзя, поэтому гамму сервис генерировать будет так:


гамма = hash(секрет + hash(email)),


где "секрет" – строка хранится на сервере, никому не доступна
email – e-mail переданный пользователем


ШИФРОТЕКСТ = гамма⊕email


Т.к. максимальная длинна e-mail 254, функцию кеширования надо выбрать такую у которой результат не короче 254.


формирование ссылки
Ссылка будет из двух частей
http://mysrv.com/[ШИФРОТЕКСТ][hash(email)]


Таким образом
– сервис не хранит e-mail-ы
– для каждого e-mail свой одноразовый блокнот
– длинна блокнота >= длинне шифруемого сообщения(e-mail)


Единственно не соблюдается условие абсолютной случайности блокнота(гаммы).


Понятно, что для защиты e-mail от спам бота, схема годится. Хочется узнать ваше менение в режиме "параннойя".



 
Комментарии
— SATtva (18/01/2018 11:36)   профиль/связь   <#>
комментариев: 11528   документов: 1036   редакций: 4052
Главная претензия в том, какой смысл строить схему вокруг одноразового блокнота, если стойкость схемы в итоге упирается в надёжность хэш-функции (это ещё ладно) и безопасность хранения секрета (это вообще никуда не годится).
— Alex_B (18/01/2018 11:54)   профиль/связь   <#>
комментариев: 143   документов: 31   редакций: 143

Не очень понимаю. Из хеша обратно e-mail не сделаешь – ну найдется коллизия (какая-то строка хеш которой такой же как у e-mail), как это использовать?

Что то хранить все равно придется, или e-mail-ы или секрет. Есть способы это избежать?
— SATtva (18/01/2018 12:48)   профиль/связь   <#>
комментариев: 11528   документов: 1036   редакций: 4052
Зачем вам здесь одноразовый блокнот? Только в качестве пороговой схемы? Тогда лучше так и писать (или вообще не упоминать одноразовый блокнот, т.к. он предполагает вполне определённые условия и порядок применения), чтобы не возникало коленного рефлекса .


Как минимум, замените на HMAC.


У всех вменяемых хэш-функций длина свёртки не превышает 64 байта (единственное исключение — SHA-3). Обойти ограничение на длину достаточно просто: использовать вывод от HMAC как ключ шифра в CTR-режиме, гамму которого уже и ксорить с емэйлом. Не забудьте паддинг, чтобы исключить утечку длины емэйла.


Единый секрет создаёт риск того, что при взломе сервера можно будет восстановить любые емэйлы, и при этом делает невозможным graceful recovery, т.к. смена секрета инвалидирует все уже используемые обфусцированные емэйлы. Надёжная схема действительно предполагает хранение какого-то уникального состояния для каждого емэйла. Решайте сами, что вам важнее: statelessness или безопасность.
— Alex_B (19/01/2018 13:08, исправлен 19/01/2018 13:11)   профиль/связь   <#>
комментариев: 143   документов: 31   редакций: 143

Сейчас условие случайности ключа (гаммы) не выполняется – ключ не случайный, рассчитывается по формуле. Товарищ предложил способ добавить рандома в ключ:
После выравнивая e-mail по длине (паддинг) добавить в конце случайные байты.
Т.е. вот так будет


random = генерировать_рандом()
гамма = hash(секрет + hash(email + random))
ШИФРОТЕКСТ = гамма⊕(email + random)


После расшифровки отрезать с конца известную длину random

— SATtva (19/01/2018 16:52)   профиль/связь   <#>
комментариев: 11528   документов: 1036   редакций: 4052
Окей, добавлением nonce вы предотвращаете подбор шифртекста. Но как вы теперь восстановите исходный емэйл, если этот random нигде не хранить? Или вы отказались от stateless-схемы?
— Alex_B (19/01/2018 16:56)   профиль/связь   <#>
комментариев: 143   документов: 31   редакций: 143

Я восстанавливаю e-mail с рандомом. Я знаю, что рандом расположен в конце и знаю какой он длины, удаляю рандом. И получаю e-mail
— qubit (20/01/2018 17:53)   профиль/связь   <#>
комментариев: 4   документов: 0   редакций: 0
Доброе утро,

Идея интересная и она работает пока сервис обслуживает 1.5 анонимуса, когда база становится обширной, пишется парсилка перехода по ссылке на сервис mysrv.com/ШИФРОТЕКСТ затем к этому подключается сервис расшифровки капчи (если ты постоянный клиент там вообще копейки это стоит), и вся защита накрывается медным тазом.

Куда проще и безопасней написать простой жаба скрипт обфускации мыла, а после рендера в браузере он становится нормальным, это мешает 99% ботов занести мыло в базу, причина тут проста, мне проще парсить в 1000 потоков статику, чем сувать страницу в js песочницу, которая отожрет куча памяти, даст дикую задержку, ибо скрипты нынче весят много, на большинстве сайтов любят тянуть по 5 мегабайт jsа, с их лендингами, снежком и другими рюшечками. Поэтому спамеры обычно не пользуются js песочницами, потому, что для спама нужно минимум пару лямов мыльников, чтобы заработать пару баксов. Для получения базы хотяб на лярд, песочница не подходит. А если и нашелся 1% энтузиастов, обычно в крупные базы их мыльники не попадают. Пользуюсь этим способом лет 10, и спама не было, точнее был, но не из-за того, что кто-то распарсил сайт, а из-за плагинов браузера, которые собирают мыльники.

E-mail-ы сервис хранить не будет. Работать будет так:
1. Пользователь ввел свой e-mail

Так мы и поверили.

Кстати ирония с гугла, там по ссылке пишут:
Кстати, ваш адрес будет у нас в полной безопасности. Мы-то не спамеры и никому его не передадим!

Сказала компания, которая анализирует текст в почте, чтобы предоставлять таргетинговую рекламу.

Ну, а еще не совсем ясно, каким образом будет соблюдаться одноразовость, если указывается, что пользователь получает ссылку и размещает её на сайте, значит она статичная? Тогда получается, капчу нужно пройти всего 1 раз.

Но еще важнее вопрос, на кого идет расчет? Если на домохозяек, то им проще дропнуть сайт, пойти на следующий, где их не заставят заниматься мазохизмом с капчей. В интернете есть аксиома, обычный пользователь (домохозяйка) при работе с компьютером имеет IQ 3 летнего ребенка, для них прохождение капчи, сложно, непонятно. Если расчет на гиков, ну вы и сами понимаете, что им это не интересно.

В целом для продакшина схема не рабочая как например различные js крипто-почты (хотя есть веруны), якобы никто кроме тебя не может расшифровать переписку... Если для академического интереса, то можно и поиграться.

Ну и в заключении, это сугубо мое ИМХО.
— SATtva (21/01/2018 07:23)   профиль/связь   <#>
комментариев: 11528   документов: 1036   редакций: 4052
Всё так на самом деле.
— Alex_B (21/01/2018 09:24, исправлен 21/01/2018 11:23)   профиль/связь   <#>
комментариев: 143   документов: 31   редакций: 143

Спасибо за комментарии. Конечно это в академических целях.



Ссылка статичная для одного email (передавая сервису один и тотже e-mail каждый раз получится другая ссылка). Да надо пройти 1 капчу что бы увидеть 1 e-mail. Что бы увидеть 2-й e-mail надо пройти 2-ю капчу. Разве тут кроется проблема?

— Alex_B (21/01/2018 13:16)   профиль/связь   <#>
комментариев: 143   документов: 31   редакций: 143
Благодаря комментариям SATtva "изобрел" потоковый шифр – Потоковый шифр на основе хеш-функции и Counter Mode Encryption CTR
Ваша оценка документа [показать результаты]
-3-2-1 0+1+2+3