{"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/provably-secure-generative-linguistic","title":"Provably Secure Generative Linguistic Steganography","arxiv_id":"2106.02011","date":"2021-06-03","proceeding":"Findings (ACL) 2021 8","authors":["Siyu Zhang","Zhongliang Yang","Jinshuai Yang","Yongfeng Huang"],"abstract":"Generative linguistic steganography mainly utilized language models and applied steganographic sampling (stegosampling) to generate high-security steganographic text (stegotext). However, previous methods generally lead to statistical differences between the conditional probability distributions of stegotext and natural text, which brings about security risks. In this paper, to further ensure security, we present a novel provably secure generative linguistic steganographic method ADG, which recursively embeds secret information by Adaptive Dynamic Grouping of tokens according to their probability given by an off-the-shelf language model. We not only prove the security of ADG mathematically, but also conduct extensive experiments on three public corpora to further verify its imperceptibility. The experimental results reveal that the proposed method is able to generate stegotext with nearly perfect security.","url_abs":"https://arxiv.org/abs/2106.02011v1","url_pdf":"https://arxiv.org/pdf/2106.02011v1.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":"provably-secure-generative-linguistic","repo_url":"https://github.com/Mhzzzzz/ADG-steganography","is_official":1,"mentioned_in_paper":1,"mentioned_in_github":1,"framework":"pytorch","reach":null}],"tasks":[{"task_slug":"language-modeling","task_name":"Language Modeling"},{"task_slug":"language-modelling","task_name":"Language Modelling"},{"task_slug":"linguistic-steganography","task_name":"Linguistic steganography"}],"methods":[],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"atlas_url":"https://app.syntology.ai/?focus=2106.02011","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2106.02011"}},"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/Mhzzzzz/ADG-steganography","reach":null}],"summary":{"ran":2,"ran_violates":1,"ran_fixture":1,"unverified":1},"by_repo_kind":{"official":{"samples":5,"ran":4,"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":"900afea8c4e09ee7","entry":"LM","repo":"Mhzzzzz/ADG-steganography","repo_kind":"official","path":"adg-stega.py","file_url":"https://github.com/Mhzzzzz/ADG-steganography/blob/HEAD/adg-stega.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":"900afea8c4e09ee7"}},{"code_sha256_prefix":"893826cda62dea4c","entry":"Vocabulary","repo":"Mhzzzzz/ADG-steganography","repo_kind":"official","path":"adg-stega.py","file_url":"https://github.com/Mhzzzzz/ADG-steganography/blob/HEAD/adg-stega.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":"893826cda62dea4c"}},{"code_sha256_prefix":"0cdece04702cf9ee","entry":"bits2int","repo":"Mhzzzzz/ADG-steganography","repo_kind":"official","path":"adg-stega.py","file_url":"https://github.com/Mhzzzzz/ADG-steganography/blob/HEAD/adg-stega.py","link_basis":"first_harvest_node","language":"python","status":"ran_violates","verification_level":1,"contract_check":"VIOLATES","metamorphic_tier":null,"behaviour_fingerprint":true,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"0cdece04702cf9ee"}},{"code_sha256_prefix":"23583c73ecf0151a","entry":"near","repo":"Mhzzzzz/ADG-steganography","repo_kind":"official","path":"adg-stega.py","file_url":"https://github.com/Mhzzzzz/ADG-steganography/blob/HEAD/adg-stega.py","link_basis":"first_harvest_node","language":"python","status":"ran_fixture","verification_level":1,"contract_check":"RAISES","metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"23583c73ecf0151a"}},{"code_sha256_prefix":"316e88dce087c6c7","entry":"main","repo":"Mhzzzzz/ADG-steganography","repo_kind":"official","path":"adg-stega.py","file_url":"https://github.com/Mhzzzzz/ADG-steganography/blob/HEAD/adg-stega.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":"316e88dce087c6c7"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}