Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

RSA

1.9K
22 июня 2009 года
tva94
115 / / 01.05.2007
Недавно попалась на глаза статья по защите приложений от копирования с использованием RSA. Там говорится, что RSA может работать в двух режимах - шифровать любым и дешифровать только приватным, или дешифровать любым, а шифровать только приватным. Реализовать первый метод элементарно, но меня интересует второй. Я в гугле искал - пусто. Может не так поставил вопрос. Меня интересует возможность реализации второго режима под .NET, в часности на C#. Просто про этот метод много пишут, а методы реализации не указаны.
14
22 июня 2009 года
Phodopus
3.3K / / 19.06.2008
А разве там не просто ключи местами меняются?
1.9K
22 июня 2009 года
tva94
115 / / 01.05.2007
Приватный имеет право и на шифрование и на дешифрование, как знаю
294
22 июня 2009 года
Plisteron
982 / / 29.08.2003
Цитата: tva94
Приватный имеет право и на шифрование и на дешифрование, как знаю


Коллеги! Не надо гадать на кофейной гуще. В Википедии всё доходчиво написано.
Зашифровываем одним ключом, расшифровываем другим. Иначе бы цифровая подпись по схеме Эль-Гамаля была бы невозможна.

294
22 июня 2009 года
Plisteron
982 / / 29.08.2003
Цитата: tva94
Недавно попалась на глаза статья по защите приложений от копирования с использованием RSA. Там говорится, что RSA может работать в двух режимах - шифровать любым и дешифровать только приватным, или дешифровать любым, а шифровать только приватным.

Зашифровываем только одним, расшифровываем только другим. Какой из них открытый, а какой секретный, зависит только от поставленной задачи. Основная тонкость RSA -- генерация сильных ключей (далеко не каждый формально подходящий ключ является стойким).

Цитата: tva94
Просто про этот метод много пишут, а методы реализации не указаны.

Можно поискать GnuPG или LibTomCrypt. Там, в числе прочих, есть RSA (правда, на C++).

PS. А если мы сообщение не расшифровываем, а дешифруем -- значит, мы служим в ФСБ, ибо дешифрование, по А. П. Алфёрову, -- процесс получения исходного текста из шифртекста при неизвестном нам ключе расшифрования.

14
22 июня 2009 года
Phodopus
3.3K / / 19.06.2008
Цитата: tva94
Приватный имеет право и на шифрование и на дешифрование, как знаю


нет. Открытым (они) - шифруют, закрытым - (ты) расшифровываешь. Это классическое шифрование. Открытым (ты) - шифруешь, закрытым - (они) расшифровывают - это ЭЦП. Только здесь сам смысл меняется, и то что я в последнем случае назвал открытым, на самом деле становится закрытым (ибо ты не хочешь чтоб кто-либо имел возможность сделать тоже самое - зашифровать), и наоборот.

Цитата: Plisteron
Коллеги! Не надо гадать на кофейной гуще.


:) я и не гадал. В википедию лень было лезть и было маааленькое сомнение что я RSA с чем-то другим путаю

294
22 июня 2009 года
Plisteron
982 / / 29.08.2003
Цитата: Phodopus
Открытым (ты) - шифруешь, закрытым - (они) расшифровывают - это ЭЦП.

Примерно тем же способом работает обмен ключами для создания защищённого канала. Мы с Васей Пупкиным обмениваемся открытыми ключами для зашифрования, потом с помощью полученных открытых ключей зашифровываем свои секретные (которые применяются для расшифрования) и обмениваемся зашифрованными секретными ключами. Дальше Вася Пупкин своим секретным ключом расшифровывает мой, а я своим -- Васин. Вуаля! Как расшифровать защищённый трафик, знают только двое: я и Вася Пупкин.
Это, конечно, упрощённо. В реальной жизни нужна ещё и сертификация ключей.

1.9K
23 июня 2009 года
tva94
115 / / 01.05.2007
Что я вам хочу сказать. Я на C# проводил тесты по возможностям ключей. Что вышло:
1) Оба ключа могут зашифровать данные
2) Только приватный может их дешифровать.
Из этого следует что приватный имеет возможность выполнять обе операции
Вот пример кода:

textBox1.Text - публичный ключ
textBox2.Text - приватный ключ

Код:
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(1024);

            rsa.FromXmlString(textBox1.Text);

            byte[] data = new byte[] { 1, 3, 5 };

            byte[] cr = rsa.Encrypt(data, false);

            rsa.FromXmlString(textBox2.Text);

            byte[] ret = rsa.Decrypt(cr, false);


Это работает, но

Код:
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(1024);

            rsa.FromXmlString(textBox2.Text);

            byte[] data = new byte[] { 1, 3, 5 };

            byte[] cr = rsa.Encrypt(data, false);

            rsa.FromXmlString(textBox1.Text);

            byte[] ret = rsa.Decrypt(cr, false);

уже не работает,. Вылетает еррор: плохой ключ.

Если кому надо, код генерации ключей:
 
Код:
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(1024);

            textBox1.Text = rsa.ToXmlString(false);
            textBox2.Text = rsa.ToXmlString(true);
241
23 июня 2009 года
Sanila_san
1.6K / / 07.06.2005
Если я не гадаю на кофейной гуще, то по закрытому ключу можно вычислить открытый, но не наоборот. Поэтому так и работает.
1.9K
23 июня 2009 года
tva94
115 / / 01.05.2007
Я ещё чуть почитал и нашел следуещее:
Есть такой алгоритм: DSA, который позволяет закрытым ключём создать цифровую подпись к данным, а проверить можна любым. RSA не для этого. Я думаю, что эту тему можна закрыть. Спасибо за содействие.
14
23 июня 2009 года
Phodopus
3.3K / / 19.06.2008
Цитата: tva94

Если кому надо, код генерации ключей:


пригодилось. По нему используя MSDN мы можем увидеть оплошность:

Цитата: tva94

textBox1.Text - публичный ключ
textBox2.Text - приватный ключ


[QUOTE=MSDN]
true to include a public and private RSA key; false to include only the public key
[/QUOTE]
так что во втором случае далеко не только прив. ключ. Незнаю как вы это по XML не заметили.

1.9K
26 июня 2009 года
tva94
115 / / 01.05.2007
Я видел, я в общем говорил "приватный" и публичный", но как проблема решена тему можна закрыть
14
29 июня 2009 года
Phodopus
3.3K / / 19.06.2008
Только надо восстановить справедливость в части моих высказываний. Как показали последние исследования :) пара ключей RSA не меняет своих статусов при использовании шифрования и ЭЦП, т.е.:
- закрытый (приватный) ключ используется для подписания (ЭЦП) и расшифровки (шифрование)
- открытый (публичный) ключ используется для проверки (ЭЦП) и шифрования
т.о. утверждения о смене ролей ключей в соотв. алгоритме считать неверными.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог