Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Batch Processing Algorithm for Elliptic Curve O...

herumi
January 31, 2025

Batch Processing Algorithm for Elliptic Curve Operations and Its AVX-512 Implementation

herumi

January 31, 2025
Tweet

More Decks by herumi

Other Decks in Research

Transcript

  1. 背景 広く使われている楕円曲線暗号 TLSで使われる楕円DH鍵共有・ECDSAなど 数個の楕円曲線の点の演算が多い 楕円曲線を用いた高機能な暗号技術 zk-SNARK, BBS+署名, 集約署名, 複数のBLS署名をまとめて検証, 属性ベース暗号など

    ZKPや高機能署名はブロックチェーン・Verifiable Credentialsなどで多用されている 楕円Lifted ElGamal暗号を用いた二者間秘密計算 SCIS2021 (with 九州大学 縫田氏), SCIS2022, SCIS2024 (with NTT上野氏) これらは多数(~数万)の楕円曲線の点の演算が必要 → 多数の楕円曲線の演算のバッチ処理の高速化が重要 EdMSM, arkmsmなどの既存手法を紹介しつつ改善 2 / 19
  2. 今回ターゲットとする演算 スカラー倍算のバッチ処理 楕円曲線の点 と整数 に対して を計算する マルチスカラー倍算 (MSM : Multi-Scalar

    Multiplication) 楕円曲線の点 と整数 に対して を計算する この二つは似ているが が大きいと高速化手法が異なる 3 / 19
  3. 楕円曲線のスカラー倍算 ( ) の基本 ビットウィンドウ法 与えられた に対して つまり を計算する ビット整数

    を 進数で表現する : ( , ) 出力変数 を を初期値として 倍しながら を加算する SIMD (Single Instruction, Multiple Data) の要件 要素ごとに分岐するのは不得手なためNAFやループ数が可変する手法は使わない テーブルルックアップはgather命令を利用 演算コスト , where : 2倍算, : 加算 4 / 19
  4. GLV法 2倍算のコストを半分にする手法 ビット位数の群 に対して ビット整数 と計算容易な を用意 整数 に対して となる

    ビット整数 , を選ぶ のスカラー倍算を のMSMに変換した BLS12-381曲線の場合 定義方程式は で の位数 の部分群を とする は381ビットで , は255ビット素数 を1の原始3乗根( )とし とする は の自己同型写像で、ある128ビット奇数 が存在し 5 / 19
  5. GLV法の疑似コード input : と , output : a + b

    L = n となる a, b に分解する tbla, tblb 2^w 個の配列を用意する tbla[0] = tblb[0] = 0 for i from 1 to 2^w-1: tbla[i] = tbla[i-1] + P # tbla[i] = i P tblb[i] = L tbla[i] # tblb[i] = i L P Q = 0 for i from 0 to ⌈L/2/w⌉: Q = 2^w Q Q = Q + tblb[bのiwビットからwビットを取り出す] Q = Q + tbla[aのiwビットからwビットを取り出す] return Q 6 / 19
  6. の分解 となる の選択 BLS12-381曲線においては , でOK Barrettリダクション : を事前計算して による除算を回避

    提案方式 とすると は128ビット の上位 ビット , とすると , . なら , とする 128ビット同士の整数乗算x2, ビットシフトx1, 129ビット引き算x2 既存方式よりも条件分岐と減算回数を削減 7 / 19
  7. GLV法のループ内の挙動 疑似コードの後半を再掲 Q = 0 for i from 0 to

    ⌈L/2/w⌉: # Q = d P と表記すると d はループを通して単調増加 Q = 2^w Q Q = Q + d_b L P # -- (A1) 0 <= d_b < 2^w Q = Q + d_a P # -- (A2) 0 <= d_a < 2^w return Q 補題 : BLS12-381曲線で (A1), (A2) の加算値が同じ値になることはない (A1) において は奇数なので は と異なる (A2) において . → において を仮定できる( は許容する) 9 / 19
  8. 逆元のバッチ処理 非SIMDの場合 楕円曲線の点 について が必要 入力 に対して を求めてから を求める(詳細は予稿集参照) 個の元の逆元のコストは

    ( : 逆元, : 乗算) SIMDの場合 逆元はループと分岐が多いためSIMDで実装するのは煩雑で難しい SIMDによる全体のバッチ処理 +「 個の逆元をスカラーの逆元のバッチ処理」 それぞれを SIMD処理 x 0 x 1 x 7 x 8 x 9 x 15 x 8n x 8n+1 x 8n+7 各⾏ごとの積に対して スカラーに対する 逆元のバッチ処理 11 / 19
  9. 今回ターゲットとする環境 AVX-512 IFMA Intel CPUの52ビット乗算対応のSIMD命令 52ビット整数 , と64ビット整数 に対して をSIMDで計算できる

    加減算・論理演算・シフト演算などは64ビット単位で 個並列のSIMDで処理する データの形 BLS12-381曲線では381ビット整数を52ビット単位に分割して64ビット整数8個で表現する 個の384ビット整数 を8個のSIMDレジスタに格納する SIMDレジスタ1個 X 00 X 01 X 02 zmm0 zmm1 zmm2 ... X 10 X 11 X 12 X 20 X 21 X 22 整数X 0 整数X 1 X 07 X 17 X 27 zmm7 12 / 19
  10. Montgomery乗算 記号 : 素数, : 整数, , , に対して とする

    に対して を ビットMontgomery表現と呼ぶ , 変換の高速化 通常のスカラー64ビットMontgomery表現からSIMD 52ビットMontoegomery表現への変換 : スカラー版乗算8回+SIMD版乗算1回 : 改良後 SIMD版乗算1回 x i x i R 64 x i R 52 スカラーfromMont x8 SIMD toMont x1 SIMD mont(x i , 2 32 ) x1 13 / 19
  11. ベンチマーク 環境 Intel Xeron w9-3495X (Sapphire Rapids), Ubuntu 24.04.1 LTS,

    gcc 13.2.0 (SIMD乗算はs_xbyak) https://github.com/herumi/mcl : BLS12-381曲線の で評価 バッチ処理+SIMDによる高速化率 基本演算 演算 非 SIMD SIMD SIMD 加算 273 118.36 (2.3x) 102.44 (2.66x) 2倍算 187 70.66 (2.6x) 64.38 (2.9x) SIMD演算を2個ずつ並べて (1024ビットSIMD相当) とすると1割ほど高速化 スカラー倍算のバッチ処理は3.23倍の高速化を達成 14 / 19
  12. MSM ( ) が小さいときは素直に 個のウィンドウ法(大きいと逆に遅くなる) バケット法 として に対して が十分大きい時に効率的に を計算する手法

    例 : のとき なので を それぞれのグループに分ける この処理をpartialSum( , )と書くことにする バケット法の疑似アルゴリズム b = getBucketSize(n) # x_i を何ビットずつ分割するかバケットサイズを決める Q = 0 for w from 0 to ⌈l/b⌉: Q = 2^b Q + partialSum(P_i, x_iのw*bビットからbビット切り出したもの) return z 15 / 19
  13. 最適なバケットサイズ 演算コストの見積もり ビット取り出して を求めるコスト それぞれを求める全体のコストは . のコストは 全体のコストは : :

    のビット長 これを最小化する を求める - つまり として 近似解 where : のビット長 で厳密解との差は 以内 このとき全体のコストは GLV法を組み合わせると , なので のコストが 倍 が大きくなると効果が小さくなる 16 / 19
  14. まとめ スカラー倍算のバッチ処理, MSMのSIMD化により3.23x, 1.4~1.66x MSMは1個ずつスカラー倍算して加算した場合の8.3x (n=8192のとき) スカラー倍算のバッチ処理とMSMでの最適な選択 項目 スカラー倍算 MSM

    add( ) を仮定できる できない 座標 ヤコビ座標 射影座標 GLV法 重要 が大きいと重要度は低い SIMD処理単位 V=16 V=8(アンロールはメモリ圧迫) L2, L3キャッシュサイズ 考慮不要 バケットサイズに影響 AVX-512 IFMAによる高速化率 3.23x 1.4~1.66x (vs. arkmsm) 19 / 19