Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > как применять RSA TurboPower LockBox


Автор: klyaksa 14.7.2011, 19:18
Поставил TurboPower LockBox. Хочу использовать из него RSA. Примеры работают.
Как его правильно использовать? Т.е. надо ключ сгенирировать ключ, как его сохранить (т.е. что и в каком виде) и вставить в одну (закрытая) и другую (открытую) часть программы?
Поясните, если можете.

Автор: kami 14.7.2011, 19:30
Цитата(klyaksa @  14.7.2011,  19:18 Найти цитируемый пост)
ключ сгенирировать ключ

правильно.
один из основных принципов использования:
1. Корреспонденты генерируют (каждый - свои) пары ключей.
2. открытый ключ сообщается корреспонденту.
3. Когда корреспонденту нужно отправить данные, он шифрует их полученным открытым ключем.
4. Второй корреспондент, получив зашифрованные данные, дешифрует их своим закрытым ключем (в принципе, другого закрытого ключа у него и нет).
Вот как-то так. Получается, что каждая из сторон знает, как зашифровать информацию, а вот расшифровать может только владелец закрытого ключа.
Осталось только добавить, что асимметричные ключи не применяют для длительного обмена информацией, а используют для безопасного обмена ключами для симметричных (блочных) алгоритмов шифрования (например, blowfish)

Автор: klyaksa 14.7.2011, 21:24
Я вот что не пойму - ключ я создам (хотя бы программой из turbopower_lockbox_for_delphi_2009\examples\Delphi
Но в каком виде ключи распихать по программам? Как строки?
И что это такое LbRSA1.PrimeTestIterations в примере что создает пару ключей?

Добавлено через 6 минут и 7 секунд
п.с. пробую вот какую версию
URL:: http://cc.embarcadero.com/Download.aspx?id=26160
Сохранён в:: ****\26160_turbopower_lockbox_for_delphi_2009.ZIP
Размер:: 306 KБ (313 025 байт)


Автор: kami 15.7.2011, 12:10
Цитата(klyaksa @  14.7.2011,  21:24 Найти цитируемый пост)
в каком виде ключи распихать по программам? Как строки?

А вот это уже зависит от задачи и порядка использования ключей.
У меня в одном из проектов ключи не "распихиваются", а генерируются при каждом запуске, и при каждом запуске обе программы обмениваются открытыми ключами. Хранятся - кажется, да, как строки (хотя - какая разница, как они представлены? Главное, чтобы это представление без труда "влезало" в компонент, работающий с RSA).
P.S. Здесь и далее под "у меня" с равной степенью можно читать как imho.

Автор: firstvirus 1.9.2011, 15:25
Серверное приложение имеет статический RSA ключ. Клиентское приложение знает его открытый ключ. Генерирует свои ключи, и свой открытый ключ отсылает серверу в сообщении зашифрованном ключом сервера. Прием сообщения и его дешифровка происходят нормально, однако при попытке положить ключ в хранилище серверное приложение сбоит и клиент теряет с ним связь.
Код

if Client.RSA=nil then  // Если объект RSA отсутствует...
  begin
  Client.RSA:=TLbRSA.Create(ServerForm);  // ... то создаем его и задаем размер ключа
  Client.RSA.KeySize:=TAsynmKeySize(aks128);
  end;
DecryptedMessage:=ServerRSA.DecryptString(CommBlock.Msg);  // Расшифровываем полученную от клиента строку
Log.Lines.Add('Расшифрованное сообщение: '+DecryptedMessage); //Пишем в лог расшифрованную строку с ключами
Client.RSA.PublicKey.ModulusAsString:=KeyParser(DecryptedMessage,1);  // парсим модулус   <-- здесь возникает ошибка при дебаге. При рантайме клиент тупо отваливается от сервера и следуящая строчка не пишет в лог ничего
Log.Lines.Add('Модуль ключа: '+Client.RSA.PublicKey.ModulusAsString);
Client.RSA.PublicKey.ExponentAsString:=KeyParser(DecryptedMessage,2);


Вопрос: А правильно ли я записываю ключ клиента?

P.S. Периодически при дебаге вижу такую ошибку RSA decoding error: Invalid block format. Почему одна и та же строка может вызывать или не вызывать данную ошибку?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)