組み込み環境における耐量子アルゴリズムのメモリ使用量

組み込み環境では、動作速度・フットプリントサイズ・メモリ使用量のトレードオフについて熟考しなければならないケースがほとんどです。今回は、wolfSSLのメモリ使用量についてご紹介します。

これは、耐量子暗号アルゴリズムであるML-KEMやML-DSAを使用する場合に特に重要です。ECDSAやECDHなどの従来型アルゴリズムと比較して、概ね同等、あるいは高速に動作しますが、より多くのメモリを必要とします。

Raspberry Pi 5上でwolfSSLのtestwolfcryptをビルドして実行し、3つのパターンで統計情報を取得しました。結果を以下に示します。

描画に使用した元データは本稿末尾に掲載しています。

・スタックとヒープのトレードオフ

構成(c)のようにWOLFSSL_SMALL_STACKを有効にすることで、スタック使用量が約23〜42 KB → 2,112 Bと大幅に削減できています。

・ML-KEM メモリスケーリング

ML-KEMでは、メモリ使用量がセキュリティレベルと対応して増減することが確認できます。

 例:構成(a) Small Code

  • ML-KEM-512:約31KB
  • ML-KEM-768:約44KB
  • ML-KEM-1024:約59KB

・ML-DSAの高いヒープ使用量

ML-DSAは、ML-KEMと比較して非常に多くのヒープメモリを使用します。

 例:構成(a) Small Code

  • ML-KEM:7〜17 KB
  • ML-DSA:50〜120 KB

・省メモリ最適化

構成(b)、構成(c)のように省メモリ設定フラグを追加することで、ML-KEMで10〜15%、ML-DSAで50〜65%のメモリ使用量を削減できています。

各構成で使用した設定とコマンドは以下のとおりです。

構成(a)

$ ./configure –enable-dilithium=all,44,small –enable-mlkem=all,512,small –enable-trackmemory=verbose –enable-stacksize=verbose
$ make
$ ./wolfcrypt/test/testwolfcrypt

構成(b)

$ ./configure –enable-dilithium=all,44,small –enable-mlkem=all,512,small CFLAGS=”-DWOLFSSL_DILITHIUM_VERIFY_SMALL_MEM -DWOLFSSL_DILITHIUM_SIGN_SMALL_MEM -DWOLFSSL_DILITHIUM_MAKE_KEY_SMALL_MEM -DWOLFSSL_MLKEM_ENCAPSULATE_SMALL_MEM -DWOLFSSL_MLKEM_MAKEKEY_SMALL_MEM” –enable-trackmemory=verbose –enable-stacksize=verbose
$ make
$ ./wolfcrypt/test/testwolfcrypt

構成(c)

$ ./configure –enable-dilithium=all,44,small –enable-mlkem=all,512,small CFLAGS=”-DWOLFSSL_DILITHIUM_VERIFY_SMALL_MEM -DWOLFSSL_DILITHIUM_SIGN_SMALL_MEM -DWOLFSSL_DILITHIUM_MAKE_KEY_SMALL_MEM -DWOLFSSL_MLKEM_ENCAPSULATE_SMALL_MEM -DWOLFSSL_MLKEM_MAKEKEY_SMALL_MEM” –enable-trackmemory=verbose –enable-stacksize=verbose –enable-smallstack
$ make
$ ./wolfcrypt/test/testwolfcrypt

メモリ使用量に関してさらに厳密な調整が必要でしたら、 info@wolfssl.jp までお問い合わせください。

ベンチマークデータ

構成アルゴリズムStack (bytes)Heap (bytes)Total (bytes)Heap Allocs
構成(a):
Small code
MLKEM-51223,5687,55231,1203
MLKEM-76832,67211,96844,6403
MLKEM-102442,40017,56859,9683
MLDSA-4415,90450,30466,2082
MLDSA-6517,44077,95295,3922
MLDSA-8719,376120,960140,3362
構成(b):
Small code with small mem
MLKEM-51223,6963,96827,6643
MLKEM-76832,9285,82438,7523
MLKEM-102442,6567,84050,4963
MLDSA-4415,85615,65631,5122
MLDSA-6517,39220,77638,1682
MLDSA-8719,32826,92046,2482
構成(c):
Small code with small mem + stack
MLKEM-5122,11219,30621,41817
MLKEM-7682,11227,30629,41817
MLKEM-10242,11235,78637,89817
MLDSA-442,11228,21130,3237
MLDSA-652,11233,33135,4437
MLDSA-872,16039,47541,6357

原文:https://www.wolfssl.com/optimizing-post-quantum-algorithm-memory-usage-on-embedded-systems