Модераторы: ginnie, korob2001
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> RSA шифрование 
V
    Опции темы
Ky6uk
Дата 11.7.2008, 00:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 42
Регистрация: 22.6.2007

Репутация: нет
Всего: нет



Впервые работаю с RSA-шифрованием. Возникли некоторые вопросы.
Я так понял, что RSA-ключ генерируется по определенным формулам.
Известно, что необходимый мне ключ для последующего шифрования данных состоит из следующих частей: B = 1024, E = 65537 и N.
N зашифрована небольшим алгоритмом. Расшифровать можно следующим кодом:
Код

void decode( char *n )
{
      typedef unsigned char byte;
      int i;

      // step 4 xor last 0x40 bytes with first 0x40 bytes
      for( i=0; i<0x40; i++ ) {
            n[0x40 + i] = (byte)(n[0x40 + i] ^ n[i]);
      };

      // step 3 xor bytes 0x0d-0x10 with bytes 0x34-0x38
      for( i=0; i<4; i++ ) {
            n[0x0d + i] = (byte)(n[0x0d + i] ^ n[0x34 + i]);
      };

      // step 2 xor first 0x40 bytes with last 0x40 bytes
      for( i=0; i<0x40; i++ ) {
            n[i] = (byte)(n[i] ^ n[0x40 + i]);
      };

      for( i=0; i<4; i++ ) {
            byte temp = n[0x00 + i];
            n[0x00 + i] = n[0x4d + i];
            n[0x4d + i] = temp;
      };
};

Исходными данными, в которых зашифровано N является набор из 128 байт, например:
Код

51f650dc4acb2cd790165c207ec7e4e609f15ec589cc33580d825ac09daeffe21053a46f9b256adea15877e511aa21338a1197aeeb4fa2ad79e074c6943e5d8b0e78773936c424142340f1239942506636d6d0199be02cba6c3c6b6a7b33a929c3490480508d234ffa15430aa176612354f280eedf22627a65b1e0ad60af6170


Необходимо из этих данных получить RSA-ключ, которым в результате можно будет зашифровать некоторый текст.

Если не трудно, подскажите как реализовать С++-код, приведенный выше, на Perl и какие необходимо использовать библиотеки для генерации по этим данным RSA-ключа и последующего шифрования текста этим ключем.
PM MAIL ICQ Jabber   Вверх
Ky6uk
Дата 11.7.2008, 00:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 42
Регистрация: 22.6.2007

Репутация: нет
Всего: нет



По аналогии написал функцию, но проверить соответствие алгоритму на С++ пока нет возможности.
Код

sub decodeRSA {
    my $key = shift;
    
    @key = split //, pack('H*', $key);
    my $i;

    # step 4 xor last 0x40 bytes with first 0x40 bytes
    for( $i=0; $i<0x40; $i++ ) {
     $key[0x40 + $i] = $key[0x40 + $i] ^ $key[$i];
    }
    
    # step 3 xor bytes 0x0d-0x10 with bytes 0x34-0x38
    for( $i=0; $i<4; $i++ ) {
        $key[0x0d + $i] = $key[0x0d + $i] ^ $key[0x34 + $i];
    }
    
    # step 2 xor first 0x40 bytes with last 0x40 bytes
    for( $i=0; $i<0x40; $i++ ) {
        $key[$i] = $key[$i] ^ $key[0x40 + $i];
    }
    
    for( $i=0; $i<4; $i++ ) {
        my $temp = $key[0x00 + $i];
        $key[0x00 + $i] = $key[0x4d + $i];
        $key[0x4d + $i] = $temp;
    }
}

PM MAIL ICQ Jabber   Вверх
tolkien
Дата 11.7.2008, 06:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 277
Регистрация: 5.4.2008

Репутация: нет
Всего: 4



Ты случайно не собираешься написать реализацию SSL на чистом PERL? Это было бы очень замечательно. 
PM MAIL   Вверх
Ky6uk
Дата 11.7.2008, 06:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 42
Регистрация: 22.6.2007

Репутация: нет
Всего: нет



Цитата(tolkien @ 11.7.2008,  06:02)
Ты случайно не собираешься написать реализацию SSL на чистом PERL? Это было бы очень замечательно.

