![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
tofreesky |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 152 Регистрация: 9.6.2010 Репутация: нет Всего: нет |
Весь листинг из примеров из rsdn. Вопрос -- почему входной файл расшифровывается тем же публичным ключом, ведь должен приватным.
|
|||
|
||||
tofreesky |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 152 Регистрация: 9.6.2010 Репутация: нет Всего: нет |
Это так выходит, когда все выполняется единоразово, а если запустить программу два раза, с отдельными действиями для шифрования и расшифровывание, то публичный ключ для расшифровывания не подойдет. Теперь экспортировал приватный ключ, но и им раскриптовать данные не удается.
Ошибка импорта 0x80090003 (NTE_BAD_KEY) Это сообщение отредактировал(а) tofreesky - 8.2.2012, 23:47 |
|||
|
||||
volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 37 Всего: 85 |
tofreesky, очень перегруженная функция. Скорей всего запутались где-то в скобках.
Такой код понять трудно даже вам самому, почему вы думаете что другим будет легче? Вот наприме строки у вас очень не плохо получилось зашифровать ![]() tofreesky, поробуйте разбить функцию на несколько штук, вменяемого размера. Возможно после этого, и помощь уже не понадобится |
|||
|
||||
tofreesky |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 152 Регистрация: 9.6.2010 Репутация: нет Всего: нет |
Я же сказал что это с rsdn, тут код не большой и понятный. Так по делу есть какие-то мысли?
На 104 строке где расшифровка, ведь передаваемый приватный ключ был зашифрован сессионным, который нигде не сохранен, из-за этого и ошибка? |
|||
|
||||
feodorv |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 11 Всего: 45 |
Это не так. Файл шифруется и дешифруется сессионным ключом, который является симметричным, то есть одинаковым для шифрования и дешифрования. А вот уже сам сессионный ключ шифруется публичным пользовательским ключом и дешифруется приватным. Заголовок с зашифрованным (посредством публичного пользовательского ключа) сессионным ключом прилагается к зашифрованному (посредством сессионного ключа) файлу. Также создаётся специальный файл, содержащий публичный ключ (в коде так и написано: "для обмена"). При дешифровке из репозитария ключей извлекается закрытый пользовательский ключ, им расшифровывается сессионный, а уже последним файл. Вот это странно, так как:
Это сообщение отредактировал(а) feodorv - 9.2.2012, 02:49 -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
||||
|
|||||
tofreesky |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 152 Регистрация: 9.6.2010 Репутация: нет Всего: нет |
Все равно ничего нового, вот немного измененный код:
GenerateKey(); генерирует приватный и публичный ключи ProcessFile(); шифрует или расшифровывает в зависимости от четвертого параметра. Так вот, теперь не выходит расшифровать файл приватным ключом, NTE_BAD_KEY при импорте. В чем дело? Он же шифруется еще и сессионым, а он ни где не сохранятся, значит его нужно сохранить и предварительно расшифровать приватный ключ? Но как? |
|||
|
||||
feodorv |
|
||||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 11 Всего: 45 |
Ещё раз. По оригинальному коду MS. Файл шифруется и расшифровывается симметричным сессионным ключом. Он создаётся при "encode":
Таким образом, hKey (сессионный ключ) шифруется с помощью hPubKey (открытый пользовательский ключ), и всё это записывается в виде набора байт в kb. А уже потом структура EncFileHeader вместе с зашифрованным сессионным ключом сбрасывается в выходный файл в виде заголовка этого файла, после которого будет записано шифруемое содержимое оригинального файла. Поэтому: в корне не верно:
Добавлено через 5 минут и 27 секунд И для полной картины не хватает
-------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
||||||||
|
|||||||||
tofreesky |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 152 Регистрация: 9.6.2010 Репутация: нет Всего: нет |
Все равно не понятно почему приватным ключом не удается расшифровать файл?
tools.h
|
|||
|
||||
tofreesky |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 152 Регистрация: 9.6.2010 Репутация: нет Всего: нет |
В общем надо забить на эту все кривую реализацию RSA у MS, на другой системе уже падает на:
Самом начале функции
С ошибкой NTE_BAD_KEYSET. Есть ли нормальные либы для RSA, только не по 25 мб, которые. |
|||
|
||||
feodorv |
|
||||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 11 Всего: 45 |
Прилизал немного код и перевёл в Си:
Файл нормально зашифровывается и расшифровывается, только подпись не проходит проверку, пока не разобрался, почему. Добавлено через 13 минут и 53 секунды Разобрался. Для подписи использовался приватный AT_SIGNATURE ключ, а для проверки подписи - публичный AT_KEYEXCHANGE ключ. Нестыковочка ![]() Достаточно в коде
поменять AT_SIGNATURE на AT_KEYEXCHANGE и... все работает!!! Всё, даже вариант без
![]() Это сообщение отредактировал(а) feodorv - 9.2.2012, 19:15 -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
||||||||
|
|||||||||
feodorv |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 11 Всего: 45 |
Что-то я сомневаюсь, что понятный ![]() Ха, может, криво где-то в другом месте??? -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
|||
|
||||
tofreesky |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 152 Регистрация: 9.6.2010 Репутация: нет Всего: нет |
Только я не пойму что нового в вашем коде, по прежнему те же изначальные проблемы, приватный ключ не расшифровывает сообщение, да и генирирование приватного ключа в вашем коде нет.
|
|||
|
||||
feodorv |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 11 Всего: 45 |
Так это тот же майксрософтовский код, только сизированный ![]() А вот новое это то, что он работает. Не понял, о чём Вы. Ох... Может Вы имеете в виду, что , но никакого отношения к расшифровке файла, да ещё и приватным(!) ключом это не имеет. -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
|||
|
||||
tofreesky |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 152 Регистрация: 9.6.2010 Репутация: нет Всего: нет |
Так в чем смысл, это получается симметричное шифрование, а не асимметричность, раз можно зашифровать и расшифровать одним ключом.
Добавлено через 10 минут и 13 секунд
|
|||
|
||||
feodorv |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 11 Всего: 45 |
Сам файл шифруется симметричным сессионным ключом, который должен быть ещё передан вместе с зашифрованным файлом, чтобы его ещё можно было расшифровать. А вот уже сессионный ключ шифруется открытым (несимметричным) пользовательским ключом и дешифруется закрытым пользовательским. Такая схема совершенно обычна в современной криптографии. Если Вы начнёте закрытым ключом шифровать всё подряд (чтобы послать данные владельцу открытого), то опытный криптолог в конце концов сможет вычислить Ваш закрытый ключ, имея на руках множество данных. В то же время, сессионный ключ короткий (256 байт), почти случайный, существует короткое время - на сессию (то есть не повторяется), фиг выявишь какие-то закономерности в паре закрытый/открытый ключ ![]() -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |