{"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/what-do-you-want-from-theory-alone","title":"\"What do you want from theory alone?\" Experimenting with Tight Auditing of Differentially Private Synthetic Data Generation","arxiv_id":"2405.10994","date":"2024-05-16","proceeding":null,"authors":["Meenatchi Sundaram Muthu Selva Annamalai","Georgi Ganev","Emiliano De Cristofaro"],"abstract":"Differentially private synthetic data generation (DP-SDG) algorithms are used to release datasets that are structurally and statistically similar to sensitive data while providing formal bounds on the information they leak. However, bugs in algorithms and implementations may cause the actual information leakage to be higher. This prompts the need to verify whether the theoretical guarantees of state-of-the-art DP-SDG implementations also hold in practice. We do so via a rigorous auditing process: we compute the information leakage via an adversary playing a distinguishing game and running membership inference attacks (MIAs). If the leakage observed empirically is higher than the theoretical bounds, we identify a DP violation; if it is non-negligibly lower, the audit is loose. We audit six DP-SDG implementations using different datasets and threat models and find that black-box MIAs commonly used against DP-SDGs are severely limited in power, yielding remarkably loose empirical privacy estimates. We then consider MIAs in stronger threat models, i.e., passive and active white-box, using both existing and newly proposed attacks. Overall, we find that, currently, we do not only need white-box MIAs but also worst-case datasets to tightly estimate the privacy leakage from DP-SDGs. Finally, we show that our automated auditing procedure finds both known DP violations (in 4 out of the 6 implementations) as well as a new one in the DPWGAN implementation that was successfully submitted to the NIST DP Synthetic Data Challenge. The source code needed to reproduce our experiments is available from https://github.com/spalabucr/synth-audit.","url_abs":"https://arxiv.org/abs/2405.10994v1","url_pdf":"https://arxiv.org/pdf/2405.10994v1.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":"links_only","authors_date_abstract":"arXiv metadata, CC0 1.0 (https://info.arxiv.org/help/license), from the Kaggle arXiv metadata snapshot of 2026-09-12"},"code_links":[{"paper_slug":"what-do-you-want-from-theory-alone","repo_url":"https://github.com/spalabucr/synth-audit","is_official":1,"mentioned_in_paper":1,"mentioned_in_github":0,"framework":"none","reach":{"status":"ok"}}],"tasks":[],"methods":[],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"syntology_url":"https://syntology.ai/paper/2405.10994","atlas_url":"https://app.syntology.ai/?focus=2405.10994","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2405.10994"}},"developers":"https://syntology.ai/developers","read_at":"2026-09-25T09:33:49+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/spalabucr/synth-audit","reach":{"status":"ok"}}],"summary":{"ran":6,"unverified":3},"by_repo_kind":{"official":{"samples":9,"ran":6,"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":9,"samples":[{"code_sha256_prefix":"3c80cce4d9282c20","entry":"eps_l_GDP","repo":"spalabucr/synth-audit","repo_kind":"official","path":"utils/audit.py","file_url":"https://github.com/spalabucr/synth-audit/blob/HEAD/utils/audit.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"3c80cce4d9282c20"}},{"code_sha256_prefix":"64cc3bc3f657abd5","entry":"get_queries","repo":"spalabucr/synth-audit","repo_kind":"official","path":"attacks/querybased.py","file_url":"https://github.com/spalabucr/synth-audit/blob/HEAD/attacks/querybased.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"64cc3bc3f657abd5"}},{"code_sha256_prefix":"132021ad2bc65c51","entry":"get_vuln_batch","repo":"spalabucr/synth-audit","repo_kind":"official","path":"attacks/utils.py","file_url":"https://github.com/spalabucr/synth-audit/blob/HEAD/attacks/utils.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"132021ad2bc65c51"}},{"code_sha256_prefix":"f6ba57f4636aabdb","entry":"get_vuln_single","repo":"spalabucr/synth-audit","repo_kind":"official","path":"attacks/utils.py","file_url":"https://github.com/spalabucr/synth-audit/blob/HEAD/attacks/utils.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"f6ba57f4636aabdb"}},{"code_sha256_prefix":"e6c6e690307bd59d","entry":"onehot_encode","repo":"spalabucr/synth-audit","repo_kind":"official","path":"attacks/utils.py","file_url":"https://github.com/spalabucr/synth-audit/blob/HEAD/attacks/utils.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"e6c6e690307bd59d"}},{"code_sha256_prefix":"0746485cba167aed","entry":"preprocess_dataset","repo":"spalabucr/synth-audit","repo_kind":"official","path":"attacks/querybased.py","file_url":"https://github.com/spalabucr/synth-audit/blob/HEAD/attacks/querybased.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"0746485cba167aed"}},{"code_sha256_prefix":"558f2d64e143b0bd","entry":"dcr_mia","repo":"spalabucr/synth-audit","repo_kind":"official","path":"attacks/dcr.py","file_url":"https://github.com/spalabucr/synth-audit/blob/HEAD/attacks/dcr.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"558f2d64e143b0bd"}},{"code_sha256_prefix":"2384824e5a4cbd94","entry":"extract_dcr","repo":"spalabucr/synth-audit","repo_kind":"official","path":"attacks/dcr.py","file_url":"https://github.com/spalabucr/synth-audit/blob/HEAD/attacks/dcr.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"2384824e5a4cbd94"}},{"code_sha256_prefix":"b206f51d7c532254","entry":"init_qbs","repo":"spalabucr/synth-audit","repo_kind":"official","path":"attacks/querybased.py","file_url":"https://github.com/spalabucr/synth-audit/blob/HEAD/attacks/querybased.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"b206f51d7c532254"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}