Sunucu yürütme zaman aşımı RSA şifreleme sonuçları

4 Cevap php

Ben (http://pear.php.net/package/Crypt_RSA) içeriğini şifrelemek ve şifresini çözmek için PHP Crypt_RSA kullanıyorum. İçeriği 1kb boyutu vardır. Sonuçlar şunlardır:


  1. keylength = 1024
  2. 225 saniye: Şifreleme işlevi zaman alır

  1. keylength = 2048
  2. Encryption function takes time: 115 secs

Canlı apache sunucularının çoğu yürütme süre 120 sn sınırı var gibi reduce bu yürütme zaman gerekiyor. Bu yürütme süresini azaltmak için nasıl? 2048 anahtarları üretilir - RSA alorithm docs sadece 1024 diyor. Ben aslında büyük bir anahtar oluşturmak için çalıştı, ama her zaman yürütme zaman aşımı sonuçlanır.

Şifre çözme yürütme zamanı - Nasıl şifreleme azaltmaya çalışır?

Thanks, Nila

4 Cevap

Sonra içeriğini şifrelemek için kullanılan bir simetrik anahtar şifrelemek için RSA kullanmak, içeriğini şifrelemek için RSA kullanmayın.

Simetrik şifreleme AES 32 byte, şimdi şifrelemek veri kilobayt daha RSA kullanarak şifrelemek için / şifresini yaklaşık 30 kat daha az veri olan 256 bit anahtar uzunluğu kullanır.

Bu nedenle 115 saniye 3-4 saniye artı RSA çok daha hızlıdır AES için kullanılan bir şifreleme / şifre çözme zaman düşecektir.

Lütfen sayılara göre :) anahtar olun, büyük sen anahtar boyutunu iki katına zaman yarıya. Ben bunun bir hata olduğuna eminim.

O, çok PHP kodu çok daha hızlıdır bunu yapmak için ilk şey, doğru yapı kullanırsanız C bir uzantısıdır OpenSSL'de, geçmek için, genel anahtar işlemleri montaj yapılır. Benim durumumda, daha hızlı en az 10 kat bulunuyor.

Yapılacak 2 şey PKCS # 7 (OpenSSL bu destekler) gibi standart bir zarf kullanmaktır. Bu ortak anahtarını kullanarak anahtarı şifrelemek ve şifrelemek için simetrik anahtarı kullanır. Küçük mesajı için havai sürü var ama uzun vadede fayda sağlayacaktır.

Birincisi, ben tavsiye phpseclib - a pure PHP RSA implementation olur - kullanılır. PEAR'ın Crypt_RSA ile sorun pek çok anahtar formatlarını desteklemiyor olması, RSA körleşmesini yapmak (ve bu gibi saldırıları zamanlama açıktır) ve OAEP / PSS'YE desteklemiyor değil.

ZZ Coder PKCS # 7 kullanılabilir önerir. Aşağıdaki URL PKCS # 7 hafif bir versiyonu phpseclib nasıl kullanılacağı anlatılır:

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

Eğer şifreleme / şifre çözme ihtiyaçları için yerine mcrypt veya openssl kullanmayı düşünebilirsiniz. Örnekleri için openssl_public_encrypt bakınız. (Onlar bigint veya GMP gibi diğer C büyük tamsayı uygulamasını kullanmak bile) Crypt_ * yapılır PHP uygulama çok daha hızlı olacaktır.