задумал я тут сделать генератор ключей на основе ассимметричного шифрования. примерно по такой схеме:
e-mail -> sha1 -> rsa(private) = serial number
публичный ключ запрятан в программе, с проверкой все понятно. (минусы этого подхода мне известны, об этом не будем )
проблема вот в чем. такой подход даст мне для одного и того же адреса строго один и тот же ключ. а если юзер купил две лицензии? вижу два варианта:
1. дописывать случайное число к e-mail'у и требовать того же от юзера при регистрации
2. выкинуть sha1 и кодировать e-mail и случайное число сразу приватным ключом. после раскодирования публичным сверять е-мэйлы. тут вопрос — сколько максимально мне позволит закодировать 1024-битный ключ? 128 байт?
"ov" <1065@users.rsdn.ru> сообщил/сообщила в новостях следующее: news:3114766@news.rsdn.ru... > задумал я тут сделать генератор ключей на основе ассимметричного шифрования. примерно по такой схеме: >
> e-mail -> sha1 -> rsa(private) = serial number
>
> публичный ключ запрятан в программе, с проверкой все понятно. (минусы этого подхода мне известны, об этом не будем ) > > проблема вот в чем. такой подход даст мне для одного и того же адреса строго один и тот же ключ. а если юзер купил две лицензии? вижу два варианта: > 1. дописывать случайное число к e-mail'у и требовать того же от юзера при регистрации > 2. выкинуть sha1 и кодировать e-mail и случайное число сразу приватным ключом. после раскодирования публичным сверять е-мэйлы. тут вопрос — сколько максимально мне позволит закодировать 1024-битный ключ? 128 байт? > > кто как поступал в таких случаях?
А почему email? Попроси указать рег. имя или ФИО, или псевдоним.
Здравствуйте, ov, Вы писали:
ov>задумал я тут сделать генератор ключей на основе ассимметричного шифрования. примерно по такой схеме: ov>e-mail -> sha1 -> rsa(private) = serial number
Если считать для 2го ключа sha1 2 раза (и т.д) то можно сгенерировать достаточно большое количесво валидных ключей для одного email.
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
GN>Если считать для 2го ключа sha1 2 раза (и т.д) то можно сгенерировать достаточно большое количесво валидных ключей для одного email.
а при проверке брать sha1, пока не совпадет? есть шанс повиснуть — вдруг кто-то 1000 лицензий купил — надо 1000 раз проверять.
не катит
Здравствуйте, ov, Вы писали:
C>>А почему email? Попроси указать рег. имя или ФИО, или псевдоним. ov>потому что ключ на e-mail отправляется. и с него же потом вопросы приходят. удобно.
Да причем тут емейл-то!?! Это называется база данных клиентов — какая разница как в ней искать (по емейлу, по имени, по обоим)? Почему потребности по сути БД клиентов должны быть отражены в ключе? А если я потом с другого мыла за советом напишу, меня что пошлют? И у меня мыл несколько и я действительно в различных ситуациях использую разные (причина проста — веб интерфейс у некий_сервер.ру мне значительне удобнее чем все остальное, и из гостей я пользуюсь почтой именно с некий_сервер.ру)
Кто мешает использовать в ключе и то, и другое? Имхо такая жесткая привязка к емейл вряд ли нужна... Как то сразу куча каких-то "не положено" вылезает....
Есть еще способ, но это только в личку — писать здесь я не буду (одна строка (емейл, ФИО неважно) а ключи разные. Заморочный конечно но есть)
C>>>А почему email? Попроси указать рег. имя или ФИО, или псевдоним. ov>>потому что ключ на e-mail отправляется. и с него же потом вопросы приходят. удобно. C>Да причем тут емейл-то!?!
от того, что я заменю мыло на имя суть проблемы не изменится.
C>Есть еще способ, но это только в личку — писать здесь я не буду (одна строка (емейл, ФИО неважно) а ключи разные. Заморочный конечно но есть)
а что в нем может быть такого секретного???
Здравствуйте, ov, Вы писали:
ov>от того, что я заменю мыло на имя суть проблемы не изменится.
Изменится — в имени пользователя можно добавить любой текст, например "(второе рабочее место)".
В общем случае ключ может иметь такой вид:
Вася Пупкин ПРИЗВОЛЬНЫЙ_ТЕКСТ [pupkin@mail.ru]
RSA_SIGNATURE
Re[3]: RSA для генерации ключей
От:
Аноним
Дата:
25.09.08 02:58
Оценка:
Здравствуйте, ov, Вы писали:
ov>а при проверке брать sha1, пока не совпадет? есть шанс повиснуть — вдруг кто-то 1000 лицензий купил — надо 1000 раз проверять. ov>не катит
Не знаю как sha1, a MD5 1000 раз посчитать — моргнуть не успеешь, не то что повиснуть.
PT>Изменится — в имени пользователя можно добавить любой текст, например "(второе рабочее место)". PT>В общем случае ключ может иметь такой вид: PT>Вася Пупкин ПРИЗВОЛЬНЫЙ_ТЕКСТ [pupkin@mail.ru] PT>RSA_SIGNATURE
ну это то, что я описал в самом первом письме — первый вариант. vasya@pupkin.ru-12345
мне это кажется неудобным.
я тут вычитал, что 1024-битный ключ дает зашифровать порядка 117 байт. проще тогда уж сформировать строчку вида:
Здравствуйте, ov, Вы писали:
ov>проблема вот в чем. такой подход даст мне для одного и того же адреса строго один и тот же ключ. а если юзер купил две лицензии? вижу два варианта: ov>1. дописывать случайное число к e-mail'у и требовать того же от юзера при регистрации ov>2. выкинуть sha1 и кодировать e-mail и случайное число сразу приватным ключом. после раскодирования публичным сверять е-мэйлы. тут вопрос — сколько максимально мне позволит закодировать 1024-битный ключ? 128 байт?
ov>кто как поступал в таких случаях?
Использую crypto++ чтобы шифровать дату сборки приложения. Для одной и той же даты эта штука при шифровании даёт разные строчки
А вообще кстати, странно, когда шифратор 2 раза шифрует одну и туже строчку и на выходе 2 одинаковых результата... тока у ленивого руки не зачешутся поискать закономерность
CEM>А вообще кстати, странно, когда шифратор 2 раза шифрует одну и туже строчку и на выходе 2 одинаковых результата... тока у ленивого руки не зачешутся поискать закономерность
такова природа ассимметричного шифрования. ему ведь это потом расшифровывать надо
впрочем, любая нормальная хеш-функция тоже даст один и тот же результат.
Здравствуйте, ov, Вы писали:
CEM>>А вообще кстати, странно, когда шифратор 2 раза шифрует одну и туже строчку и на выходе 2 одинаковых результата... тока у ленивого руки не зачешутся поискать закономерность
ov>такова природа ассимметричного шифрования. ему ведь это потом расшифровывать надо ov>впрочем, любая нормальная хеш-функция тоже даст один и тот же результат.
хм... глянул, как оно генерит электронные подписи... да, точно, одинаково... но ведь ничего не мешает перед тем как приватным ключом шифровать, использовать несимметричные методы шифрования?
ov>а что касается закономерностей в RSA.... ну ну
Ну тут же бывает по-разному... главное начать... если ключ не поломают, то другую дыру найдут(по себе знаю... пошёл писать маааленькую программку... кончилось всё написанием хакерского патча на операционку... ...каво там!... ещё не кончилось!... )
Не надо давать людям повод
Здравствуйте, ov, Вы писали:
ov>а при проверке брать sha1, пока не совпадет?
Да. (+ желательно на каждом шаге к хешу подмешивать соль, напимер номер итерации)
ov> есть шанс повиснуть — вдруг кто-то 1000 лицензий купил — надо 1000 раз проверять.
При шифровании с паролем WinRAR делает на порядки больше итераций.
ov>не катит
premature pessimization is the root of all evil
Тут, кстати, мог бы возникнуть другой вопрос — должно ли быть ограницение на количество итераций. А то возможно, пусть оно и висит, при попытке вбить невалидный ключик.
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
Здравствуйте, Carc, Вы писали:
C>Есть еще способ, но это только в личку — писать здесь я не буду (одна строка (емейл, ФИО неважно) а ключи разные. Заморочный конечно но есть)
И не надо писать, уже очевидно, что security through obscurity.
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
GN>Да. (+ желательно на каждом шаге к хешу подмешивать соль, напимер номер итерации)
жесть какая...
ov>>не катит GN>premature pessimization is the root of all evil GN>Тут, кстати, мог бы возникнуть другой вопрос — должно ли быть ограницение на количество итераций. А то возможно, пусть оно и висит, при попытке вбить невалидный ключик.
чем так, лучше уж просто блок понятных данных зашифровать при помощи RSA.
salt — обычный приём против теоретического вырождения хеша.
ov>чем так, лучше уж просто блок понятных данных зашифровать при помощи RSA.
Хозяин — барин. Хотя вообще-то, так — нет, не жесть, а просто нельзя .
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
Здравствуйте, ov, Вы писали:
ov>задумал я тут сделать генератор ключей на основе ассимметричного шифрования. примерно по такой схеме: ov>
ov>e-mail -> sha1 -> rsa(private) = serial number
ov>
ov>публичный ключ запрятан в программе, с проверкой все понятно. (минусы этого подхода мне известны, об этом не будем )
ov>проблема вот в чем. такой подход даст мне для одного и того же адреса строго один и тот же ключ. а если юзер купил две лицензии? вижу два варианта: ov>1. дописывать случайное число к e-mail'у и требовать того же от юзера при регистрации ov>2. выкинуть sha1 и кодировать e-mail и случайное число сразу приватным ключом. после раскодирования публичным сверять е-мэйлы. тут вопрос — сколько максимально мне позволит закодировать 1024-битный ключ? 128 байт?
ov>кто как поступал в таких случаях?
А вообще, зачем так сильно заморачиваться? Можно сделать примерно так:
Ключ состоит из нескольких строчек:
— ФИО
— емейл
— количество лицензий
— ...
— подпись
Подпись получается путем подписывания приватным ключем конкатенации всех предыдущих строчек в одну.
Затем получившийся ключ в программе считываете, делаете конкатенацию строк и проверяете подпись публичным ключем, зашитым в программу.
Для удобства ключ можно передавать пользователю в преобразованном виде, например в виде base64.
"ov" <1065@users.rsdn.ru> сообщил/сообщила в новостях следующее: news:3114938@news.rsdn.ru... >C>>>А почему email? Попроси указать рег. имя или ФИО, или псевдоним. > ov>>потому что ключ на e-mail отправляется. и с него же потом вопросы приходят. удобно. > C>Да причем тут емейл-то!?! > от того, что я заменю мыло на имя суть проблемы не изменится. > > C>Есть еще способ, но это только в личку — писать здесь я не буду (одна строка (емейл, ФИО неважно) а ключи разные. Заморочный конечно но есть) > а что в нем может быть такого секретного???
Абсолютно ничего