Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Программирование Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Вопрос по хэшированию  [new]
alekcvp
Member

Откуда:
Сообщений: 2236
Есть такое понятие как HMAC - это некоторая хэш-функция, которая получает на вход данные и ключ и возвращает хэш, значение которого для данных зависит от ключа, т.е. hash = hh(key, data).

Вопрос: существует ли в природе какой-нибудь механизм, который позволяет для одинаковых данных получать одинаковое значение хэша при различных ключах. Т.е. у одного человека есть ключ key1, у другого - key2, и требуется что-то вроде hash = hh2(key1, x1, data) = hh2(key2, x2, data), где x1, x2 - некоторые дополнительные параметры, не секретные, которые можно вычислить зная hash, data и keyX.

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

Сообщение было отредактировано: 31 июл 20, 15:57
31 июл 20, 15:58    [22176291]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по хэшированию  [new]
hVostt
Member

Откуда:
Сообщений: 17937
alekcvp,

https://ru.wikipedia.org/wiki/Протокол_Диффи_—_Хеллмана

не?
31 июл 20, 17:32    [22176349]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по хэшированию  [new]
alekcvp
Member

Откуда:
Сообщений: 2236
hVostt
alekcvp,
https://ru.wikipedia.org/wiki/Протокол_Диффи_—_Хеллмана
не?

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

Сообщение было отредактировано: 31 июл 20, 18:44
31 июл 20, 18:46    [22176382]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по хэшированию  [new]
mini.weblab
Member

Откуда:
Сообщений: 1014
в вопросе хэширования не разбираюсь, но скажу :)
с точки зрения математики, вам нужно подобрать функцию, которая будет возвращать одни и те же значения при разных ключах
пример


т.е да, конечно, механизм существует, и это подбор функции с нужными свойствами

Сообщение было отредактировано: 31 июл 20, 19:08
31 июл 20, 19:10    [22176391]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по хэшированию  [new]
Dima T
Member

Откуда:
Сообщений: 14879
alekcvp
где x1, x2 - некоторые дополнительные параметры, не секретные, которые можно вычислить зная hash, data и keyX.

Нет такого.

ИМХО ты ЭЦП изобретаешь. Используй асиметричное шифрование и открытый ключ каждого храни в общедоступном месте.
31 июл 20, 20:59    [22176419]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по хэшированию  [new]
Aleksandr Sharahov
Member

Откуда: Москва
Сообщений: 1982
alekcvp
Есть такое понятие как HMAC - это некоторая хэш-функция, которая получает на вход данные и ключ и возвращает хэш, значение которого для данных зависит от ключа, т.е. hash = hh(key, data).

Вопрос: существует ли в природе какой-нибудь механизм, который позволяет для одинаковых данных получать одинаковое значение хэша при различных ключах. Т.е. у одного человека есть ключ key1, у другого - key2, и требуется что-то вроде hash = hh2(key1, x1, data) = hh2(key2, x2, data), где x1, x2 - некоторые дополнительные параметры, не секретные, которые можно вычислить зная hash, data и keyX.

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


Например, выбираем такой hash(key,data)=f(key) xor g(data) и такой x=f(key)

Тогда hh2(key, x, data)=hh2(key, f(key), data)=hash(key,data) xor f(key)=f(key) xor g(data) xor f(key)=g(data) не зависит от key

Но чужой hash при этом, конечно, вычислить можно

Сообщение было отредактировано: 31 июл 20, 22:36
31 июл 20, 22:36    [22176433]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по хэшированию  [new]
Aleksandr Sharahov
Member

Откуда: Москва
Сообщений: 1982
или еще проще:

hash(key,data)=f(key) xor g(data)

hh2(data)=g(data)

но тут и выше не HMAC, разумеется

Сообщение было отредактировано: 31 июл 20, 23:32
31 июл 20, 23:30    [22176435]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по хэшированию  [new]
alekcvp
Member

Откуда:
Сообщений: 2236
Спасибо, буду думать.

Ещё в голову пришла мысль использовать в качестве x1 и x2 некий common_key, зашифрованный соответственно key1 и key2. И уже с ним вычислять hmac от data. Не совсем по тз, но вроде самый простой вариант.
1 авг 20, 11:16    [22176498]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по хэшированию  [new]
hVostt
Member

