2010-04-30 2 views
0

Я использую PHP Crypt_RSA (http://pear.php.net/package/Crypt_RSA) для шифрования и дешифрования содержимого. Содержание составляет 1kb. Ниже приведены результаты:RSA-шифрование приводит к таймауту выполнения сервера


  1. Длина ключа = 1024
  2. функции шифрования требуется время: 225 сек

  1. Длина ключа = 2048
  2. Функция шифрования занимает много времени: 115 сек

мне нужно уменьшить время это исполнения, поскольку большинство живых апача серверы имеет 120 ограничения сек для времени выполнения. Как сократить время выполнения? RSA alorithm docs говорит, что генерируются только 1024 - 2048 ключей. Я ACTUALLY пытался сгенерировать более крупный ключ, но он всегда приводит к таймауту выполнения.

Как я могу сократить время шифрования - время дешифрования?

Спасибо, Nila

+0

Эти результаты нелогичным * и * Я не вижу никакого кода. –

ответ

0

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

Симметричный шифр AES использует длину ключа 256 бит, что составляет 32 байта, что в 30 раз меньше данных для шифрования/дешифрования с использованием RSA, чем килобайт данных, которые вы сейчас шифруете.

Таким образом, 115 секунд будут сокращены до 3-4 секунд плюс время шифрования/дешифрования, используемое для AES, которое намного быстрее, чем RSA.

+0

Да, это правда, с помощью этого метода шифрование выполняется быстрее, чем ожидалось. Теперь я на стороне сервера, пытаясь расшифровать эти данные. Последовательность шифрования: получить симметричный ключ, зашифровать открытым ключом RSA, зашифровать содержимое с помощью RSA-зашифрованного Symmetric ключа Теперь, когда я перехожу на сервер с этими данными ..... Я закрепил содержимое. Чтобы расшифровать это, как я буду использовать закрытый ключ сервера? Я могу снова сгенерировать RSA-зашифрованный Symmetric ключ и расшифровать содержимое. Но это не будет безопасно .... Где секретный ключ входит в картину ??? – Nilambari

+0

Вы не шифруете содержимое с помощью «Симметричного ключа с шифрованием RSA». Вы шифруете содержимое с помощью * оригинального * симметричного ключа, но вы передаете симметричный ключ RSA для получателя. Получатель использует свой закрытый ключ для получения исходного симметричного ключа из RSA-зашифрованной версии и затем использует этот оригинальный симметричный ключ для дешифрования данных. – caf

+0

Спасибо, что решила мою проблему :-) – Nilambari

0

Возможно, вы захотите использовать mcrypt или openssl вместо своих требований шифрования/дешифрования. См. Примеры openssl_public_encrypt. Это будет намного быстрее, чем реализация PHP, выполненная в Crypt_ * (даже если они используют bigint или другую реализацию C большого целого типа gmp).

1

Сделайте свой ключ более крупным :) Согласно вашим номерам, вы вдвое увеличиваете время, удваивая размер ключа. Я уверен, что это ошибка.

Первое, что нужно сделать, это перейти на OpenSSL, который является расширением на C. Если вы используете правильную сборку, операции открытого ключа выполняются в сборке, поэтому она намного быстрее, чем PHP-код. По моему опыту, это по крайней мере в 10 раз быстрее.

Второе, что нужно сделать, это использовать стандартный конверт, такой как PKCS # 7 (OpenSSL поддерживает это). Он будет использовать симметричный ключ для шифрования и шифрования ключа с использованием открытого ключа. У этого есть много накладных расходов для небольшого сообщения, но вы выиграете в долгосрочной перспективе.

+0

Это хороший совет; соответствующими функциями для стандартного шифрования конвертов являются 'openssl_seal()' и 'openssl_open()' (хотя «unseal» было бы более логичным ...). – caf

1

Во-первых, я бы порекомендовал phpseclib - a pure PHP RSA implementation - использовать. Проблема с Crypt_RSA от PEAR заключается в том, что она не поддерживает очень много ключевых форматов, не делает слежения RSA (и, как таковая, уязвима для временных атак) и не поддерживает OAEP/PSS.

ZZ Coder рекомендует использовать PKCS # 7.Следующий URL обсуждает, как использовать phpseclib в легкой версии PKCS # 7:

http://area51.phpbb.com/phpBB/viewtopic.php?f=84&t=33024

Смежные вопросы