連合学習のセキュア集約
各端末の勾配をサーバーに直接見せずにモデルを学習できるのがセキュア集約。ペアワイズ・マスクで個々の更新を秘匿したまま合計だけを復元し、脱落端末にも耐える仕組みを原理から理解できます。
- 1.セキュア集約はサーバーが個々の更新を一切見ずに、多数の端末の更新の合計だけを得るプロトコル。各端末ペアが共有する乱数マスクを一方が加算・他方が減算する形で足し込むため、全端末を合計するとマスクが相殺し、真の総和だけが残る。
- 2.端末が途中で脱落するとその端末に紐づくペアワイズ・マスクが相殺されず合計が壊れる。これに耐えるため、各マスク種は Diffie-Hellman で合意した種から擬似乱数で展開し、種を閾値秘密分散で預けておき、生存端末・脱落端末で別々のシェアを開示させてマスクだけを再構成し差し引く。
- 3.セキュア集約は「合計を秘匿する」だけで合計そのものは平文なので、集約結果からの推論には差分プライバシーを併用する。各端末がクリップ後に足すノイズを分散させる分散 DP と組み合わせ、信頼できる集約者なしに中央 DP 相当の精度を狙う。
解きたい問題:勾配は生データを漏らす
連合学習(Federated Learning)は、端末(スマートフォンなど)が生データを外に出さず、手元で計算したモデル更新(勾配や重み差分)だけをサーバーへ送り、サーバーがそれらを平均して共有モデルを改善する枠組みです。「データは端末に残る」ため一見プライバシーが守られそうに見えます。しかし更新そのものが生データを漏らします。勾配は損失関数を入力で微分した値であり、そこから元の学習サンプル(入力画像やテキスト)を高精度に復元する**勾配反転攻撃(gradient inversion)**が知られています。サーバーが各端末の更新を個別に見られる限り、生データを外に出さないという約束は形骸化します。
そこで必要になるのがセキュア集約(Secure Aggregation, SecAgg)です。目標は明確で、サーバーは個々の端末の更新 x_i を一切知ることなく、総和 Σ x_i(あるいは平均)だけを得る。集約に多数の端末が参加していれば、総和の中に個人の寄与は埋もれ、しかもサーバーは分解された各項を見られない――これを暗号で保証します。基礎となる公開鍵・鍵共有の考え方は 暗号の基礎 を前提とします。
ペアワイズ・マスクの中核アイデア
発想は驚くほど単純です。各端末の更新ベクトル x_i に乱数ベクトル(マスク)を足して送れば、サーバーには撹乱された値しか見えません。問題は、マスクを足したままではサーバーが総和を復元できないこと。ここでマスクを端末ペア間で相殺させるのが鍵です。
n 台の端末が参加するとき、各端末ペア (i, j) が共通の乱数マスク s_{i,j}(ベクトル)を共有します。端末 i は自分の更新に、番号が大きい相手のマスクは加算・小さい相手のマスクは減算する、という符号規則で全ペア分を足し込みます。
端末 i が送る撹乱値 y_i:
y_i = x_i + Σ_{j > i} s_{i,j} − Σ_{j < i} s_{i,j} (mod R)
ここで s_{i,j} = s_{j,i}(ペアで同じマスク)
端末 j 側では符号が逆になる:
端末 j は同じ s_{i,j} を、i<j なら「減算」側で足し込む
サーバーは撹乱値 y_i をすべて足すだけです。すると各ペアのマスク s_{i,j} は、端末 i が +s_{i,j}、端末 j が −s_{i,j} として持つため、合計すると必ず打ち消し合います。
Σ_i y_i = Σ_i x_i + Σ_i ( Σ_{j>i} s_{i,j} − Σ_{j<i} s_{i,j} )
= Σ_i x_i + 0 # ペアごとに +s と −s が相殺
= Σ_i x_i # 真の総和だけが残る
サーバーが見るのは個々の y_i(無意味な乱数)と最終的な Σ x_i だけで、個別の x_i は決して復元できません。マスクは一様乱数なので、単独の y_i からは情報理論的に x_i が漏れない点も重要です。
素朴には端末ペアの数だけマスクが要り O(n^2) ですが、各ペアが巨大な乱数ベクトルを直接交換するのは非現実的です。実際には端末 i と j が Diffie-Hellman でペアごとの共有秘密を鍵合意し、それを種にした擬似乱数生成器(PRG)で必要な長さのマスクベクトル s_{i,j} を両者が同一に展開します。交換するのは公開鍵だけで、マスク本体は通信しません。共有秘密から用途別の種を作る際は 鍵導出関数(HKDF) を挟むのが定石です。
ドロップアウト耐性:脱落するとマスクが残る
モバイル環境の連合学習では、端末が電波切れ・電池切れ・タイムアウトで途中脱落するのが常態です。ここでペアワイズ・マスクは深刻な問題を抱えます。端末 k がマスクを足した y_k を送る前に脱落すると、k が他の全端末と共有していたマスク s_{k,j} が、生存端末側の合計には片側だけ残ってしまうのです。
端末 k が脱落(y_k は届かない):
生存端末 j の y_j には、まだ s_{k,j} が片側だけ含まれている
→ Σ(生存端末の y_i) には Σ_j s_{k,j} という相殺されない残差が残る
→ サーバーは真の総和を取り出せない
安直な対策は「脱落端末 k の共有秘密を復元し、残ったマスクを差し引く」ことです。そのために各端末は自分の DH 秘密鍵(マスク種の材料)を閾値秘密分散で他の端末に預けておきます。t 台以上が協力すればある端末の種を復元でき、t 台未満からは何も漏れない――この仕組みは Shamir 秘密分散 そのものです。脱落が起きたら、サーバーは生存端末に「脱落した k のシェア」を提出させ、k のペアワイズ・マスクだけを再構成して合計から引きます。
ところがペアワイズ・マスクだけを秘密分散で復元可能にすると、別の攻撃が生まれます。悪意あるサーバーが、端末 i を「脱落した」と偽って i のマスク種を復元させれば、i の全ペアワイズ・マスクが計算でき、y_i からマスクを剥がして生の更新 x_i を単独で復元できてしまいます。あるいは通信の遅い端末を意図的に脱落扱いにすることで、その端末を狙い撃ちできます。つまり「脱落に耐えるための復元機能」が、そのまま「個別更新を暴く裏口」になるのです。
二重マスク(自己マスク)で裏口を塞ぐ
この裏口を塞ぐのが **SecAgg の二重マスク(double-masking)**設計です。各端末はペアワイズ・マスクに加え、自分だけが知る個別の自己マスク b_i(own mask、PRG の別の種から展開)をもう一段足します。
端末 i が送る撹乱値(二重マスク版):
y_i = x_i + b_i + Σ_{j>i} s_{i,j} − Σ_{j<i} s_{i,j} (mod R)
b_i : 端末 i だけが持つ自己マスク(種を秘密分散で預ける)
s_{i,j} : ペアワイズ・マスク(DH 共有秘密の種を秘密分散で預ける)
そして復元フェーズで、サーバーは端末ごとにどちらか一方のシェアしか要求できないという制約を課します。生存端末 i については自己マスク種 b_i のシェアだけを、脱落端末 k についてはペアワイズ種のシェアだけを、それぞれ十分数の端末から集めます。
| 端末の状態 | サーバーが集めるシェア | 再構成して差し引くもの | 守られる不変条件 |
|---|---|---|---|
| 生存(y_i が届いた) | 自己マスク b_i のシェア | b_i のみ | ペアワイズ種は明かされず x_i は隠れたまま |
| 脱落(y_k が届かない) | ペアワイズ種のシェア | s_{k,*} のみ | y_k 自体が無いので x_k は最初から不在 |
この非対称性が核心です。生存端末の生の更新 x_i は、ペアワイズ・マスクが最後まで剥がされないため守られます(サーバーは b_i を消せても s_{i,j} は消せない)。一方脱落端末の x_k は、そもそも y_k が届いていないので露出のしようがありません。サーバーが同じ端末について自己マスクとペアワイズの両方のシェアを得れば x_i が丸見えになりますが、プロトコルはそれを許さず、正直な端末が t 台以上いる限り、どちらか一方しか復元されないことが保証されます。
サーバーの最終計算:
Σ(生存 y_i) − Σ(生存端末の b_i) # 自己マスクを除去
− Σ(脱落 k の s_{k,j} 残差) # 残ったペアワイズ・マスクを除去
= Σ(生存端末の x_i) # 生存端末の更新の総和
閾値 t は二つの要請を同時に満たす必要があります。可用性:脱落端末の種を復元するには生存端末から t 個のシェアが要るので、t は「同時脱落しうる台数」に耐える程度に小さく。秘匿性:t 台未満の結託では種が復元できないので、t は「サーバーと結託しうる悪意端末数」より大きく。両立には全体台数 n に対し十分な冗長性が要り、SecAgg は t を過半数付近に取ってサーバーと少数端末の結託に耐える設計にします。閾値の意味づけは Shamir 秘密分散 の (k, n) 方式と同じ考え方です。
通信コストと大規模化
二重マスク SecAgg は正しく動きますが、素朴実装では端末ペアが O(n^2) 個ぶんの鍵合意とシェア配布を要し、端末数が数千を超えるとハンドシェイクが支配的コストになります。改良版の SecAgg+ は、全ペアで完全グラフを組む代わりにランダムな疎グラフ(各端末は O(log n) 台とだけペアを組む)上でマスクを構成し、計算・通信を O(n^2) から O(n log n) 程度へ落とします。疎グラフでも、正直な端末どうしがマスクで十分に結びついていれば秘匿性は保たれます。加えて、マスクは剰余環 mod R 上のベクトル演算で扱い、更新を固定小数点に量子化してから足し込むことで整数演算に載せます(丸め誤差は集約全体でならされます)。
基本の SecAgg は復元フェーズをまとめる集約サーバーの存在を前提としますが、この役割自体を分散させる研究もあります。複数の非結託サーバーにシェアを分けて持たせる方式や、準同型暗号や秘密計算(MPC) で集約そのものを暗号文上・多者間で行う方式です。SecAgg はマスクの相殺という軽量な仕組みで大規模端末に向くのに対し、MPC ベースはより強い攻撃者モデルに耐えられる代わりにラウンド数や計算が重くなる、という住み分けになります。
差分プライバシーとの併用が不可欠な理由
ここで決定的な限界を押さえます。セキュア集約が隠すのは「個々の更新」だけで、集約結果 Σ x_i はサーバーに平文で渡ります。そして総和からも個人の情報は漏れうるのです。極端な例では、集約に参加した端末が実質 1 台なら総和はその端末の更新そのものです。より一般に、複数ラウンドの集約結果を差分的に比較すれば、特定端末の寄与を推定する差分攻撃が可能で、これは暗号では防げません(差分プライバシーの原理 で扱う、集計値からの再識別と同じ構造です)。
そのため実運用の連合学習は、セキュア集約に差分プライバシー(DP)を必ず併用します。各端末は更新の大きさを一定値でクリップ(L2 ノルムを上限で切り詰め、一端末の寄与=感度を上限づける)し、ノイズを足したうえで集約に載せます。DP を「どこで足すか」で構成が変わります。
| 構成 | ノイズを足す場所 | 信頼の前提 | 精度 | セキュア集約の役割 |
|---|---|---|---|---|
| ローカル DP | 各端末が単独で全ノイズを付加 | 集約者を信頼しない | 低い(端末数ぶんノイズが累積) | なくても成立するが精度が犠牲 |
| 中央 DP | 信頼できる集約者が総和に一度だけ付加 | 集約者が生の総和を見る前提 | 高い | 併用で集約者への信頼を代替できる |
| 分散 DP(SecAgg併用) | 各端末が少量ずつ付加し集約で合算 | 信頼できる集約者は不要 | 中央 DP に近い | 個々のノイズ入り更新を秘匿し合算だけ露出 |
理想的な組み合わせが**分散 DP(distributed DP)**です。中央 DP なら信頼できる集約者が総和に足すはずのノイズを、各端末が 1/n ずつに分割して足し、セキュア集約で合算します。集約後には中央 DP と同じ総ノイズ量が揃う一方、個々のノイズ入り更新はセキュア集約で秘匿されるため、信頼できる集約者を仮定せずに中央 DP 相当の精度(=ローカル DP より遥かに小さいノイズ)が得られます。セキュア集約が「集約者に生の更新を見せない」を担い、DP が「集約結果からの推論を防ぐ」を担う――この二層で連合学習のプライバシーが完成します。
セキュア集約は、サーバーが個々の更新 x_i を見ずに総和 Σx_i だけを得るプロトコル。各端末ペアが共有する乱数マスク s_{i,j} を一方が加算・他方が減算する形で足すため、全端末を合計するとマスクが相殺し真の総和だけが残る。マスクは DH 共有秘密を種に PRG で展開し、通信は公開鍵だけ。端末が脱落するとペアワイズ・マスクが片側だけ残り合計が壊れるため、種を閾値秘密分散(Shamir)で預け、生存端末から t 個のシェアを集めて残ったマスクを再構成し差し引く。ただし単一マスクだと「脱落偽装で種を復元し x_i を暴く」裏口が生じるので、自己マスク b_i を加えた二重マスクにし、生存端末は自己マスクのシェアだけ・脱落端末はペアワイズ種のシェアだけを開示させて、生存端末のペアワイズ・マスクは最後まで剥がさない。集約結果 Σx_i は平文なので、更新のクリップ+ノイズによる差分プライバシー(分散 DP)を必ず併用し、集約結果からの再識別を防ぐ。
まとめ
セキュア集約は、連合学習で各端末の更新をサーバーに個別に見せることなく総和だけを取り出すプロトコルです。中核はペアワイズ・マスク――端末ペアが共有する乱数を一方が足し他方が引く形で更新に加えるため、全端末を合計するとマスクが相殺し、真の総和 Σ x_i だけが残ります。マスクは Diffie-Hellman の共有秘密を種に擬似乱数で展開し、公開鍵だけを交換します。
モバイル特有の端末脱落はペアワイズ・マスクを片側だけ残して合計を壊すため、マスクの種を Shamir 秘密分散 で預け、生存端末のシェアから残存マスクを再構成して差し引きます。ただし復元機能は個別更新を暴く裏口になり得るので、自己マスクを加えた二重マスクにし、生存端末と脱落端末で開示するシェアを分けることで、生存端末の更新は最後まで秘匿されます。最後に、集約結果そのものは平文で漏れうるため、更新のクリップとノイズによる 差分プライバシー(分散 DP)を併用し、信頼できる集約者なしに集約結果からの再識別まで防ぐ――この暗号と統計の二層で、連合学習のプライバシー保護が実装されます。
セキュリティ Article
連合学習のセキュア集約を実務で読む
TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。
解決すること
セキュア集約
比較で見る軸
難易度: advanced / カテゴリ: セキュリティ / タグ数: 6
導入後に効く点
端末が途中で脱落するとその端末に紐づくペアワイズ・マスクが相殺されず合計が壊れる。これに耐えるため、各マスク種は Diffie-Hellman で合意した種から擬似乱数で展開し、種を閾値秘密分散で預けておき、生存端末・脱落端末で別々のシェアを開示させてマスクだけを再構成し差し引く。
先に潰すリスク
用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。
- 難易度
- advanced
- カテゴリ
- セキュリティ
- タグ数
- 6
判断チェックリスト
- 自社の用途が「セキュア集約 / 連合学習」に近いか確認する。
- 強みである「セキュア集約はサーバーが個々の更新を一切見ずに、多数の端末の更新の合計だけを得るプロトコル。各端末ペアが共有する乱数マスクを一方が加算・他方が減算する形で足し込むため、全端末を合計するとマスクが相殺し、真の総和だけが残る。」が本当に評価軸になるか確認する。
- 注意点の「用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。」を運用で吸収できるか確認する。
- 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
- 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
- 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。