Skip to content

A watermarking/steganography library that can hide a byte sequence (like a text/string) inside a cover text

License

Notifications You must be signed in to change notification settings

FraunhoferISST/Innamark

Table of Contents

About

The Invisible Watermarking (Innamark) project offers steganography/watermarking solutions to hide data invisibly and robustly within text assets (such as documents, emails, chat messages, etc.).

This repository includes:

  • A Kotlin multiplatform library that can easily be built and integrated into Kotlin, Java, and JavaScript projects, offering watermark embedding and extraction functionalities
  • A webinterface as a GUI component to embed and extract watermarks
  • A command line interface (CLI) as a terminal solution for watermark embedding and extraction

Key features of Innamark:

  • Invisible: Humans can't distinguish the original text from a watermarked text
  • Robust: Survives copy & paste and format changes in different applications
  • Length-preserving: The character count remains unchanged, without using zero-width characters

The following example uses our webinterface and Kotlin library to hide the "Innamark" watermark inside a text, send it via email, and verify and extract the watermark afterward on the recipient side:

Animated example of the webinterface

The core Innamark watermarking algorithm is developed by German researchers from the Fraunhofer Institute for Software and Systems Engineering, published as a scientific journal paper, and applied for a German and international patent.

πŸ“– Documentation

All information from usage to development are collected and provided in our documentation.

πŸ“ Structure

This project uses a monolithic repository approach and consists of different parts, located in different subfolders. The heart is a watermarker library, located in the watermarker folder, used by other components like the CLI tool or the webinterface shipped with this repo. Every part has its own README file to get further information.

Subfolder Overview

  • cli: A command line interface to enable watermarking directly via a shell/terminal
  • docs: The documentation of all parts based on the Docusaurus framework
  • samples: Different examples of watermarked and non-watermarked files, mainly used for tests
  • watermarker: The heart part of the repository: A Kotlin watermarker library for hiding text (a watermark) inside a cover text. The library works on the JVM (Java) and JavaScript (JS) platform
  • webinterface: A frontend / GUI to use the watermarking inside a browser, build with the KVision framework

πŸš€ Getting Started

Detailed getting started guides are described for every component in their dedicated README file, located in the corresponding subfolders.

Webinterface

In the following, an easy start of the webinterface that uses our Kotlin watermarker library is described.

System Prerequisites

The following things are needed to run the webinterface:

Quick Start

To run the webinterface, just clone the repo locally and run the docker-compose.yml file in the root directory of the project:

$ git clone https://github.com/FraunhoferISST/Innamark.git
$ cd Innamark
$ docker compose up

After the startup finished, try to visit the webinterface at http://localhost:8080

✍️ Contributing

Contributions to this project are greatly appreciated! Every contribution needs to accept the Corporate Contributor License Agreement, located in the CLA.md file. For more details, see the CONTRIBUTING.md file.

βš–οΈ License

This work is licensed under the Fraunhofer License (on the basis of the MIT license). See LICENSE file for more information.

Caution

There are pending German and international (PCT) patent applications with the publication numbers DE102023125012A1 and WO2025056772A1. In order to use the Innamark watermarker software in the form published here, a patent license is required in addition to the license for the software. See LICENSE for more information. In case of any questions or uncertainties, please contact us at innamark@isst.fraunhofer.de.

πŸ“ Cite this Work

The main concepts of the core Innamark watermarking algorithm are presented and compared against related work in an open access IEEE Access journal publication:

  • Hellmeier et al., "Innamark: A Whitespace Replacement Information-Hiding Method", 2025, IEEE Access, vol. 13, pp. 123120-123135, doi: 10.1109/ACCESS.2025.3583591

To cite the journal article in LaTeX/BibTeX/BibLaTeX:

@article{Hellmeier.2025,
    author = {Hellmeier, Malte and Norkowski, Hendrik and Schrewe, Ernst-Christoph and Qarawlus, Haydar and Howar, Falk},
    title = {{Innamark: A Whitespace Replacement Information-Hiding Method}},
    year = {2025},
    journal = {{IEEE Access}},
    volume = {13},
    pages = {123120--123135},
    issn = {2169-3536},
    doi = {10.1109/ACCESS.2025.3583591}
}

πŸ‘¨πŸ‘© Team & Funding

Active Members

Alumni Members

Funding

The initial project version was created within the scope of the Center of Excellence Logistics and It, also supported by the Fraunhofer Cluster of Excellence Cognitive Internet Technologies CCIT and AHEAD as Fraunhofer's Deeptech Incubator.

About

A watermarking/steganography library that can hide a byte sequence (like a text/string) inside a cover text

Topics

Resources

License

Code of conduct

Contributing

Security policy

Stars

Watchers

Forks

Releases

No releases published

Contributors 8

Languages