{"about":{"site":"https://codewithpapers.app","non_affiliation":"Code with Papers and Syntology are not affiliated with, endorsed by, or sponsored by Papers with Code, Meta, or the pwc-archive mirror.","licence":"CC BY-SA 4.0","licence_url":"https://creativecommons.org/licenses/by-sa/4.0/legalcode","attribution":"https://codewithpapers.app/attribution","modified":"archive material modified by Syntology; see the attribution page"},"url":"/paper/gradient-disaggregation-breaking-privacy-in","title":"Gradient Disaggregation: Breaking Privacy in Federated Learning by Reconstructing the User Participant Matrix","arxiv_id":"2106.06089","date":"2021-06-10","proceeding":null,"authors":["Maximilian Lam","Gu-Yeon Wei","David Brooks","Vijay Janapa Reddi","Michael Mitzenmacher"],"abstract":"We show that aggregated model updates in federated learning may be insecure. An untrusted central server may disaggregate user updates from sums of updates across participants given repeated observations, enabling the server to recover privileged information about individual users' private training data via traditional gradient inference attacks. Our method revolves around reconstructing participant information (e.g: which rounds of training users participated in) from aggregated model updates by leveraging summary information from device analytics commonly used to monitor, debug, and manage federated learning systems. Our attack is parallelizable and we successfully disaggregate user updates on settings with up to thousands of participants. We quantitatively and qualitatively demonstrate significant improvements in the capability of various inference attacks on the disaggregated updates. Our attack enables the attribution of learned properties to individual users, violating anonymity, and shows that a determined central server may undermine the secure aggregation protocol to break individual users' data privacy in federated learning.","url_abs":"https://arxiv.org/abs/2106.06089v1","url_pdf":"https://arxiv.org/pdf/2106.06089v1.pdf","source":{"archive":"pwc-archive (Hugging Face), CC BY-SA 4.0","snapshot":"2025-07-28","licence_url":"https://creativecommons.org/licenses/by-sa/4.0/legalcode","row_kind":"abstracts"},"code_links":[{"paper_slug":"gradient-disaggregation-breaking-privacy-in","repo_url":"https://github.com/gdisag/gradient_disaggregation","is_official":1,"mentioned_in_paper":1,"mentioned_in_github":1,"framework":"pytorch","reach":null}],"tasks":[{"task_slug":"federated-learning","task_name":"Federated Learning"}],"methods":[],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"atlas_url":"https://app.syntology.ai/?focus=2106.06089","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2106.06089"}},"developers":"https://syntology.ai/developers","read_at":"2026-09-24T18:15:14+00:00","read_at_is":"when the build read Syntology's graph, not when any sample ran","claim":"Per-sample execution status on synthesized fixtures; not a correctness claim about the paper. Samples come from repositories linked to the paper, official or community; repo_kind says which.","repos":[{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/gdisag/gradient_disaggregation","reach":null}],"summary":{"ran_honours":4,"ran_violates":1},"by_repo_kind":{"official":{"samples":5,"ran":5,"repositories":1}},"repo_kind_vocabulary":{"official":"The archive marks this repository official for the paper","named_in_paper":"The archive records that the paper mentions this repository; it is not marked official","listed":"In the archive's code links for this paper, not marked official and not recorded as mentioned in the paper","found_in_text":"Syntology found this repository in the paper's own text; whether it is the authors' implementation is not asserted","community":"Not in the archive's code links for this paper; a community repository Syntology harvested"},"n_pointer_only_for_licence":5,"samples":[{"code_sha256_prefix":"616b5e82dd2a38f9","entry":"count_params","repo":"gdisag/gradient_disaggregation","repo_kind":"official","path":"fedavg_test.py","file_url":"https://github.com/gdisag/gradient_disaggregation/blob/HEAD/fedavg_test.py","link_basis":"first_harvest_node","language":"python","status":"ran_honours","verification_level":2,"contract_check":"HONOURS","metamorphic_tier":"well_formed","behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"616b5e82dd2a38f9"}},{"code_sha256_prefix":"2bc4e9226bc474a4","entry":"generate_A","repo":"gdisag/gradient_disaggregation","repo_kind":"official","path":"gradient_disaggregation.py","file_url":"https://github.com/gdisag/gradient_disaggregation/blob/HEAD/gradient_disaggregation.py","link_basis":"first_harvest_node","language":"python","status":"ran_honours","verification_level":1,"contract_check":"HONOURS","metamorphic_tier":"well_formed","behaviour_fingerprint":true,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"2bc4e9226bc474a4"}},{"code_sha256_prefix":"bdc6248e2318b5e1","entry":"generate_T","repo":"gdisag/gradient_disaggregation","repo_kind":"official","path":"gradient_disaggregation.py","file_url":"https://github.com/gdisag/gradient_disaggregation/blob/HEAD/gradient_disaggregation.py","link_basis":"first_harvest_node","language":"python","status":"ran_honours","verification_level":1,"contract_check":"HONOURS","metamorphic_tier":"well_formed","behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"bdc6248e2318b5e1"}},{"code_sha256_prefix":"bdcaa5d25a63aab9","entry":"get_params","repo":"gdisag/gradient_disaggregation","repo_kind":"official","path":"fedavg_test.py","file_url":"https://github.com/gdisag/gradient_disaggregation/blob/HEAD/fedavg_test.py","link_basis":"first_harvest_node","language":"python","status":"ran_honours","verification_level":1,"contract_check":"HONOURS","metamorphic_tier":"well_formed","behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"bdcaa5d25a63aab9"}},{"code_sha256_prefix":"9d4a6861f6edf824","entry":"relative_err","repo":"gdisag/gradient_disaggregation","repo_kind":"official","path":"gradient_disaggregation.py","file_url":"https://github.com/gdisag/gradient_disaggregation/blob/HEAD/gradient_disaggregation.py","link_basis":"first_harvest_node","language":"python","status":"ran_violates","verification_level":1,"contract_check":"VIOLATES","metamorphic_tier":"invariant","behaviour_fingerprint":true,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"9d4a6861f6edf824"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}