MLSEC - Stemo

Guide

In this little guide, we'll provide you with some technical details we expect for the hider. You should know the overall process of the submission from the self-assessment.

Base image & LLM

For this project, we use a Llama 2 model to try to hide information in text. As in the self-assessment, we provide you with a base image named stemo:llm, where we added this llm and setup a python environment in which you could use it. You can download it here. To access the model via python, we installed the llama_cpp_python module. You can find the documentation online. It might be possible to use also other packages, but we only tested this one and cannot provide support for others.

In- & Output

The in- and output will be again in the JSON-format. We provide the input to your tool via stdin and expect the output at stdout. The hider will get a JSON-object with exact two keys, secret and feed. The first one will contain base64 encoded data to be embedded into the text while the second one will contain the newsfeed as a list of exactly 30 entries.

{"secret": "<base64 encoded data>", "feed": ["<article 1>", "<article 2>", …, "<article 30>"]}

The secret can be either random or encrypted data. What exactly it is should not be important for you as you only have to take care about the bytes or bits of it. Just handle them as meaningless data. The newsfeed will be actual news we crawled for this project and will be random-like selected for your task. You can expect every news item to contain about 500 words/tokens. As we try to not cut it in the middle of a sentence, we will most likely not have exactly 500 words. There can also be >600 words in some of them.

We expect your tool to output a newsfeed with (parts of) the embedded secret as JSON-object. The newsfeed has to contain 30 entries like the input. Every item has to be a string. The length of each entry is up to you. Further information about where the secret is embedded and how much of it are not expected. The output should look like this:

{"feed": ["<article 1>", "<article 2>", …, "<article 30>"]}

Submission

Our system will check if your input conforms to the specification from above. Only submissions which pass these checks will be treated as successful. We will also provide you the time your tool needed. Please note that we process all submissions in sequence, so there might be some waiting time before your tool will be scheduled. You are allowed to use up to 12 cores. We always save only the latest successful submission of every team for further runs, so make sure you have the best version submitted last. There might be some extra features on the platform in the future, but for now it is that simple.

Like in the self-assessment, there must be a main.py which can be run with python3 main.py. That is, without any arguments.