Tests de performances ed25519 : sodium et ring

Suite a une demande de @kimamila sur ce sujet : Définir un format sécurisé pour les trousseaux de clés Ğ1 - #85 by kimamila

Je me suis lancé dans l’écriture de tests de performances (benchmark) pour les opérations de signature et de vérification ed25519. Ce tests compare deux lib :

J’ai utilisé criterion, une lib spécialisée dans la mesure de performances :

The primary goal of Criterion.rs is to provide a powerful and statistically rigorous tool for measuring the performance of code, preventing performance regressions and accurately measuring optimizations.

Voici comment reproduire ces benchmark sur votre poste :

git clone https://git.duniter.org/libs/dup-crypto-rs -b benches-ring-sodium
cd dup-crypto-rs
cargo bench

Si vous n’avez pas cargo : curl https://sh.rustup.rs -sSf | sh -s -- -y

Pour vous assurer d’avoir des résultats non influencés par le “bruits”, cessez toute activité sur la machine ou les tests sont lancés puis rejouez la commande cargo bench jusqu’a ce que la phrase “No change in performance detected” apparaisse sur les 2 tests.

Ensuite, les graphes se trouvent dans target/criterion/report/index.html

Résultats signature

Et voici les résultats sur mon poste de dev :

Ce graphe représente la fréquence des temps moyen. Chaque temps moyen étant calculé sur 100 itérations. Au total plus de 200000 itérations sont effectués pour chaque lib, ce qui fait plus de 2000 moyennes.
La moyenne des moyennes se situe autour de 18 us pour ring et 23,5 us pour sodium.

Et sur mon raspberry pi 4 :

La moyenne des moyennes se situe autour de 180 us pour ring et 223 us pour sodium.

Conclusion : sur mon poste de dev et sur mon rpi4, ring est environ 20% plus rapide que sodium pour signer. Reste a tester la vérification, je verrai ça demain :slight_smile:

Résultats vérification

Sur mon poste de dev :

La moyenne des moyennes est autour de 50 us pour ring et 54 us pour sodium.

Sur mon raspberry pi 4 :

La moyenne des moyennes se situe autour de 542 us pour ring et 574 us pour sodium.

Conclusion : Sur mon poste de dev ring est environ 20% plus rapide que sodium pour vérifier une signature… Sur mon raspberry pi 4 ring est environ 5% plus rapide que sodium pour vérifier une signature.

5 Likes