|
RSA шифрование с помощью открытого ключа
|
|||
---|---|---|---|
#18+
Здравствуйте всем! ранее не сталкивался и не совсем понимаю как сделать правильно: есть некий сгенерированный открытый ключ Код: plaintext
с помощью него должен шифровать строку: и делаю что то вроде этого: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.
правильно ли я шифрую текст MyTestText (по ТИ текст должен быть представлен в МД5) ... |
|||
:
Нравится:
Не нравится:
|
|||
27.07.2021, 17:52 |
|
RSA шифрование с помощью открытого ключа
|
|||
---|---|---|---|
#18+
Вы не можете шифровать используя только открытый ключ. Асимметричное шифрование всегда использует ключевую пару - открытый ключ (как правило, "обёрнут" в сертификат) и закрытый ключ, хранящийся "где-то". Из-за очень низкой скорости асимметричное шифрование используют только для очень коротких данных: электронная подпись (хэш плюс имитовставка) или (ваш случай) для безопасной передачи ключа симметричного шифрования (которое на порядки быстрее). ... |
|||
:
Нравится:
Не нравится:
|
|||
27.07.2021, 18:07 |
|
RSA шифрование с помощью открытого ключа
|
|||
---|---|---|---|
#18+
Basil A. Sidorov, Не понял как закрытый ключ? Закрытый же должен храниться только у поставщика вроде как? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.07.2021, 18:27 |
|
RSA шифрование с помощью открытого ключа
|
|||
---|---|---|---|
#18+
Музаффар, да, все верно. У тебя есть открытый ключ, которым ты можешь зашифровать данные. У поставщика будет закрытый ключ, которым он может расшифровать данные. Как правило когда речь заходит про онлайн общение (узлы общаются друг с другом интерактивно), то данные шифруют симметричным ключом (например, AES). Потому как асимметричный (RSA) работает намного медленней. Когда же речь про оффлайн общение (например, зашифровать письмо), то да - приходится использовать асимметричное шифрование. Твой же пример выглядит рабочим (ты не сказал что у тебя не работает), однако не понятно чего ты пытаешься добиться. Ведь ты шифруешь не текст, а MD5 хеш от текста. Ну расшифруют с той стороны этот хеш, а что с ним делать будут? Возможно ты перепутал и нужно не зашифровать, а подписать сообщение? Т.е. само сообщение шлем (может даже и в открытом виде), а затем еще подпись чтоб убедиться что подписал именно ты. В таком случае мы сначала вычисляем хеш, а затем прогоняем через RSA подпись (не шифрование). Но подпись наоборот - делают закрытым ключом. Ведь принимающая сторона хочет убедиться что это именно ты послал. В общем дай больше информации. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.07.2021, 18:54 |
|
RSA шифрование с помощью открытого ключа
|
|||
---|---|---|---|
#18+
Stanislav Bashkyrtsev, интересно да оказывается на самом деле нужно подписать... т.е. вот такие этапы: 1. Получить хеш метода путем конкатенации Ключа Приложения и вызываемого метода 2. Подписать хеш публичным ключом и получить токен т.е. получается все это время шифровал а не подписал походу... ... |
|||
:
Нравится:
Не нравится:
|
|||
27.07.2021, 19:46 |
|
RSA шифрование с помощью открытого ключа
|
|||
---|---|---|---|
#18+
Музаффар 1. Получить хеш метода путем конкатенации Ключа Приложения и вызываемого метода 2. Подписать хеш публичным ключом и получить токен т.е. получается все это время шифровал а не подписал походу... 1. Конкатенировать ничего не надо, первый шаг - это просто получить хеш (aka digest) от текста. 2. Получить подпись этого хеша твоим приватным ключом. Ведь только ты должен мочь подписаться под своим сообщением. Ну и самому хеш вычислять не надо, вот пример отсюда , Java сама и хеш подсчитает, и подпись сформирует: Код: java 1. 2. 3. 4. 5. 6. 7. 8.
Дальше если надо - эти байты можно в строку превратить то ли в Base64, то ли в hex. Но с той стороны (которая будет проверять подпись) нужно чтоб они могли проверить подпись. Т.е. им нужны будут: твой публичный ключ, эта подпись, а так же контент который был подписан. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.07.2021, 20:08 |
|
RSA шифрование с помощью открытого ключа
|
|||
---|---|---|---|
#18+
Stanislav Bashkyrtsev, авторНе совсем: 1. Конкатенировать ничего не надо, первый шаг - это просто получить хеш (aka digest) от текста. 2. Получить подпись этого хеша твоим приватным ключом. Ведь только ты должен мочь подписаться под своим сообщением. так я поднял техИнструкцию и там точно так написано и у меня нет приватного ключа у меня есть только Код: plaintext
завтра на работе попробую, спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.07.2021, 20:23 |
|
RSA шифрование с помощью открытого ключа
|
|||
---|---|---|---|
#18+
У вас должна быть собственная ключевая пара. Асимметричное шифрование выполняется на паре "открытый ключ получателя - закрытый ключ отправителя". Расшифровка делается на паре "закрытый ключ получателя - открытый ключ отправителя". Для электронной подписи, которую должны проверять все, создаётся эфемерная ключевая пара. Далее формируем имитовставку (псевдослучайное число) и криптостойкий хэш сообщения (дайджест). Шифруем дайджест с имитовставкой на паре "эфемерный открытый ключ - собственный закрытый ключ" и уничтожаем эфемерный открытый ключ. К зашифрованным данным добавляем пару "собственный открытый ключ - эфемерный закрытый ключ" и получаем электронную подпись. Проверяющий самостоятельно вычисляет дайджест сообщения, расшифровывает данные ЭП и сверяет вычисленный дайджест с имеющимся. Совпадение гарантирует, что шифрование выполнял владелец ключевой пары, открытый ключ которой "приложен" к ЭП. Имитовставка гарантирует, что каждая электронная подпись (даже одинаковых данных) будет уникальной. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.07.2021, 04:37 |
|
RSA шифрование с помощью открытого ключа
|
|||
---|---|---|---|
#18+
если я правильно понял методы должны выгладит примерно вот так? т.е. то что оттуда приходит <RSAKeyValue><Modulus>2+VvfVJXR7JU...Fl7XHFT2YRvUP0=</Modulus><Exponent>AQAB</Exponent></RSAKeyValue> для меня будет закрытым ключом и с помощью него подписываю хэшировнный текст? Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24.
... |
|||
:
Нравится:
Не нравится:
|
|||
28.07.2021, 08:10 |
|
RSA шифрование с помощью открытого ключа
|
|||
---|---|---|---|
#18+
Basil A. Sidorov У вас должна быть собственная ключевая пара. Асимметричное шифрование выполняется на паре "открытый ключ получателя - закрытый ключ отправителя". Расшифровка делается на паре "закрытый ключ получателя - открытый ключ отправителя". Basil A. Sidorov Для электронной подписи, которую должны проверять все, создаётся эфемерная ключевая пара. Шифруем дайджест с имитовставкой на паре "эфемерный открытый ключ - собственный закрытый ключ" и уничтожаем эфемерный открытый ключ. К зашифрованным данным добавляем пару "собственный открытый ключ - эфемерный закрытый ключ" и получаем электронную подпись. Музаффар , да, это похоже на работающий код. Вот только еще обрати внимание на это: Basil A. Sidorov Далее формируем имитовставку (псевдослучайное число) Имитовставка гарантирует, что каждая электронная подпись (даже одинаковых данных) будет уникальной. Код: java 1. 2. 3. 4.
Ну а затем подписывать как подписывал. Если твой продукт очень важен и его обязательно нужно сделать правильно, то вам прийдется нанять какого-то security эксперта. Я эту тему знаю постольку поскольку. Не знаю насчет Basil A. Sidorov. На то что тебе на программерских форумах говорят про security нужно смотреть скептически. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.07.2021, 10:34 |
|
RSA шифрование с помощью открытого ключа
|
|||
---|---|---|---|
#18+
Stanislav Bashkyrtsev, ещё один интересный момент, в техинструкции показан пример на СиШарп... но у этого кода результате всегда положительные числа, у меня как положительные так и отрицательные... скорее всего я что то пропускаю, а сам не совсем знаком с этим языком... ... |
|||
:
Нравится:
Не нравится:
|
|||
28.07.2021, 11:08 |
|
RSA шифрование с помощью открытого ключа
|
|||
---|---|---|---|
#18+
Stanislav Bashkyrtsev Тут видимо речь про сохранение конфединциальности. Т.е. никто кроме проверяющего не знает кем было подписано сообщение. Открытый ключ, по своей сути, предполагает сколь угодно широкое распространиение. "Как есть" или "завёрнутым" в сертификат - не так важно.Если же нам нужна обычная подпись, то шифровать (и генерировать эфемерные ключи) не надо насколько мне известно.А теперь подумайте, только медленно и вдумчиво: как без эфемерной ключевой пары обеспечить проверку электронной подписи неопределённым (неограниченным) кругом лиц. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.07.2021, 12:03 |
|
RSA шифрование с помощью открытого ключа
|
|||
---|---|---|---|
#18+
Музаффар , в C# и на Java все будет похоже работать. Там нет проблем прочесть код на другом языке, важно - понимать механизмы, а синтаксис и так поймешь. Музаффарно у этого кода результате всегда положительные числаЭто значит что в байтах не заполнен 1ый бит. Скорей всего это не бинарные данные, а ASCII текст. Бинарные подписи могут закодировать в Base64 или hex для удобства. И не нужно пытаться сравнивать подписи по форме байт. У тебя есть способ проверить эту подпись: Код: java 1. 2. 3. 4. 5.
Basil A. Sidorov Stanislav Bashkyrtsev Тут видимо речь про сохранение конфединциальности. Т.е. никто кроме проверяющего не знает кем было подписано сообщение. Basil A. Sidorov Открытый ключ, по своей сути, предполагает сколь угодно широкое распространиение. "Как есть" или "завёрнутым" в сертификат - не так важно.Если же нам нужна обычная подпись, то шифровать (и генерировать эфемерные ключи) не надо насколько мне известно. Я не вижу проблем: 1. Мой открытый ключ публикуется в доверенном хранилище (GPG хранилище которому доверяет третья сторона, или на моем сайте, или у меня его можно запросить лично). 2. Я подписываю своим закрытым ключом данные и эти открытые данные распространяю вместе с открытой подписью. 3. Мои коллеги могут скачать как данные, так и подпись. Также они могут получить мой открытый ключ из доверенного хранилища. И проверить подпись. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.07.2021, 13:09 |
|
RSA шифрование с помощью открытого ключа
|
|||
---|---|---|---|
#18+
Stanislav Bashkyrtsev Выше в своем сообщении ты писал про проверку неограниченным кол-вом лиц 2. Я подписываю своим закрытым ключом данные и эти открытые данныеПомедитируйте над тем, что именно содержат открытые данные ЭП и как именно они проверяются. Ну или почему алгоритмы (де)шифрования на ключевых парах называются а симметричными. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.07.2021, 13:19 |
|
RSA шифрование с помощью открытого ключа
|
|||
---|---|---|---|
#18+
Stanislav Bashkyrtsev, авторв C# и на Java все будет похоже работать. Там нет проблем прочесть код на другом языке, важно - понимать механизмы Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
в том то дело, по ТИ написано надо подписать а тут вроде как шифруется? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.07.2021, 13:29 |
|
RSA шифрование с помощью открытого ключа
|
|||
---|---|---|---|
#18+
Музаффар, Цифровая подпись ДОКУМЕНТА? Или устраивает https по ГОСТ? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.07.2021, 13:44 |
|
RSA шифрование с помощью открытого ключа
|
|||
---|---|---|---|
#18+
Basil A. Sidorov А теперь подумайте, только медленно и вдумчиво: как без эфемерной ключевой пары обеспечить проверку электронной подписи неопределённым (неограниченным) кругом лиц. Внезапно: распространить среди них открытый ключ. В сертификате или явно. PS: На самом деле тут маленькая терминологическая путаница: с асимметричными алгоритмами открытый текст можно сначала "расшифровать" закрытым ключом, а потом "зашифровать" открытым для получения оригинала. Это и происходит в процессе подписи, но при чтении его описания - вгоняет в ступор. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.07.2021, 13:49 |
|
RSA шифрование с помощью открытого ключа
|
|||
---|---|---|---|
#18+
PetroNotC Sharp, не совсем документа, вот что написано в ТИ Вызов каждого метода должен сопровождаться подписью в заголовке запроса. Подписывается только хеш строки состоящей из Ключа приложения и вызываемого метода. Общий алгоритм подписи выглядит так: 1. Получить хеш метода путем конкатенации Ключа Приложения и вызываемого метода 2. Подписать хеш публичным ключом и получить токен 3. Добавить в запрос на сервер 2 заголовка с Именем Приложения и Токеном 1. Уже сделал получил <RSAKeyValue>....</RSAKeyValue> 2. а вот на втором топчусь на одном месте... 3. для реализации 3 нужен 2 ) выше кидал пример кода на шарпе... ... |
|||
:
Нравится:
Не нравится:
|
|||
28.07.2021, 13:52 |
|
RSA шифрование с помощью открытого ключа
|
|||
---|---|---|---|
#18+
Музаффар, Имхо вы https изобретаете. Зачем на уровне приложения каждый get сопровождать подписью? Есть https, есть токены (подписанные и шифрованные) ... |
|||
:
Нравится:
Не нравится:
|
|||
28.07.2021, 14:04 |
|
RSA шифрование с помощью открытого ключа
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov Внезапно: распространить среди них открытый ключ. В сертификате или явно. Как использовать только открытый ключ без парного ему закрытого? Свой - нельзя. Чужой? А чей? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.07.2021, 14:10 |
|
RSA шифрование с помощью открытого ключа
|
|||
---|---|---|---|
#18+
PetroNotC Sharp, к сожалению это не моя затея, дали задачу сказали подключиться и получить инфо, а ихними разрабами пока не удалось наладит контакт... при этом экспайред тайм у этого ключа примерно одна минута ) т.е. при каждом любом запросе я должен получить открытый ключ с ним подписать запрашиваемый метод потом дальше работать... вот как подписать хз если не помогут более знающие в этой области ) ... |
|||
:
Нравится:
Не нравится:
|
|||
28.07.2021, 14:14 |
|
RSA шифрование с помощью открытого ключа
|
|||
---|---|---|---|
#18+
Музаффар, Просто если сайт на https, то там как раз при вводе пароля и стоит RSA. 2. Он медленный поэтому его не используют с каждым запросом. Imho ... |
|||
:
Нравится:
Не нравится:
|
|||
28.07.2021, 14:16 |
|
RSA шифрование с помощью открытого ключа
|
|||
---|---|---|---|
#18+
Музаффар, Они обязаны были дать демку. Ты счас без подписи что получаешь от них? Ошибка какая? Или вообще все с нуля? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.07.2021, 14:18 |
|
RSA шифрование с помощью открытого ключа
|
|||
---|---|---|---|
#18+
Музаффар, Будет прикольно, если они тебя тестирует и подключится надо просто по SSL))) ... |
|||
:
Нравится:
Не нравится:
|
|||
28.07.2021, 14:19 |
|
RSA шифрование с помощью открытого ключа
|
|||
---|---|---|---|
#18+
PetroNotC Sharp, так говорю же по ихнему ТИ по первому пункту честно получаю Код: plaintext
и все сходится с ТИ, дальше уже с помощью этого должен подписать строку хэшированную... кстати пример кода на Шарпе уже кидал ну а дальше хз чем они думали авторОшибка какая? вроде подписал, но в моих полученных байтах имеются и отрицательные числа... далее в последнем запросе если что то не так ответом будет (по инструкции) 400 –Bad Request (ну в общем написан так: Перед тем как вызвать запустить вызываемой метод, Api проведет валидацию подписи с помощью закрытого ключа, и запустит проверку прав доступа Приложения к конкретному методу. В случае ошибки, Приложение получает ошибку 400 –Bad Request) ... |
|||
:
Нравится:
Не нравится:
|
|||
28.07.2021, 14:25 |
|
|
start [/forum/topic.php?fid=59&msg=40086735&tid=2120381]: |
0ms |
get settings: |
19ms |
get forum list: |
6ms |
check forum access: |
1ms |
check topic access: |
1ms |
track hit: |
70ms |
get topic data: |
4ms |
get forum data: |
1ms |
get page messages: |
424ms |
get tp. blocked users: |
1ms |
others: | 6ms |
total: | 533ms |
0 / 0 |