Даже специально не собираюсь, так как, думаю, это будет изобретением велосипеда.
Интересно в этом разобраться, выполняя некоторые задачи. Но кое-где я, к сожалению, не совсем понимаю, поэтому спрашиваю у знающих людей.
PM MAIL ICQ Jabber   Вверх
Ky6uk
Дата 11.7.2008, 07:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 42
Регистрация: 22.6.2007

Репутация: нет
Всего: нет



Решено было выбрать Crypt::OpenSSL::RSA. После долгого курения доков, обнаружил функцию new_key_from_parameters.
Код

new_key_from_parameters

Given Crypt::OpenSSL::Bignum objects for n, e, and optionally d, p,
and q, where p and q are the prime factors of n, e is the public
exponent and d is the private exponent, create a new
Crypt::OpenSSL::RSA object using these values.  If p and q are
provided and d is undef, d is computed.  Note that while p and q are
not necessary for a private key, their presence will speed up
computation.


Полагаю необходимо вызвать эту функцию с определенными параметрами E и N.
Код

$key = Crypt::OpenSSL::RSA->new_key_from_parameters($n_string, 65537);

но этот метод не работает:
Код

Can't call method "pointer_copy" without a package or object reference at blib/lib/Crypt/OpenSSL/RSA.pm (autosplit into blib/lib/auto/Crypt/OpenSSL/RSA/new_key_from_parameters.al) line 130.


Это сообщение отредактировал(а) Ky6uk - 11.7.2008, 07:19
PM MAIL ICQ Jabber   Вверх
sir_nuf_nuf
Дата 12.7.2008, 22:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 920
Регистрация: 6.1.2008

Репутация: нет
Всего: 31



Цитата(tolkien @  11.7.2008,  06:02 Найти цитируемый пост)
Ты случайно не собираешься написать реализацию SSL на чистом PERL? Это было бы очень замечательно.  


Это чем бы это было замечательно, если не секрет ?


--------------------
user posted image
user posted image
PM MAIL Jabber   Вверх
Ky6uk
Дата 13.7.2008, 00:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 42
Регистрация: 22.6.2007

Репутация: нет
Всего: нет



Разобрался почти со всем вышеописанным. Проблема остается лишь в генерации ключа, по имеющимся данным. Это N, равное строке из 128 байт и E, равное числу 65537.
Не могу понять как сгенерировать ключ, используя Crypt::OpenSSL::RSA и метод new_key_from_parameters. Буду благодарен за любую подсказку.

Это сообщение отредактировал(а) Ky6uk - 13.7.2008, 00:20
PM MAIL ICQ Jabber   Вверх
Ky6uk
Дата 14.7.2008, 12:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 42
Регистрация: 22.6.2007

Репутация: нет
Всего: нет



Видимо никто с генерацие ключей не сталкивался, поэтому отвечаю сам.

Присмотревшись внимательнее, обнаружил, что n и e должны передаваться как Bignum-объекты. (Странно, почему модуль RSA не делает эту работу сам и приходится подключать еще и Crypt::OpenSSL::Bignum.)
Цитата

Given Crypt::OpenSSL::Bignum objects for n, e


После того, как сделаем из данных bignum-объекты, их можно передавать как параметры в Crypt::OpenSSL::RSA->new_key_from_parameters().
PM MAIL ICQ Jabber   Вверх
gcc
Дата 15.7.2008, 04:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: нет
Всего: 17



сгенерите ключь с помщью OpenSSl

Код

#!/bin/sh
    
    openssl genrsa -des3 -rand /dev/random -out server.key 1024
    openssl rsa -in server.key -out server.pem
    openssl req -new -key server.key -out server.csr
    openssl x509 -req -days 365 -in server.csr -signkey \
        server.key -out server.crt


могу вам сгенерить

Это сообщение отредактировал(а) gcc - 15.7.2008, 04:45
PM WWW ICQ Skype GTalk Jabber   Вверх
Ky6uk
Дата 15.7.2008, 10:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 42
Регистрация: 22.6.2007

Репутация: нет
Всего: нет



Проблема решена постом выше, средствами Perl.
PM MAIL ICQ Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl: Системное программирование"
korob2001
sharq
  • В этом разделе обсуждаются вопросы относящиеся только к системному программированию на Perl
  • Если ваш вопрос не относится к системному или CGI программированию, задавайте его в общем разделе
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.0784 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.