{"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/verifiable-and-provably-secure-machine","title":"Verifiable and Provably Secure Machine Unlearning","arxiv_id":"2210.09126","date":"2022-10-17","proceeding":null,"authors":["Thorsten Eisenhofer","Doreen Riepel","Varun Chandrasekaran","Esha Ghosh","Olga Ohrimenko","Nicolas Papernot"],"abstract":"Machine unlearning aims to remove points from the training dataset of a machine learning model after training; for example when a user requests their data to be deleted. While many machine unlearning methods have been proposed, none of them enable users to audit the procedure. Furthermore, recent work shows a user is unable to verify if their data was unlearnt from an inspection of the model alone. Rather than reasoning about model parameters, we propose to view verifiable unlearning as a security problem. To this end, we present the first cryptographic definition of verifiable unlearning to formally capture the guarantees of a machine unlearning system. In this framework, the server first computes a proof that the model was trained on a dataset $D$. Given a user data point $d$ requested to be deleted, the server updates the model using an unlearning algorithm. It then provides a proof of the correct execution of unlearning and that $d \\notin D'$, where $D'$ is the new training dataset. Our framework is generally applicable to different unlearning techniques that we abstract as admissible functions. We instantiate the framework, based on cryptographic assumptions, using SNARKs and hash chains. Finally, we implement the protocol for three different unlearning techniques (retraining-based, amnesiac, and optimization-based) to validate its feasibility for linear regression, logistic regression, and neural networks.","url_abs":"https://arxiv.org/abs/2210.09126v2","url_pdf":"https://arxiv.org/pdf/2210.09126v2.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":"verifiable-and-provably-secure-machine","repo_url":"https://github.com/cleverhans-lab/verifiable-unlearning","is_official":1,"mentioned_in_paper":1,"mentioned_in_github":1,"framework":"none","reach":{"status":"ok","spdx":"MIT"}}],"tasks":[{"task_slug":"machine-unlearning","task_name":"Machine Unlearning"},{"task_slug":"snarks","task_name":"SNARKS"},{"task_slug":"regression-1","task_name":"regression"}],"methods":[],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"atlas_url":"https://app.syntology.ai/?focus=2210.09126","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2210.09126"}},"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/cleverhans-lab/verifiable-unlearning","reach":{"status":"ok","spdx":"MIT"}}],"summary":{"unverified":11},"by_repo_kind":{"official":{"samples":11,"ran":0,"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":0,"samples":[{"code_sha256_prefix":"3b4ac5a6da85b01f","entry":"ark","repo":"cleverhans-lab/verifiable-unlearning","repo_kind":"official","path":"src/hashs/poseidon.py","file_url":"https://github.com/cleverhans-lab/verifiable-unlearning/blob/HEAD/src/hashs/poseidon.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"3b4ac5a6da85b01f"}},{"code_sha256_prefix":"3eca1c3b334fdba2","entry":"compute_tree_path","repo":"cleverhans-lab/verifiable-unlearning","repo_kind":"official","path":"src/hashs/utils.py","file_url":"https://github.com/cleverhans-lab/verifiable-unlearning/blob/HEAD/src/hashs/utils.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"3eca1c3b334fdba2"}},{"code_sha256_prefix":"51d7136e8aaa87a2","entry":"hash_dataset","repo":"cleverhans-lab/verifiable-unlearning","repo_kind":"official","path":"src/hashs/utils.py","file_url":"https://github.com/cleverhans-lab/verifiable-unlearning/blob/HEAD/src/hashs/utils.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"51d7136e8aaa87a2"}},{"code_sha256_prefix":"a67e3efe6a7f5cbd","entry":"parse_and_group_arguments","repo":"cleverhans-lab/verifiable-unlearning","repo_kind":"official","path":"src/utils.py","file_url":"https://github.com/cleverhans-lab/verifiable-unlearning/blob/HEAD/src/utils.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"a67e3efe6a7f5cbd"}},{"code_sha256_prefix":"76ad50d191ff3b24","entry":"sbox_f","repo":"cleverhans-lab/verifiable-unlearning","repo_kind":"official","path":"src/hashs/poseidon.py","file_url":"https://github.com/cleverhans-lab/verifiable-unlearning/blob/HEAD/src/hashs/poseidon.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"76ad50d191ff3b24"}},{"code_sha256_prefix":"1aac72e8cad2002c","entry":"sbox_p","repo":"cleverhans-lab/verifiable-unlearning","repo_kind":"official","path":"src/hashs/poseidon.py","file_url":"https://github.com/cleverhans-lab/verifiable-unlearning/blob/HEAD/src/hashs/poseidon.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"1aac72e8cad2002c"}},{"code_sha256_prefix":"83efbc94dc19f9e9","entry":"setup_file_logger","repo":"cleverhans-lab/verifiable-unlearning","repo_kind":"official","path":"src/utils.py","file_url":"https://github.com/cleverhans-lab/verifiable-unlearning/blob/HEAD/src/utils.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"83efbc94dc19f9e9"}},{"code_sha256_prefix":"723ec00cb680366d","entry":"setup_working_dir","repo":"cleverhans-lab/verifiable-unlearning","repo_kind":"official","path":"src/utils.py","file_url":"https://github.com/cleverhans-lab/verifiable-unlearning/blob/HEAD/src/utils.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"723ec00cb680366d"}},{"code_sha256_prefix":"7e4e7f905c694958","entry":"to_hex_str","repo":"cleverhans-lab/verifiable-unlearning","repo_kind":"official","path":"src/circ.py","file_url":"https://github.com/cleverhans-lab/verifiable-unlearning/blob/HEAD/src/circ.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"7e4e7f905c694958"}},{"code_sha256_prefix":"2fad6b03bfa3635a","entry":"twos_complement","repo":"cleverhans-lab/verifiable-unlearning","repo_kind":"official","path":"src/circ.py","file_url":"https://github.com/cleverhans-lab/verifiable-unlearning/blob/HEAD/src/circ.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"2fad6b03bfa3635a"}},{"code_sha256_prefix":"a7f54167a74a61e7","entry":"verify_tree_path","repo":"cleverhans-lab/verifiable-unlearning","repo_kind":"official","path":"src/hashs/utils.py","file_url":"https://github.com/cleverhans-lab/verifiable-unlearning/blob/HEAD/src/hashs/utils.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"a7f54167a74a61e7"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}