SecAgg+는 다수의 클라이언트(예: 스마트폰)가 각자 학습한 모델 업데이트 값(가중치)을 서버에 전송할 때, 서버가 개별 클라이언트의 값을 알 수 없도록 암호화하면서도 전체 합산 결과는 정확하게 얻을 수 있도록 하는 프로토콜입니다. 이 과정에서 일부 클라이언트가 통신 문제 등으로 중도에 이탈하더라도 전체 집계 과정이 안전하게 완료될 수 있도록 설계된 것이 핵심입니다.
보안 모델 및 가정:
- SecAgg+는 주로 반-정직(Semi-honest) 위협 모델을 가정합니다. 이는 프로토콜에 참여하는 모든 당사자가 프로토콜의 명세를 그대로 따르지만, 중간 계산 결과를 엿보아 추가적인 정보를 얻으려고 시도할 수 있다는 것을 의미합니다. 이러한 가정 하에 SecAgg+는 개별 클라이언트의 모델 업데이트에 대한 기밀성을 보장합니다.
1. 사전 설정: 두 종류의 비밀 키 생성
SecAgg+는 두 가지 종류의 비밀 키를 사용하여 이중으로 데이터를 보호(마스킹)합니다. 라운드가 시작되기 전, 모든 참여 클라이언트들은 다음과 같이 두 종류의 키를 생성하고 공유합니다.
1) 개인 비밀 키 ($s_u$)
- 각 클라이언트 $u$는 자신만 알고 있는 개인 비밀 키 $s_u$를 생성합니다.
- 이 키는 자신의 모델 업데이트를 가리기 위한 '개인 마스크'를 만드는 데 사용됩니다.
- 이탈자 복구를 위해: 클라이언트는 자신의 개인 키 $s_u$를 '비밀 공유(Secret Sharing)' 기법(예: 샤미르의 비밀 공유)을 사용해 여러 '조각'으로 나눕니다. 그리고 이 조각들을 다른 모든 클라이언트에게 하나씩 나눠줍니다. 즉, 클라이언트 $v$는 클라이언트 $u$의 개인 키 조각($s_{u \to v}$)을 받아서 보관합니다. 이 조각 하나만으로는 원래의 개인 키를 복원할 수 없습니다.
2) 쌍별 공유 비밀 키 ($s_{u,v}$)
- 참여하는 모든 클라이언트 쌍($u$와 $v$)은 쌍별 공유 비밀 키 $s_{u,v}$를 생성하여 공유합니다. 이 키는 오직 두 클라이언트 $u$와 $v$만 알고 있습니다.
- 주로 디피-헬만 키 교환(Diffie-Hellman Key Exchange) 방식을 통해 서버의 중개로 안전하게 생성되며, 서버조차도 이 키의 실제 값은 알 수 없습니다.
- 이 키는 두 클라이언트 사이의 '쌍별 마스크'를 만드는 데 사용됩니다.
2. 마스킹: 모델 업데이트 보호
각 클라이언트 $u$는 자신의 로컬 데이터로 학습한 모델 업데이트 값 $x_u$를 위에서 생성한 두 종류의 키를 이용해 암호화(마스킹)합니다.
- 개인 마스크 추가: 자신의 개인 비밀 키 $s_u$를 유사난수생성기(PRG)에 넣어 개인 마스크 $p_u$를 생성한 후, 자신의 업데이트 값에 더합니다.
- $x_u + p_u$
- 쌍별 마스크 추가: 다른 모든 클라이언트 $v$와의 쌍별 공유 비밀 키 $s_{u,v}$를 PRG에 넣어 쌍별 마스크를 생성합니다. 이때, 두 클라이언트 간의 마스크가 나중에 합산 과정에서 서로 상쇄되도록 약속된 규칙에 따라 더하거나 뺍니다.
- 규칙 예시: 만약 자신의 ID가 상대방 ID보다 작으면($u < v$) 마스크를 더하고, 크면($u > v$) 마스크를 뺍니다.
최종적으로 클라이언트 $u$가 서버에 보내는 값 $y_u$는 다음과 같습니다.
$$y_u = x_u + \text{PRG}(s_u) + \sum_{u<v} \text{PRG}(s_{u,v}) - \sum_{u>v} \text{PRG}(s_{u,v})$$
서버는 모든 클라이언트로부터 마스킹된 값 $y_u$를 받아서 단순히 모두 더합니다. 모든 클라이언트가 정상적으로 참여했다면, 쌍별 마스크($\text{PRG}(s_{u,v})$)는 한쪽에선 더해지고 다른 한쪽에선 빼지므로 정확히 0이 되어 사라집니다. 이제 남은 개인 마스크의 합만 제거하면 됩니다.
3. 서버의 집계 및 이탈 클라이언트 처리
문제는 일부 클라이언트가 마스킹된 값을 서버에 전송하지 못하고 중간에 이탈했을 때 발생합니다. 이 경우, 서버가 받은 값들을 모두 더해도 쌍별 마스크가 상쇄되지 않아 합계가 오염됩니다.
SecAgg+는 바로 이 문제를 해결하기 위해 다음과 같은 절차를 수행합니다.
서버는 먼저 어떤 클라이언트가 온라인 상태이고($U_{online}$), 어떤 클라이언트가 이탈했는지($U_{dropped}$) 파악합니다. 그리고 오염된 합계에서 불필요한 마스크들을 제거하여 정확한 결과를 복원합니다.
서버의 마스크 제거 과정
서버가 받은 값들의 합($Y = \sum_{u \in U_{online}} y_u$)에는 두 종류의 불필요한 마스크가 남아있습니다.
- 온라인 클라이언트들의 개인 마스크
- 온라인 클라이언트와 이탈 클라이언트 간의 쌍별 마스크
서버는 이 두 마스크 값을 정확히 계산하여 합계에서 빼야 합니다.
- 서버의 요청
- 서버는 모든 온라인 클라이언트에게 이탈한 클라이언트들의 목록($U_{dropped}$)을 보내며, 이와 관련된 키 정보를 요청합니다.
- 온라인 클라이언트의 응답
- 요청을 받은 온라인 클라이언트 $u$는 서버에 다음 두 가지 정보를 보냅니다.
- (쌍별 공유 비밀 키): 이탈한 클라이언트 $d$ 각각에 대해, 자신이 공유했던 쌍별 공유 비밀 키 $s_{u,d}$를 서버에 보냅니다.
- (개인 키 조각): 다른 온라인 클라이언트 $v$ 각각에 대해, 자신이 보관하고 있던 $v$의 개인 키 조각 $s_{v \to u}$를 서버에 보냅니다.
- 요청을 받은 온라인 클라이언트 $u$는 서버에 다음 두 가지 정보를 보냅니다.
- 서버의 처리 및 마스크 재구성
- 서버는 온라인 클라이언트들로부터 받은 키 정보들을 취합하여 불필요한 마스크들을 다음과 같이 재구성하고 제거합니다.
- 쌍별 마스크 처리:
- 서버는 온라인 클라이언트 $u$로부터 이탈 클라이언트 $d$와의 쌍별 키 $s_{u,d}$를 직접 받았습니다.
- 따라서 서버는 이 키를 이용해 온라인-이탈 클라이언트 간의 상쇄되지 않은 모든 쌍별 마스크($\pm \text{PRG}(s_{u,d})$)를 정확하게 다시 계산할 수 있습니다.
- 개인 마스크 처리:
- 서버는 온라인 클라이언트 $v$의 개인 마스크를 제거해야 합니다. 이를 위해 $v$의 개인 키 $s_v$가 필요합니다.
- 서버는 다른 모든 온라인 클라이언트들로부터 $v$의 개인 키 조각들($s_{v \to u}$)을 수집합니다.
- 사전 설정된 임계값(예: $t$개) 이상의 조각이 모이면, 서버는 비밀 공유 기법의 원리에 따라 온라인 클라이언트 $v$의 원본 개인 비밀 키 $s_v$를 복원할 수 있습니다.
- 복원된 $s_v$를 이용해 서버는 $v$의 개인 마스크($p_v = \text{PRG}(s_v)$)를 정확하게 다시 계산합니다. 이 과정을 모든 온라인 클라이언트에 대해 반복합니다.
- 쌍별 마스크 처리:
- 서버는 온라인 클라이언트들로부터 받은 키 정보들을 취합하여 불필요한 마스크들을 다음과 같이 재구성하고 제거합니다.
- 최종 집계
- 이제 서버는 제거해야 할 모든 마스크(온라인 클라이언트들의 개인 마스크 합계, 온라인-이탈 클라이언트 간 쌍별 마스크 합계)를 정확히 알고 있습니다.
- 서버는 처음에 계산했던 오염된 총합 $Y$에서 이 마스크 값들을 빼서, 이탈한 클라이언트를 제외한 온라인 클라이언트들의 순수한 모델 업데이트 합산 결과($\sum_{u \in U_{online}} x_u$)를 성공적으로 얻게 됩니다.
요약
SecAgg+는 두 종류의 키를 통해 보안과 안정성을 모두 확보합니다.
- 쌍별 공유 비밀 키는 두 클라이언트 간의 비밀 통로 역할을 하여, 한쪽이 이탈하면 남은 쪽이 해당 키를 서버에 제공함으로써 관련 마스크를 제거할 수 있게 합니다.
- 개인 비밀 키와 그 '조각'들은, 온라인 상태를 유지한 클라이언트들의 개인 마스크를 서버가 합법적으로 복원하여 제거할 수 있도록 합니다. 이 과정에서 충분한 수의 클라이언트가 협력해야만 키가 복원되므로 보안이 유지됩니다.
이러한 설계 덕분에 SecAgg+는 일부 클라이언트가 예기치 않게 이탈하더라도 연합학습의 집계 과정을 안전하고 정확하게 완료할 수 있는 강력한 프로토콜입니다.
'연합학습 > 안전한 집계' 카테고리의 다른 글
| SecAgg+ 프로토콜에서 악의적인 서버의 공격 시나리오 (0) | 2025.10.15 |
|---|---|
| SecAgg+ 프로토콜에서 서버와 클라이언트 간 상태 확인 절차 (0) | 2025.10.15 |
| SecAgg+ 프로토콜에서 개별 클라이언트의 모델 원본 복원이 가능한가? (0) | 2025.10.15 |