{ "info": { "author": "Timo Richter and Stephan Escher", "author_email": "timo.juez@gmail.com", "bugtrack_url": null, "classifiers": [ "License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)", "Programming Language :: Python :: 3", "Topic :: Printing", "Topic :: Scientific/Engineering :: Information Analysis" ], "description": "DEDA - tracking Dots Extraction, Decoding and Anonymisation toolkit\n=================================================================\n\nDocument Colour Tracking Dots, or yellow dots, are small systematic dots which encode information about the printer and/or the printout itself. This process is integrated in almost every commercial colour laser printer. This means that almost every printout contains coded information about the source device, such as the serial number. \n\nOn the one hand, this tool gives the possibility to read out and decode these forensic features and on the other hand, it allows anonymisation to prevent arbitrary tracking.\n\nIf you use this software, please cite the paper:\nTimo Richter, Stephan Escher, Dagmar Sch\u00f6nfeld, and Thorsten Strufe. 2018. Forensic Analysis and Anonymisation of Printed Documents. In Proceedings of the 6th ACM Workshop on Information Hiding and Multimedia Security (IH&MMSec '18). ACM, New York, NY, USA, 127-138. DOI: https://doi.org/10.1145/3206004.3206019\n\n\n----\n#### Installation\n\n* Install Python 3\n* Install Deda\nFrom PyPI:\n`$ pip3 install --user deda`\nOr from current directory:\n`$ pip3 install --user .`\n* Optional requirement by deda_anonmask_apply (GNU/Linux only):\n`$ pip3 install wand`\n\n----\n#### Graphical User Interface\n\n* To open the GUI type:\n`$ deda_gui`\n\n\n----\n#### Terminal Application\n\n\n##### 1. Reading tracking data \n\nTracking data can be read and sometimes be decoded from a scanned image. For good results the input shall use a lossless compression (e.g. png) and 300 dpi. Make sure to set a neutral contrast \n`$ deda_parse_print INPUTFILE`\n\n\n##### 2. Find a divergent printer in a set of scanned documents \n\n`$ deda_compare_prints INPUT1 INPUT2 [INPUT3] ...`\n\n\n##### 3. Analysing an unknown tracking pattern\n\nNew patterns might not be recognised by parse_print. The dots can be extracted\nfor further analysis. \n`$ deda_extract_yd INPUTFILE`\n\n\n##### 4. Create your own tracking dots\n\nIf you want to create your own tracking dots matrix and add it to a pdf\ndocument, pass the contents as parameters (see `deda_create_dots -h`).\n`$ deda_create_dots PDFINPUT`\n\nThe calibration page (`$ deda_anonmask_create -w`) may be used as an input.\n\n\n##### 5. Anonymise a scanned image\n\nThis (mostly) removes tracking data from a scan: \n`$ deda_clean_document INPUTFILE OUTPUTFILE`\n\n\n##### 6. Anonymise a document for printing\n\n* Save your document as a PDF file and call it DOCUMENT.PDF.\n\n* Print the testpage.pdf file created by \n`$ deda_anonmask_create -w` \nwithout any page margin.\n\n* Scan the document (300 dpi) and pass the lossless file to \n`$ deda_anonmask_create -r INPUTFILE` \nThis creates 'mask.json', the individual printer's anonymisation mask. \n\n* Now apply the anonymisation mask: \n`$ deda_anonmask_apply mask.json DOCUMENT.PDF`\nThis creates 'masked.pdf', the anonymised document. It may be printed with a\nzero page margin setting.\n\nCheck whether a masked page covers your printer's tracking dots by using a \nmicroscope. The mask's dot radius, x and y offsets can be customised and \npassed to `deda_anonmask_apply` as parameters.\n\nNote that if DOCUMENT.PDF contains graphics with white or light coloured parts, these can only be masked if \"wand\" is installed (see above).\n\n\n----\n#### Troubleshooting\n\n##### deda_parse_print: command not found\n\nPossible solutions:\n* Install deda accordig to chapter 0\n* Execute\n`$ export PATH=\"$PATH:$(python -c 'import site,os; print(os.path.join(site.USER_BASE, \"bin\"))')\"`\n\n\n##### Deda does not recognise my tracking dots\n\nSet up your scan program so that it does not eliminate the paper structure nor tracking dots by some threshold and check again. Remember that monochrome pages as well as inkjet prints might not contain tracking dots.\n\n\n##### My printer does not print tracking dots. Can I hide this fact?\n\nIf there are really no tracking dots, you can either create your own ones (`deda_create_dots`) or print the calibration page (`deda_anonmask_create -w`) with another printer and use the mask for your own printer. You can use the anonymised version of the tracking dots or just copy them (`deda_anonmask_create --copy`). See chapters \"Anonymise a document for printing\" and \"Create your own tracking dots\".\n\n\n##### Install Error: command 'x86_64-linux-gnu-gcc' failed with exit status 1\n\nThis may be caused by the eel dependency which is needed for the GUI. Try\n`$ sudo apt-get install build-essential autoconf libtool pkg-config python3.6-dev gcc && pip3 install --user eel`\n\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/dfd-tud/deda", "keywords": "", "license": "GNU General Public License v3 or later (GPLv3+)", "maintainer": "", "maintainer_email": "", "name": "deda", "package_url": "https://pypi.org/project/deda/", "platform": "", "project_url": "https://pypi.org/project/deda/", "project_urls": { "Homepage": "https://github.com/dfd-tud/deda" }, "release_url": "https://pypi.org/project/deda/2.0b1/", "requires_dist": [ "scipy", "Pillow", "PyPDF2", "reportlab", "eel", "numpy", "opencv-python", "argparse" ], "requires_python": ">=3.3", "summary": "tracking Dots Extraction, Decoding and Anonymisation toolkit", "version": "2.0b1" }, "last_serial": 4324783, "releases": { "1.0b1": [ { "comment_text": "", "digests": { "md5": "db846694fd9c5dfae0e0bf561b4c1413", "sha256": "cdd71edd919c22cab04d6e6711dff477db4077efd2f0749b760a7b37ebfb1522" }, "downloads": -1, "filename": "deda-1.0b1-py2.7.egg", "has_sig": false, "md5_digest": "db846694fd9c5dfae0e0bf561b4c1413", "packagetype": "bdist_egg", "python_version": "2.7", "requires_python": ">=3.3", "size": 59295, "upload_time": "2018-06-27T21:09:39", "url": "https://files.pythonhosted.org/packages/70/56/1b6f3a7a4df7bc25c39dc7fd36b85020b57d232d6ee56ef4adbabec6b71b/deda-1.0b1-py2.7.egg" }, { "comment_text": "", "digests": { "md5": "c906651ebf337e2217ec08383e2db917", "sha256": "097f5b38479c1d492d6bf305393762004fb71a6f6b42c2b96978a50ea20bed77" }, "downloads": -1, "filename": "deda-1.0b1-py3.6.egg", "has_sig": false, "md5_digest": "c906651ebf337e2217ec08383e2db917", "packagetype": "bdist_egg", "python_version": "3.6", "requires_python": ">=3.3", "size": 81647, "upload_time": "2018-06-27T21:09:41", "url": "https://files.pythonhosted.org/packages/34/10/aa3e9ddcf34305c43446e92b412e7f2c9228c749004c0c561953acaeea51/deda-1.0b1-py3.6.egg" }, { "comment_text": "", "digests": { "md5": "4924f376afdb50fd4c39d3495fad569b", "sha256": "d1ac25675461bbcc2b15a15486d1eefcd08c253e75471ad404c4287a97dfcf5f" }, "downloads": -1, "filename": "deda-1.0b1-py3-none-any.whl", "has_sig": false, "md5_digest": "4924f376afdb50fd4c39d3495fad569b", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.3", "size": 35507, "upload_time": "2018-06-27T21:09:36", "url": "https://files.pythonhosted.org/packages/1d/73/15cc1a4ee5fe3273dea4e2cc1366a749f8c0d54cca536771a449ac2f6c9d/deda-1.0b1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "04d45c47e342ad541b42cdfb100c2268", "sha256": "228da2d1394ee93fd205a1d1b1e62b4590eb64cdbd73bd20265d97ca4c1d2dc6" }, "downloads": -1, "filename": "deda-1.0b1.tar.gz", "has_sig": false, "md5_digest": "04d45c47e342ad541b42cdfb100c2268", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.3", "size": 43029, "upload_time": "2018-06-27T21:09:42", "url": "https://files.pythonhosted.org/packages/98/da/65254f3b3c6a1e6de1685f45abc65a7e7852c60ed6d4c0af6ede723a7b95/deda-1.0b1.tar.gz" } ], "1.0b2": [ { "comment_text": "", "digests": { "md5": "8841735c13d687b90402f54d51424569", "sha256": "f871945fe45738c25eb86d07a319e883ea6838e7216ca5baa3257061729bad5e" }, "downloads": -1, "filename": "deda-1.0b2-py3-none-any.whl", "has_sig": false, "md5_digest": "8841735c13d687b90402f54d51424569", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.3", "size": 35534, "upload_time": "2018-06-27T21:24:30", "url": "https://files.pythonhosted.org/packages/50/15/54c49e97cc7cc9492bb855ccaa89eeb125f6b55822aab190cc9fb30bdd56/deda-1.0b2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "2c3e57ffb65bd820627bc8d1f5c7056e", "sha256": "a30696cce3a38e4d9d3e7ac897f6f65b99437604751be7f5d67250a75f860430" }, "downloads": -1, "filename": "deda-1.0b2.tar.gz", "has_sig": false, "md5_digest": "2c3e57ffb65bd820627bc8d1f5c7056e", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.3", "size": 43091, "upload_time": "2018-06-27T21:24:32", "url": "https://files.pythonhosted.org/packages/33/5f/5659b5c9d0defaa6d2800f3209af48bbe4a7ec1495d4d0322c7ac0476560/deda-1.0b2.tar.gz" } ], "1.0b3": [ { "comment_text": "", "digests": { "md5": "574659f9189cbee089458660d5a80057", "sha256": "bcadef62ba23bce527ebae6161bc88bd4f10e862bbd4d77907a2ee524d809d5e" }, "downloads": -1, "filename": "deda-1.0b3-py3-none-any.whl", "has_sig": false, "md5_digest": "574659f9189cbee089458660d5a80057", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.3", "size": 45058, "upload_time": "2018-07-16T08:43:43", "url": "https://files.pythonhosted.org/packages/95/a8/fb8330d14eb37b1575379ee60dd6bad04ad7cd04e7ad5ea5e47e79b056eb/deda-1.0b3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "67d358f56e15dde0e3e919c5c247ac70", "sha256": "c833c64ea9b31052d3d067d4723ad469b853598d7d08a22e3f1b8b516135a94f" }, "downloads": -1, "filename": "deda-1.0b3.tar.gz", "has_sig": false, "md5_digest": "67d358f56e15dde0e3e919c5c247ac70", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.3", "size": 43706, "upload_time": "2018-07-16T08:43:44", "url": "https://files.pythonhosted.org/packages/93/85/207794a23f562e6247a4388ed219c6672218fd276367f69bf151265ba702/deda-1.0b3.tar.gz" } ], "2.0b1": [ { "comment_text": "", "digests": { "md5": "038fdd56b60312375de8b7022833eaf6", "sha256": "c69b5987fde87c349c063f35777bb8a557406d9e6d22ca99ab2af4a55012e589" }, "downloads": -1, "filename": "deda-2.0b1-py3-none-any.whl", "has_sig": false, "md5_digest": "038fdd56b60312375de8b7022833eaf6", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.3", "size": 1631055, "upload_time": "2018-09-30T10:49:07", "url": "https://files.pythonhosted.org/packages/8f/3b/fcf96aa52ecbbe6812a251811cf2c0befdd5368174c142ed803101bd5259/deda-2.0b1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a27a34571b624c34ffb9083d7e60d88a", "sha256": "b8ce8255ff02b62aed5e9e562a1365947c851a5f4e2f557eaffb8f5f55138edb" }, "downloads": -1, "filename": "deda-2.0b1.tar.gz", "has_sig": false, "md5_digest": "a27a34571b624c34ffb9083d7e60d88a", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.3", "size": 1577933, "upload_time": "2018-09-30T10:49:22", "url": "https://files.pythonhosted.org/packages/33/c2/615089a64e2d52681159503e17d89d440d12e3ec82d40c8ce0e845ba9ea5/deda-2.0b1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "038fdd56b60312375de8b7022833eaf6", "sha256": "c69b5987fde87c349c063f35777bb8a557406d9e6d22ca99ab2af4a55012e589" }, "downloads": -1, "filename": "deda-2.0b1-py3-none-any.whl", "has_sig": false, "md5_digest": "038fdd56b60312375de8b7022833eaf6", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.3", "size": 1631055, "upload_time": "2018-09-30T10:49:07", "url": "https://files.pythonhosted.org/packages/8f/3b/fcf96aa52ecbbe6812a251811cf2c0befdd5368174c142ed803101bd5259/deda-2.0b1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a27a34571b624c34ffb9083d7e60d88a", "sha256": "b8ce8255ff02b62aed5e9e562a1365947c851a5f4e2f557eaffb8f5f55138edb" }, "downloads": -1, "filename": "deda-2.0b1.tar.gz", "has_sig": false, "md5_digest": "a27a34571b624c34ffb9083d7e60d88a", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.3", "size": 1577933, "upload_time": "2018-09-30T10:49:22", "url": "https://files.pythonhosted.org/packages/33/c2/615089a64e2d52681159503e17d89d440d12e3ec82d40c8ce0e845ba9ea5/deda-2.0b1.tar.gz" } ] }