フェデレーテッド・ラーニングは、フェデレーテッド・トレーニング・データのセキュリティーの追加手段として、準同型暗号化をサポートします。 同型暗号化は、暗号化されたデータを最初に暗号化解除せずに計算できるようにする、公開鍵暗号方式の 1 つの形式です。つまり、データは、ディスカバリーのリスクにさらされることなく、モデル化に使用できます。
同型暗号化を使用すると、計算の結果は暗号化された形式のままになり、暗号化解除されると、暗号化されていないデータに対して実行された計算で生成された出力と同じ出力が生成されます。 暗号化には公開鍵を使用し、暗号化解除には秘密鍵を使用します。
統合学習での動作
同型暗号化は、統合学習エクスペリメントにセキュリティーとプライバシーを追加するためのオプションの暗号化方式です。 準同型暗号化が統合学習エクスペリメントで適用されると、パーティーはそれらの準同型暗号化モデル更新をアグリゲーターに送信します。 アグリゲーターは秘密鍵を持たず、同型で暗号化されたモデルの更新のみを参照できます。 例えば、アグリゲーターは、パーティーのトレーニング・データに関する情報をディスカバーするためにモデル更新をリバース・エンジニアリングできません。 アグリゲーターは、暗号化された形式でモデル更新を融合します。これにより、暗号化された集約モデルが生成されます。 次に、アグリゲーターは、暗号化された集約モデルを参加者に送信します。参加者は、暗号化解除に秘密鍵を使用して、次のトレーニング・ラウンドに進むことができます。 参加パーティーのみがモデル・データを暗号化解除できます。
サポートされるフレームワークと融合方式
完全同型暗号化 (FHE) は、以下のモデル・フレームワークの単純な平均融合方式をサポートします。
- Tensorflow
- PyTorch
- Scikit-learn 分類
- Scikit-learn 回帰
開始前に
同型暗号化の使用を開始するには、実験が以下の要件を満たしていることを確認してください。
ハードウェア仕様は、 small以上でなければなりません。 適用する暗号化のレベルによっては、より強力なデータ暗号化によるリソース消費に対応するために、より大きなハードウェア仕様が必要になる場合があります。 アグリゲーターの構成の暗号化レベルの表を参照してください。-ソフトウェア仕様は
fl-rt23.1-py3.10
です。FHE は、 Python クライアント・バージョン 1.0.263 以降でサポートされます。 すべてのパーティーが同じ Python クライアント・バージョンを使用する必要があります。
パーティーの要件
各当事者は以下のことを行う
- Linux x86 システムで実行します。
- すべての当事者に共通する認証局を識別するルート証明書を使用して構成します。
- 以下の表で説明されている属性を使用して、RSA 公開鍵と秘密鍵のペアを構成します。
- 認証局によって発行されたパーティーの証明書を使用して構成します。 RSA 公開鍵がパーティーの証明書に含まれている必要があります。
準同型の公開暗号鍵と秘密暗号鍵が生成され、各実験の当事者間で自動的かつ安全に配布されます。 エクスペリメントに参加している関係者のみが、エクスペリメント用に生成された秘密鍵にアクセスできます。 自動生成と配布のメカニズムをサポートするには、以前に指定した証明書と RSA 鍵を使用してパーティーを構成する必要があります。
RSA 鍵の要件
属性 | 要件 |
---|---|
鍵のサイズ | 4096 ビット |
公開鍵指数 | 65537 |
パスワード | なし |
ハッシュ・アルゴリズム | SHA256 |
ファイル形式 | 鍵ファイルと証明書ファイルは「PEM」形式でなければなりません |
アグリゲーターの構成 (admin)
統合学習エクスペリメントを作成するには、以下のステップを実行します。
- 「構成」 タブで、「準同型暗号化を有効にする」を切り替えます。
- 「ハードウェア仕様 (Hardware specification)」には、 small 以上を選択します。 適用する暗号化のレベルによっては、同型暗号化のリソース使用量に対応するために、より大きなハードウェア仕様が必要になる場合があります。
- 「モデル仕様」のモデル・ファイルを選択するときは、必ず暗号化されていない初期モデルをアップロードしてください。
- 「Fusion method」で「Simple average (encrypted)」を選択します。 「次へ」をクリックします。
- 「ハイパーパラメーターの定義」 タブで 「詳細を表示」 にチェック・マークを付けます。
- 「暗号化レベル」で暗号化のレベルを選択します。
暗号化レベルが高いほど、セキュリティーと精度が向上し、より高いリソース消費量 (計算、メモリー、ネットワーク帯域幅など) が必要になります。 デフォルトは暗号化レベル 1 です。
暗号化レベルの説明については、以下の表を参照してください。
レベル | セキュリティー | 精度 |
---|---|---|
1 | 高 | 正常 |
2 | 高 | 高 |
3 | 非常に高い | 正常 |
4 | 非常に高い | 高 |
セキュリティー とは、暗号化の強度です。通常は、暗号化を中断するために攻撃者が実行する必要がある操作の数によって測定されます。
精度 は、暗号化システムの結果の精度です。 精度レベルが高いほど、暗号化によるモデルの精度の低下が減少します。
アグリゲーター (パーティー) への接続
以下のステップは、準同型暗号化に必要な構成のみを示しています。 Federated Learning での同型暗号化の使用に関するステップバイステップ・チュートリアルについては、 FHE サンプルを参照してください。
一般的なエンドツーエンド・パーティー・コネクター・スクリプトの作成方法については、 アグリゲーター (パーティー) への接続を参照してください。
次のコマンドを使用して、FHE を指定して Python クライアントをインストールします。
pip install 'ibm_watsonx_ai[fl-rt23.1-py3.10,fl-crypto]'
以下のようにパーティーを構成します。
party_config = { "local_training": { "info": { "crypto": { "key_manager": { "key_mgr_info": { "distribution": { "ca_cert_file_path": "path of the root certificate file identifying the certificate authority", "my_cert_file_path": "path of the certificate file of the party issued by the certificate authority", "asym_key_file_path": "path of the RSA key file of the party" } } } } } } } }
構成後にパーティー・コネクター・スクリプトを実行します。
その他のリソース
親トピック: 統合学習