<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.8.7">Jekyll</generator><link href="/feed.xml" rel="self" type="application/atom+xml" /><link href="/" rel="alternate" type="text/html" /><updated>2026-03-21T12:06:04+01:00</updated><id>/feed.xml</id><title type="html">Steffen Wendzel</title><subtitle>Personal Website of Steffen Wendzel</subtitle><entry><title type="html">History Covert Channels and Covert Channel Amplification: An Overview</title><link href="/misc/2026/02/28/history-cc.html" rel="alternate" type="text/html" title="History Covert Channels and Covert Channel Amplification: An Overview" /><published>2026-02-28T03:13:37+01:00</published><updated>2026-02-28T03:13:37+01:00</updated><id>/misc/2026/02/28/history-cc</id><content type="html" xml:base="/misc/2026/02/28/history-cc.html"><![CDATA[This post summarizes our works on **history covert channels**, i.e., **covert channel amplification**. (An **Introduction** to network covert channels can be found [in our survey paper](https://doi.org/10.1145/2684195).)

## Overview

The concept of covert channel amplification, history covert channels and predictive covert channels was introduced in our "DYST" paper. We published multiple follow-up papers as summarized in the figure below.

<img src="/images/History_CC_Overview.png" alt="Overview of History Covert Channels" title="Overview of History Covert Channels" />

The core idea of covert channel amplification is to minimize the amount of data that must be sent through the channel. Why? Because with amplification, an adversary aiming to detect/block the covert channel has less traces to analyze (e.g., during Internet censorship). **This is achieved by sending a small pointer through the covert channel that references larger data observed or found elsewhere.**

## 1. DYST (IEEE TDSC 2025, pre-print published 2022)

Authors: Steffen Wendzel, Tobias Schmidbauer, Sebastian Zillien, Jörg Keller