Откуда:
Сообщений: 17937
alekcvp
Не, это согласование ключей.


Так вам ключ и нужен для получения хеша.


alekcvp
одинаковый хэш с использованием разных ключей.


Это противоречит сути хеша.


Вообще, вы бы лучше задачу конечную озвучили. Какую проблему решаете?

Потому что сейчас выглядит как обсуждение выбранного вами решения, которого не существует.
1 авг 20, 17:06    [22176552]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по хэшированию  [new]
mayton
Member

Откуда: loopback
Сообщений: 47949
Надо детализировать вот это техническое задание.

некоторого подобия генератора OTP который можно будет синхронизировать для разных людей, не обмениваясь при этом ключами друг-друга.


Что такое генератор OTP? ХЗ. Тут много аббревиатур подходит.
1 авг 20, 23:51    [22176617]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по хэшированию  [new]
hVostt
Member

Откуда:
Сообщений: 17937
mayton,

One Time Password, какие ещё могут подойти в обозначенном контексте?
2 авг 20, 01:51    [22176625]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по хэшированию  [new]
alekcvp
Member

Откуда:
Сообщений: 2236
hVostt
Вообще, вы бы лучше задачу конечную озвучили. Какую проблему решаете?

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

Сообщение было отредактировано: 2 авг 20, 10:15
2 авг 20, 10:15    [22176645]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по хэшированию  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 50773
alekcvp
При этом необходимо чтобы два пользователя имели возможность генерировать одинаковые пароли, не зная паролей друг-друга.

Это противоречит самой идее одноразовых паролей. Даже один пользователь не должен иметь возможности сгенерировать одинаковый пароль, не то что два.
2 авг 20, 14:01    [22176686]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по хэшированию  [new]
mayton
Member

Откуда: loopback
Сообщений: 47949
alekcvp
чтобы два пользователя имели возможность генерировать одинаковые пароли, не зная паролей друг-друга. Причём приложение генерации паролей работает изолированно, т.е. никакой связи с сервером или другими экземплярами. Для синхронизации одноразово передаётся некоторый минимальный объем данных, который можно ввести в приложение вручную, желательно не секретный (зашифрованный RSA?).

Если речь идет об одинаковой авторизации для всех так она и решается как раньше. Разным
пользователям выдается какая-то группа привилений. И они ходят по прежнему под своими
учотками.

А любая попытка как-то смеждить или соединить процесс аутентификации - приводит к сложному
и далеко идущему вопросу нарушения безопасности. Надо ответить на вопрос - что на самом деле
это нам дает и не ухудшает ли безопасность такое послабление правил.

Злоумышленники не дремлют и любую слабость в вашей системе - они систематически расшатывают.
Может закончиться (как вариант) подлогом учетных данных и подставой другого пользователя
который ни в чем не виноват но действия производились от его имени.
2 авг 20, 14:12    [22176689]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по хэшированию  [new]
Aleksandr Sharahov
Member

Откуда: Москва
Сообщений: 1982
alekcvp
hVostt
Вообще, вы бы лучше задачу конечную озвучили. Какую проблему решаете?

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


почему нельзя передавать некоторое общее для всех клиентов число,
с использованием которого они вычислят свои новые пароли?
2 авг 20, 15:39    [22176711]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по хэшированию  [new]
alekcvp
Member

Откуда:
Сообщений: 2236
Dimitry Sibiryakov
Это противоречит самой идее одноразовых паролей. Даже один пользователь не должен иметь возможности сгенерировать одинаковый пароль, не то что два.

Я не просто так написал "некое подобие", если бы мне был нужен просто генератор ОП - я бы взял google auth и не изобретал велосипед...
Aleksandr Sharahov
почему нельзя передавать некоторое общее для всех клиентов число,
с использованием которого они вычислят свои новые пароли?

Потому что у меня стоит обратная задача: позволить клиентам вычислить общее для всех "число", используя их любимые пароли...
2 авг 20, 18:34    [22176749]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по хэшированию  [new]
mini.weblab
Member

Откуда:
Сообщений: 1014
что-то типа Badoo?
2 авг 20, 18:38    [22176752]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по хэшированию  [new]
Aleksandr Sharahov
Member

