Passa al contenuto principale

3. Implementation Advice (Suggerimenti di implementazione)

3. Implementation Advice (Suggerimenti di implementazione)

Ogni blocco di ChaCha20 comporta 16 operazioni di spostamento e un'operazione di incremento per caricare lo stato, 80 operazioni XOR, di addizione e di rotazione (roll) per ciascun round, altre 16 addizioni e 16 XOR per proteggere il testo in chiaro. La sezione 2.3 descrive la funzione di blocco ChaCha come "adding the original input words" (aggiunta delle parole di ingresso originali). Ciò implica che, prima di avviare i round sullo stato ChaCha, lo si copia da parte per sommarlo solo in seguito. È corretto, ma si possono risparmiare alcune operazioni copiando invece lo stato ed eseguendo il lavoro sulla copia. In questo modo, per il blocco successivo non occorre ricreare lo stato, ma solo incrementare il contatore di blocchi. Si risparmiano circa il 5,5% dei cicli.

Non è consigliabile usare una libreria generica per interi di precisione arbitraria come quella di OpenSSL per le operazioni aritmetiche in Poly1305. Tali librerie usano allocazione dinamica per gestire interi di qualsiasi dimensione, ma tale flessibilità ha un costo in termini di prestazioni e di sicurezza rispetto ai canali laterali. Sono disponibili implementazioni più efficienti a tempo costante, una delle quali nella libreria NaCl di D. J. Bernstein ([NaCl]). Un approccio a tempo costante ma non ottimale consisterebbe nell'implementare in modo naïf le operazioni aritmetiche per interi a 288 bit, perché anche un'implementazione naïf non supererà 2^288 nella moltiplicazione tra (acc+block) e r. Un'implementazione efficiente a tempo costante si trova nella libreria di pubblico dominio poly1305-donna ([Poly1305_Donna]).