SuperNodes 인증하기#
Flower는 SuperLink에 연결하는 각 SuperNodes의 신원을 확인하는 데 사용할 수 있는 인증된 SuperNodes에 대한 기본 지원을 제공합니다. Flower 노드 인증은 GitHub SSH 인증 방식과 유사하게 작동합니다:
SuperLink(서버)는 알려진 (클라이언트) 노드 공개키 목록을 저장합니다
SuperNode와 SuperLink는 ECDH를 사용하여 독립적으로 공유된 비밀을 도출합니다
비밀 공유는 SuperNode에서 SuperLink로 토큰으로 전송된 메시지의 HMAC 값을 계산하는 데 사용됩니다
SuperLink가 토큰을 확인합니다
인증된 환경에서 Flower로 연합 학습을 시연하는 전체 ‘코드 예제 <https://github.com/adap/flower/tree/main/examples/flower-authentication>`_를 확인하는 것이 좋습니다.
참고
이 가이드에서는 향후 버전의 Flower에서 변경될 수 있는 미리보기 기능에 대해 설명합니다.
참고
보안을 강화하기 위해 노드 인증은 암호화된 연결(SSL/TLS)을 사용하도록 설정한 경우에만 사용할 수 있습니다.
:code:`SuperLink`에서 노드 인증 활성화#
노드 인증을 활성화하려면 먼저 SuperLink<>SuperNode 통신을 보호하기 위해 SSL/TLS 연결을 구성해야 합니다. 전체 가이드는 `여기 <https://flower.ai/docs/framework/how-to-enable-ssl-connections.html>`_에서 확인할 수 있습니다. 보안 연결을 구성한 후, 장기 실행하는 Flower :code:`SuperLink`에서 클라이언트 인증을 활성화할 수 있습니다. 다음 터미널 명령을 사용하여 보안 연결과 노드 인증이 모두 활성화된 Flower :code:`SuperNode`를 시작하세요:
flower-superlink
--ssl-ca-certfile certificates/ca.crt
--ssl-certfile certificates/server.pem
--ssl-keyfile certificates/server.key
--auth-list-public-keys keys/client_public_keys.csv
--auth-superlink-private-key keys/server_credentials
--auth-superlink-public-key keys/server_credentials.pub
인증 플래그를 세분화해 보겠습니다:
첫 번째 플래그
--auth-list-public-keys`는 알려진 모든 노드 공개키를 저장하는 CSV 파일의 경로를 기대합니다. federation에 참여하도록 허용된 모든 알려진 노드 공개 키를 하나의 CSV 파일(:code:
.csv`)에 저장해야 합니다.알려진 노드 공개키를 저장하는 유효한 CSV 파일은 쉼표로 구분하고 주석 없이 OpenSSH 형식으로 키를 나열해야 합니다. 예를 들어, 두 개의 알려진 노드 공개키가 포함된 CSV 파일이 포함된 코드 샘플을 참조하세요.
두 번째 및 세 번째 플래그
--auth-superlink-private-key
및 :code:`–auth-superlink-public-key`는 서버의 개인 및 공개 키의 경로를 예상합니다. 개발 목적으로 :code:`ssh-keygen -t ecdsa -b 384`를 사용하여 개인 및 공개 키 쌍을 생성할 수 있습니다.
참고
Flower 1.9에서는 알려진 노드 공개키를 SuperLink에 동적으로 제거, 편집 또는 추가하는 기능이 지원되지 않습니다. 알려진 노드 집합을 변경하려면 서버를 종료하고 CSV 파일을 편집한 다음 서버를 다시 시작해야 합니다. 알려진 노드 집합을 동적으로 변경하는 기능은 Flower 1.10(출시 예정일: 6월)에서 로드맵에 포함되어 있습니다.
:code:`SuperNode`에서 노드 인증을 활성화합니다#
장기 실행 중인 Flower 서버(SuperLink
)와 마찬가지로, 장기 실행 중인 Flower 클라이언트(SuperNode
)에서도 노드 인증을 쉽게 활성화할 수 있습니다. 다음 터미널 명령을 사용하여 인증된 :code:`SuperNode`를 시작하세요:
flower-client-app client:app
--root-certificates certificates/ca.crt
--superlink 127.0.0.1:9092
--auth-supernode-private-key keys/client_credentials
--auth-supernode-public-key keys/client_credentials.pub
--auth-supernode-private-key
플래그는 노드의 개인 키 파일 경로를, --auth-supernode-public-key
플래그는 노드의 공개 키 파일 경로를 예상합니다. 개발 목적으로 :code:`ssh-keygen -t ecdsa -b 384`를 사용하여 개인 및 공개 키 쌍을 생성할 수 있습니다.
보안 공지#
시스템의 보안은 SuperLink와 각SuperNode의 자격 증명에 의존합니다. 따라서 공개키 기반구조(PKI) 사칭 공격과 같은 보안 위험을 피하기 위해 자격 증명을 보호하고 안전하게 보관하는 것이 필수적입니다. 노드 인증 메커니즘에는 사람의 상호 작용도 포함되므로 모든 통신이 신뢰할 수 있는 통신 방법을 사용하여 안전한 방식으로 이루어지도록 하세요.
결론#
이제 노드 인증이 활성화된 상태에서 장기간 실행되는 Flower 서버(SuperLink
)와 클라이언트(SuperNode
)를 시작하는 방법을 배웠을 것입니다. 또한 보안 위험을 최소화하기 위해 개인키의 중요성을 알고 안전하게 보관해야 합니다.