Откуда: Москва
Сообщений: 1982
alekcvp

Aleksandr Sharahov
почему нельзя передавать некоторое общее для всех клиентов число,
с использованием которого они вычислят свои новые пароли?

Потому что у меня стоит обратная задача: позволить клиентам вычислить общее для всех "число", используя их любимые пароли...


Тогда почему нельзя слеить хеши паролей клиентов в порядке возрастания и хеш от этой склейки использовать как общее число?

Как могут общаться клиенты?
2 авг 20, 19:29    [22176761]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по хэшированию  [new]
hVostt
Member

Откуда:
Сообщений: 17937
alekcvp
Генерацию одноразовых паролей.
Идея была такая: алгоритм не секретный. Сам пароль генерируется на основе текущего времени и ещё каких-нибудь данных (в т.ч. пароля пользователя). При этом необходимо чтобы два пользователя имели возможность генерировать одинаковые пароли, не зная паролей друг-друга. Причём приложение генерации паролей работает изолированно, т.е. никакой связи с сервером или другими экземплярами. Для синхронизации одноразово передаётся некоторый минимальный объем данных, который можно ввести в приложение вручную, желательно не секретный (зашифрованный RSA?).


Вы опять рассказываете какое-то выдуманное вами решение. Поймите, всё уже придумано до нас, огромный мир миллиарды человек, сотни тысяч и миллионы программных систем.

Задачу какую решаете? Что хотите добиться? OTP -- это решение! Вы задачу озвучьте. Что, для кого, зачем, что в итоге?

Я вам алгоритм выше ссылку кинул, решение давно известное.

Такого как вы хотите: два разных ключа -- одинаковый хеш, такого не может быть в принципе, даже в теории. Это противоречит самой сути хеша, где изменение любого бита в исходных данных полностью меняет весь хеш. И вообще непонятно чего вам надо в итоге.
2 авг 20, 19:34    [22176763]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по хэшированию  [new]
hVostt
Member

Откуда:
Сообщений: 17937
Ещё раз.


https://ru.wikipedia.org/wiki/Протокол_Диффи_—_Хеллмана

Протокол Ди́ффи — Хе́ллмана (англ. Diffie–Hellman, DH) — криптографический протокол, позволяющий двум и более сторонам получить общий секретный ключ, используя незащищенный от прослушивания канал связи. Полученный ключ используется для шифрования дальнейшего обмена с помощью алгоритмов симметричного шифрования.


Чем противоречит вашей задаче? Можете прям указать, что здесь не так?
И опять же никто тут понятия не имеет чего вы и зачем делаете.

Поэтому если вы не расскажете нам, то просто мы все тут тратим зря время.
2 авг 20, 19:36    [22176766]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по хэшированию  [new]
alekcvp
Member

Откуда:
Сообщений: 2236
Хорошо, приношу свои извинения, не буду больше тратить ваше время.

Сообщение было отредактировано: 2 авг 20, 21:02
2 авг 20, 21:04    [22176786]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по хэшированию  [new]
mayton
Member

Откуда: loopback
Сообщений: 47949
Автор почитай ещё про разделяемый секрет Шамира.
Можете подойдет.
2 авг 20, 21:11    [22176790]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по хэшированию  [new]
alekcvp
Member

Откуда:
Сообщений: 2236
Aleksandr Sharahov

Тогда почему нельзя слеить хеши паролей клиентов в порядке возрастания и хеш от этой склейки использовать как общее число?
Потому что нужно независимое (с т.з. каждого пользователя) решение, способное работать без сети.
Aleksandr Sharahov
Как могут общаться клиенты?
Никак.
2 авг 20, 21:15    [22176792]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по хэшированию  [new]
alekcvp
Member

Откуда:
Сообщений: 2236
mayton
Автор почитай ещё про разделяемый секрет Шамира.
Можете подойдет.

Спасибо.
2 авг 20, 21:18    [22176793]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по хэшированию  [new]
Anatoly Moskovsky
Member

Откуда: Odessa
Сообщений: 6530
alekcvp
Потому что нужно независимое (с т.з. каждого пользователя) решение, способное работать без сети.

Если нет общего секрета, выданного заранее, то невозможно.
2 авг 20, 21:50    [22176795]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Программирование Ответить