Cosa influenza la velocità della pagina di rendering PHP utilizzando la crittografia [chiuso]

0

Ho creato un'app Web che utilizza le funzioni openssl_private_decrypt() .

Il rendering di una pagina con 15 messaggi crittografati con queste funzioni richiede molto più tempo di quelli senza. (3-4 volte)

L'applicazione funziona su un semplice VPS con 1024mb di RAM e 2,5 ghz (1 core).

Se voglio accelerare il processo di crittografia / decrittografia; qual è il migliore da aggiornare? RAM o CPU? Cosa definisce la velocità dei processi di crittografia?

    
posta stUrb 28.01.2014 - 19:10
fonte

2 risposte

2

Se devo credere alla documentazione (una nozione audace in effetti) , la funzione openssl_private_decrypt() esegue la decrittografia simmetrica con RSA, utilizzando OpenSSL (la libreria) per l'effettivo lavoro di crittografia. Sul tuo VPS, puoi eseguire il seguente comando per eseguire il benchmark di OpenSSL:

openssl speed rsa

Questo ti darà la velocità delle operazioni chiave private e pubbliche di RSA sul tuo computer. Sulla mia, ottengo 833.7 operazioni di chiave privata al secondo per una chiave da 2048 bit; 15 chiamate successive difficilmente si noteranno. Tuttavia, il tuo VPS potrebbe essere considerevolmente più debole del mio E3 Xeon a 3.1 GHz. Inoltre, potresti aver usato una chiave privata sovradimensionata (il tempo di calcolo è per lo più cubico nelle dimensioni della chiave). Se il benchmark mostra che la velocità di decodifica RSA è effettivamente il problema, allora puoi fare quanto segue:

  1. Utilizza una chiave più piccola. La normale dimensione della chiave RSA è 2048 bit; non c'è bisogno di andare oltre (2048 bit sono sufficienti per la sicurezza almeno per i prossimi 30 anni). 1024 bit non sono più raccomandati, anche se questo non è ancora fragile (può essere fatto plausibilmente con la tecnologia esistente, ma comporterà la costruzione di una macchina dedicata piuttosto costosa). Se sei a corto di potenza della CPU, potresti provare una media terra, ad es. una chiave a 1536 bit. NON andare sotto i 1024 bit.

  2. Aggiungi una CPU più grande. La RAM non è rilevante. Avere più CPU aiuta solo per l'elaborazione parallela, cioè diversi utenti che accedono al server contemporaneamente.

  3. Fai qualcos'altro. Non descrivi il tuo contesto di utilizzo, ma è probabile che se hai bisogno di fare 15 decodifica RSA su una singola pagina, allora stai facendo qualcosa di sbagliato. Ad esempio, suppongo che potresti aver notato che la crittografia RSA funziona solo fino a una dimensione limitata (117 byte per una chiave RSA a 1024 bit) e che potrebbe aver deciso di crittografare un messaggio più lungo dividendolo in blocchi lunghi di 117 byte e applicando separatamente RSA su ciascuno di essi. Questo percorso porta alla sofferenza. Non farlo. Esegui crittografia ibrida (ma se devo dirtelo, allora non sai abbastanza per fare ancora qualcosa di sicuro) .

(Ogni volta che guardo ciò che PHP fa con crypto mi riempie di terrore, disgusto e senso di imminente rovina. Le persone che possono progettare una funzione chiamata openssl_public_decrypt() per "decifrare i dati con la chiave pubblica" sono persone che a quanto pare ha ascoltato prima del 1993, ma non si è preoccupato di verificare se la scienza avesse in qualche modo progredito negli ultimi 20 anni. Sei sicuro di voler utilizzare tali strumenti per tutto ciò che richiede una sicurezza reale?)

    
risposta data 28.01.2014 - 20:21
fonte
1

Le migliori velocità della CPU saranno tecnicamente utili, ma probabilmente non di quanto sperate o desiderate. Soprattutto al giorno d'oggi, poiché la maggior parte dei guadagni in termini di prestazioni si ottiene aggiungendo core su chip, piuttosto che aumentando i cicli di clock.

Le operazioni di crittografia asimmetrica sono in genere molto, molto più lente delle loro controparti nella crittografia simmetrica. Per questo motivo, i cifrari asimmetrici vengono spesso utilizzati allo scopo di scambiare in modo sicuro chiavi segrete simmetriche, che possono essere utilizzate da entrambe le parti per crittografare e decrittografare i dati in blocco. Potresti voler indagare su questa possibilità.

Un'altra opzione è eseguire le attività di decrittografia in parallelo. Probabilmente hai almeno quattro core sul tuo server, ma una tipica pagina PHP userà solo una di queste per renderla. Se queste decifrazioni sono completamente indipendenti l'una dall'altra, possono essere eseguite su più core contemporaneamente, offrendo un notevole incremento delle prestazioni per "free".

    
risposta data 28.01.2014 - 19:18
fonte

Leggi altre domande sui tag