[Our paper on DYST (*Did You See That?*)](https://doi.org/10.1109/TDSC.2024.3410679) **introduced the concept of covert channel amplification**. Covert channel amplification aims to **transfer fewer message bits through the covert channel than are actually delivered to the receiver**. This can be **achieved by sending *small* pointers through the covert channel that refer to data that is *larger* than the size of the pointer**. For instance, if we send a two-bit pointer through the covert channel and the pointer refers to three bits of secret data, we achieve such an amplification. However, one must ensure that the size of the pointer does not grow at the same rate as the size of the data.

In case of DYST, broadcast or on-path packets are monitored: The covert sender computes a hash value over each packet observable by both, covert sender and receiver. Once a hash value matches the secret message, the covert sender sends a signal to the receiver. Here, the hash value is longer than the size of the pointer.

The DYST paper presents the concepts of both, **history** covert channels and **predictive** covert channels. Both types of covert channels achieve an amplification, either by pointing to already seen data (history) or to anticipated data (prediction). However, a key limitation of this initial paper is the slow transmission rate of DYST (see *3. Silent History Protocol* below).

## 2. OPPRESSION (AsiaCCS'24)

Authors: Sebastian Zillien, Tobias Schmidbauer, Mario Kubek, Jörg Keller, Steffen Wendzel

In comparison to DYST, which can handle all types of data, [OPPRESSION (*Open Knowledge Compression*)](https://doi.org/10.1145/3634737.3637676) is exclusively focusing on **textual data**. We assume that covert sender and receiver both have access to some identical online content, e.g., public (fake) news websites or other online content. They both crawl these websites to generate a dictionary of sentences that they can point to (using elements of so-called *Patricia tries*). To transfer a secret message, the covert sender sends a pointer to a tree element (representing (part of) a sentence) to the receiver. Like in case of DYST, an amplification is reached by keeping the pointer shorter than the sentence being pointed to.

## 3. Silent History Protocol (JISA 2026)

Authors: Christoph Weißenborn, Steffen Wendzel

The idea of the [*Silent History Protocol* (SHP)](https://doi.org/10.1016/j.jisa.2026.104431) is to address the limited transmission rate of the original DYST. One approach how this is achieved is to point to characteristics of *flows*. For instance, the sender can reference intra-connection packet numbers and intra-connection delays as well as other attributes. The SHP significantly increased the transmission bitrate of DYST.

## 4. AMPhitryon (IFIP SEC'26 (in press))

Authors: Steffen Wendzel, Sebastian Zillien, Sebastian Zander

The idea behind *AMPhitryon* ([pre-print](https://www.wendzel.de/dr.org/files/Papers/IFIPSEC2026_submitted_version.pdf), final version available soon) is to realize a covert channel **amplification in a flow-wise manner**. For each flow, sender and receive observe unencrypted payload (before encryption / after decryption) and both build a dictionary of observed content from the flow. For instance, every message in a chat is added to the dictionary. Once a chunk is sent again, it can be referenced using the dictionary. No explicit exchange of the built dictionaries between sender and receiver is necessary because sender and receiver observe the same traffic. Also, in contrast to OPPRESSION, neither sender or receiver need to crawl any website or online content. In essence, AMPhitryon can be considered a compression scheme that **can be used for arbitrary censorship circumvention/covert channel tools as well as other scenarios, such as the compression of IoT sensor data transmissions**.

## Changelog

2026-03-11:
- added AMPhitryon pre-print and brief explanation

2026-02-28:
- Initial version]]></content><author><name></name></author><category term="misc" /><summary type="html"><![CDATA[This post summarizes our works on history covert channels, i.e., covert channel amplification. (An Introduction to network covert channels can be found in our survey paper.)]]></summary></entry><entry><title type="html">New website is up!</title><link href="/misc/2021/02/23/new-website.html" rel="alternate" type="text/html" title="New website is up!" /><published>2021-02-23T13:00:27+01:00</published><updated>2021-02-23T13:00:27+01:00</updated><id>/misc/2021/02/23/new-website</id><content type="html" xml:base="/misc/2021/02/23/new-website.html"><![CDATA[I think my first website appeared in 1998. In the succeeding years, I wrote several websites (private and commercial ones) in PHP. My private website was at some point created by the [Apache Forrest](http://forrest.apache.org/) framework, which generates static HTML output. However, in 2011 or so Apache Forrest was discontinued and I switched to Blogspot.com. After having my website hosted at Blogspot services (now owned by Google) for approximately ten years, I finally decided that I wanted to get rid of their cookies and third-party scripts. For this reason, I now re-built my website with [Jekyll](https://jekyllrb.com/) after noting that my students used it for years -- indeed, I am glad to learn from my students. Jekyll provides essentially the same functionality like Apache Forrest, but better.

## Some Notes

My talks and publications are now generated from `bibtex` and I use `pandoc` to generate markdown content for the bibtex entries:

{% highlight shell %}
pandoc -t markdown_strict --filter=pandoc-citeproc --csl=$(CSLSTYLE) --standalone pubcfg.md -o _includes/pub_inc_books.md
{% endhighlight %}

The `$CSLSTYLE` bib style file is partially my own: it is a modified version of the Springer bibliography style file and is tailored to fit into my CV and my website.

I then include these bibtex files the easy way using `jekyll`:

{% highlight ruby %}
 { % include pub_inc_books.md % }
...
{% endhighlight %}

Similarly, I extract my list of talks from a TeX file.]]></content><author><name></name></author><category term="misc" /><summary type="html"><![CDATA[I think my first website appeared in 1998. In the succeeding years, I wrote several websites (private and commercial ones) in PHP. My private website was at some point created by the Apache Forrest framework, which generates static HTML output. However, in 2011 or so Apache Forrest was discontinued and I switched to Blogspot.com. After having my website hosted at Blogspot services (now owned by Google) for approximately ten years, I finally decided that I wanted to get rid of their cookies and third-party scripts. For this reason, I now re-built my website with Jekyll after noting that my students used it for years – indeed, I am glad to learn from my students. Jekyll provides essentially the same functionality like Apache Forrest, but better.]]></summary></entry><entry><title type="html">I now have my teaching allowance at FernUniversität in Hagen</title><link href="/misc/2021/02/01/venia-legendi.html" rel="alternate" type="text/html" title="I now have my teaching allowance at FernUniversität in Hagen" /><published>2021-02-01T00:00:00+01:00</published><updated>2021-02-01T00:00:00+01:00</updated><id>/misc/2021/02/01/venia-legendi</id><content type="html" xml:base="/misc/2021/02/01/venia-legendi.html"><![CDATA[Some personal news: after passing the last defense talk at the Dep. of
Mathematics & Computer Science at the University of Hagen in November, I
now received the [permission to read (*venia
legendi*)](https://en.wikipedia.org/wiki/Habilitation#Process). This
allows (but also *requires*) me to teach 2hrs/semester (for free!). I
wanted to do this because it enables me to share insights from my
favorite research domain(s) with more students. Also, this status allows
me to advise my own Ph.D. students (as their *primary* advisor -- I
already advise Ph.D. students as a secondary advisor since a couple of
years).

I advised bachelor's and master's theses at the University of Hagen
since I started my own Ph.D. in 2009 or 2010 (completed in 2013), so
giving my own lectures is essentially the next step. My status will be a
so-called *Lehrbefugter*, which is different to a Lehr*beauftragter*.

Starting in winter term 2021/22, I will offer a class on Network
Steganography (covering all sorts of network covert channels and defense
mechanisms), based on [my online
class](https://github.com/cdpxe/Network-Covert-Channels-A-University-level-Course/blob/master/README.md)
(but it will be extended with more content and exercises etc.).]]></content><author><name></name></author><category term="misc" /><summary type="html"><![CDATA[Some personal news: after passing the last defense talk at the Dep. of Mathematics &amp; Computer Science at the University of Hagen in November, I now received the permission to read (venia legendi). This allows (but also requires) me to teach 2hrs/semester (for free!). I wanted to do this because it enables me to share insights from my favorite research domain(s) with more students. Also, this status allows me to advise my own Ph.D. students (as their primary advisor – I already advise Ph.D. students as a secondary advisor since a couple of years).]]></summary></entry><entry><title type="html">New release of my Usenet server WendzelNNTPd!</title><link href="/misc/2021/01/04/new-release-usenet-server.html" rel="alternate" type="text/html" title="New release of my Usenet server WendzelNNTPd!" /><published>2021-01-04T00:00:00+01:00</published><updated>2021-01-04T00:00:00+01:00</updated><id>/misc/2021/01/04/new-release-usenet-server</id><content type="html" xml:base="/misc/2021/01/04/new-release-usenet-server.html"><![CDATA[(updated: Oct, 2025)

Looking for a space-efficient and easy-to-use communications platform
without HTML content? A system of forums where everybody can exchance
opinions without getting the next topics highlighted based on some
algorithm that violates your privacy and produces some personalized filter
bubble? Well, then I have good news for you!

The [Usenet](https://en.wikipedia.org/wiki/Usenet) is a rather ancient
network communication system which is accessible with [Usenet
clients](https://en.wikipedia.org/wiki/Newsreader_(Usenet)), but it is
also well integrated into several e-mail clients such as Thunderbird.
You can post messages into so-called *newsgroups* and people can reply
to your messages just like they reply to an e-mail thread. You can also
use it to share binary files (some people do that and even pay money to
access binary newsgroups). The underlying protocol *NNTP* is rather old
and dates back to early 1986 (first specified in
[RFC 977](https://tools.ietf.org/html/rfc977)
and updated by some RFCs in the following years).

However, NNTP is still in use by some people. For me, it is a nice
retro networking protocol and I run my own Usenet server in our
university network (not accessibly from the outside). In one exercise,
my networking students have to post a message to some newsgroup via
*Telnet* (NNTP is only a minor topic in my class; I teach it so that
students play with Telnet and NNTP, SMTP etc.). And yes, NNTP is
a plain-text protocol that you can also directly work with using a
terminal.

In 2004, I started working on my own Usenet server called
[WendzelNNTPd](https://github.com/cdpxe/WendzelNNTPd),
written in C because writing your own server (in a system-level
language) lets you understand a network protocol much better. I also
wrote my own DNS server and my own high-performance HTTP server back
then to learn more about socket optimization.

WendzelNNTPd runs on Linux, BSD and (Open)Solaris. Probably, it would
also run on other Unix-like operating systems.

The first alpha release
appeared in May 2005 and contained roughly 2.2k lines of code. Version
1.0 was released in July 2007. Versions 1.x also ran on Windows and provided a
Qt-based GUI. I later dropped the GUI. Version 2.0 was released in June 2011.
Since then, I added minor features and provided several fixes to
the codebase.

Being a side-project of mine, it took 10 years (from 2011 to early 2021)
until another sub-version (2.1) was ready, including some new
features, such as (finally) SHA2-based password hashing. Looking into the
[CHANGELOG](https://github.com/cdpxe/WendzelNNTPd/blob/master/CHANGELOG)
that contains the modifications performed during all these years, I think the
new sub-version 2.1 was justified.

In October 2025, version 2.2 was released. The new version included
several key advancements which were made possible due to students from the
University of Hagen, Germany. These students provided new features (such as
TLS integration, a modernized build system, Docker support, a revised
documentation, new software packages, several fixes etc. pp.) while I only had time
to take care of minor improvements and to somehow orchestrate the different
contributions. For this reason, I am very grateful for my students and
their contributions. For this reason, key contributors are now mentioned in the
[AUTHORS](https://github.com/cdpxe/WendzelNNTPd/blob/master/AUTHORS) file.

The full project history is available in the
[HISTORY](https://github.com/cdpxe/WendzelNNTPd/blob/master/HISTORY) file
of the repository.

If you are interested in retro
computing/networking, then you might find it interesting to work with this
Usenet server. Most of today's and most of the historical Usenet clients should be able to
exchange messages with it. Also, WendzelNNTPd can run on outdated hardware,
rendering it a good service for your old PC from the 90s (simply disable support
for MySQL/MariaDB, Postgres or other features you do not want to use in a retro
computing setting). However, WendzelNNTPd is a stand-alone service that cannot
syncronize with other NNTP services (so far!).

**Contributing to the project:** Let me know if you

- run WendzelNNTPd (even if not publicly accessible),
- found (fixed) bugs,
- like to contribute a patch or extension, see [CONTRIBUTING.md](https://github.com/cdpxe/WendzelNNTPd/blob/master/CONTRIBUTING.md) or
- created/updated a package/port for some Linux/BSD/misc operating system.

Have fun!]]></content><author><name></name></author><category term="misc" /><summary type="html"><![CDATA[(updated: Oct, 2025)]]></summary></entry></feed>