Alberich Handbook – Enigma M4, Modern V3 & Courier

Status Modern V3 is the recommended everyday mode; V3 hardened has shipped

Manual version: 4 September 2026 · Alberich Modern V3 · V3 hardened

Welcome. This handbook explains the historical Enigma M4 simulation and Alberich’s modern Modern V3 encryption system — honestly, in two languages, offline.

Alberich runs in the browser, as an Android app (Play Store or the author’s F-Droid repo), and as a companion for Chrome, Edge, Firefox and Thunderbird. No account, no ads, no tracking.

1. What is Alberich?

In short

Classic Enigma. Modern Encryption. A historical Enigma M4 simulation and Alberich’s modern Modern V3 encryption system in one interface. Ad-free. No sign-up. No tracking.

Alberich is a browser-based rotor encryption application built around two distinct worlds: a historically oriented simulation of the Enigma M4 and Alberich’s modern Modern V3 encryption system. The classic mode recreates the operating principle of the Enigma M4 for historical, technical and experimental use. Modern V3 develops the rotor concept further and combines it with Base-26 encoding, automatic message keys, key sheets, nets and Courier mode. Processing is performed locally in the browser. Plaintext and key material are designed to remain on the device.

Modern V3 is Alberich’s recommended everyday mode. It is an openly specified experimental rotor protocol that evolves the historical Enigma concept for modern use. It is not a replacement for widely reviewed modern AEAD cryptography. Alberich deliberately focuses on a different architecture: transparent rotor cryptography, local key management and optional physical separation between cryptography and communication.

Why Alberich?

  • Local, not cloud: encryption and key management run on the device.
  • No sign-up: no Alberich account.
  • No telemetry: Alberich does not need usage analytics.
  • No cloud keys: day keys stay under the users’ control. There is no central key server.
  • Open and inspectable: specification, source code and self-tests make the design checkable.
  • Courier-ready: plaintext and day keys can stay entirely on a separate offline device.

Three paths to keep distinct from the start:

  • Traditional Historical Enigma M4 simulation — learning and experiment mode.
  • Modern V3 Recommended Alberich everyday mode; sheet type V3 hardened for shorter key periods.
  • Courier Optional air-gap workflow: keep cryptography physically separate from communication.
What each Alberich surface can do
FeatureWebAndroidCompanion
Modern V3yesyesyes
V3 hardenedyes (live QR and file)yes (file .alb3cb2)no — daily keys only
Traditionalyesyesno — kept deliberately slim
Courier (QR)yesyesyes
Sheets generate / importyesyesimport, no sheet generator
Courier mode

Keep plaintext off the messenger device

Plaintext stays offline. In Courier mode, the offline device performs the cryptography. The online device transports Alberich ciphertext only. Plaintext and day keys therefore do not have to be entrusted to the messaging device. Client-side scanning on the communications device therefore sees only ciphertext.

That is the architectural answer to client-side scanning debates: not another algorithm on the same phone, but splitting compute from transport. Procedure in chapter 6.

Alberich courier: type offline, QR across the air gap, online ciphertext only

What it is not. Alberich is not AES or comparable modern standard encryption, not Signal, and not a NIST algorithm with a security proof. Modern V3 is open source and an evolved rotor cipher, fully inspectable. It follows Kerckhoffs’s principle: security rests on keeping the key secret; the algorithm is completely public.

1.1 Getting Android

In short

Play Store or the author’s F-Droid repo. Pick one channel. This is not f-droid.org.

Two official channels, the same app (currently 1.0, revision 31):

  • Google Play — shortest path. Updates through the store.
  • The author’s F-Droid repo — signed APKs on alberich.pro, updates through the F-Droid client. This is not f-droid.org. Android source is not the public GitHub repo.

Landing page, QR and fingerprint: alberich.pro/fdroid. Repo address: https://alberich.pro/fdroid/repo. Fingerprint (SHA-256): 5D0B21FEEA5FE33D702AE4FDB8A556108C9BE1993A031A413B24C7C399EDC4C3.

Without the F-Droid client you can use Obtainium with the same address and fingerprint. A raw APK is the third path — unknown sources, no automatic updates unless you then add the repo.

Pick one channel and stay on it. Play App Signing and the repo APK usually have different signatures. A Play install cannot be updated from the repo — and vice versa. To switch: uninstall, after backing up your sheets.

2. Quick start

In short

A Traditional mode to learn the classic Enigma, Modern V3 for everyday use. Sender and receiver need the same mode and the same sheet.

Traditional

Historical M4 following Kriegsmarine operating practice: rotor order and daily key from the sheet, a message key per message, A–Z capitals only. Period becomes X, comma Y, question mark UD. Encrypt and decrypt are the same operation.

  1. Select main mode Traditional.
  2. Set rotors, rings, plugboard and ground setting — as on a historical key sheet.
  3. Type A–Z. The same setting decrypts again.
  4. Optional procedure Message key: Alberich can generate the four-letter message key instead of choosing it by hand.

To recreate original M4 traffic, follow the historical regulations (key sheet, kenngroups, message key). Alberich removes the paperwork; in Traditional mode it does not change the machine’s electrical behaviour.

Modern V3 recommended

  1. The top bar must show Modern.
  2. Load a sheet: recommended V3 hardened (time slots) or V3 · daily key (JSON / QR / manual). At least three plug pairs.
  3. Type plaintext → copy the ALBV message (including the check group).
  4. Receiver: paste the complete message — from ALBV through the last group. Output is the plaintext.

Before the first message, make sure sender and receiver use the same sheet. For a daily-key sheet the sheet word (seven letters) is enough; for V3 hardened compare month and fingerprint. Both are plausibility checks, not identity proofs.

3. Step by step for new users

In short

App → Modern → your own sheet (not the demo), recommended V3 hardened → compare sheet word or fingerprint → send the full message.

Alberich in the browser: rotors, mode switch and text fields
The web app at alberich.pro — rotors, mode and text on one page.
  1. Open the app. Web: alberich.pro, or the Android app via Play or F-Droid, or a companion. There is no key server; a local copy is enough.
  2. Pick a language. DE | EN in the header. The choice is stored.
  3. Turn Modern on. The top bar must say “Modern”, not Traditional. The two modes are incompatible because they use different algorithms — do not mix them on the sender and receiver side. Note: the Alberich Companion is deliberately slim for the browser and the mail client. It only has Modern mode, not Traditional. Traditional lives in the web app and the Android app.
  4. First code sheet. Open setup. For everyday use generate V3 hardened (default 4 hours). Alternatively keep V3 · daily key as a monthly sheet. The bundled demo sheet (sheet word CPTZ YYH) is a public daily key and not secure. It is only for trying this handbook — not for your own messages.
  5. Compare the sheet. Daily key: seven letters, shown as XXXX XXX, a CRC-32 sheet word. V3 hardened: month and fingerprint. Both are short, non-secret comparison values — a practical everyday check, not a signature. For sensitive groups, verify the match through an independent channel whenever practical.
  6. Encrypt a first message. Input type “Plaintext”, type the text. Output in groups of four. Per message Alberich generates a new message key and message ID — not on every keystroke.
  7. Message layout. ALBV | header | message ID | body | check group. Without the complete message there is no plaintext. Groups of four are display only.
  8. Decrypt. Input type “Ciphertext”, paste the complete message. The check group is verified first.
  9. Optional: courier. A second device that stays offline. Details in chapter 6.

The sheet is the heart of the encryption. It is the shared secret. Without it the message is ciphertext letter groups; with it every message of that epoch can be encrypted and decrypted — the whole day for a daily key, the time slot for V3 hardened. Therefore: do not send the sheet over insecure channels or over the same channel as the messages. Do not store it in the cloud or on unprotected drives. Different groups (family, friends, colleagues) can and should use different sheets.

4. The two main modes in detail

In short

Traditional = historical M4. Modern V3 = everyday use with end rotor and check group. The modes are incompatible — do not mix them.

4.1 Traditional mode

Historical M4: rotors I–VIII, Greek rotor Beta or Gamma, reflector Bruno/Caesar (Dora as an option). You set four start positions (Greek rotor plus left, middle and right). The Greek rotor sits in the electrical path but does not step during encipherment — historically and in Alberich Traditional. That is separate from the ring setting: it applies to all four rotors, including the Greek rotor — as on the historical M4. The Greek rotor does not step during encipherment; ring and start position are still two different settings and both take effect. Older Alberich Traditional traffic whose first ring letter was not A decrypts differently after this correction.

  • Involutory: the same setting decrypts again. A letter never enciphers to itself.
  • A–Z only. Spaces stay visible in the input but are not machine steps. Period → X, comma → Y, ? → UD.
  • Stepping: classic double-stepping. The right rotor advances one position on every keypress. If it sits on a notch, it takes the middle rotor with it. In so-called double-stepping the middle rotor can advance on two consecutive keypresses because of the notch logic, taking the left rotor with it. The left rotor’s notch has no effect. The Greek rotor stands still.

Simple and message-key procedures

Simple uses one start position for the whole text — good for trying the machine.

Message key follows the historical regulation: the daily key supplies the ground setting; each message gets four extra letters as the message key. That becomes the header; the body runs under the message key. Historically you had to choose and transmit that key according to kenngroup rules.

Automatic message key: Alberich can generate the four letters. That removes the paperwork; it does not change the machine. For everyday Traditional use this is the convenient path; for historically faithful drills, still pick the message key yourself.

Use: learning, historical simulation, classic drills. Not the recommended everyday path.

4.2 Modern V3 (current standard)

Modern V3 is Alberich’s recommended everyday mode. It is an openly specified experimental rotor protocol that evolves the historical Enigma concept for modern use. The rotors follow a four-stage double-step: the right rotor always moves; notches on the right, middle and left rotors take the slower ones with them — including the Greek rotor. The written step rule and the Python reference in the public repository describe the same machine the app runs. Self-tests check that browser, app and reference agree.

  • End rotor (E) instead of reflector (UKW). The signal path is not reversed. Encrypt and decrypt are therefore different paths. Alberich handles that for you: you only choose “Plaintext” or “Ciphertext”; the inverted end rotor stays behind the scenes.
  • Truly random filler notches with counts from {5, 7, 9} sit on the sheet, independent of rings and plugs.
  • Base-26: any text (umlauts, numbers, emoji) is mapped internally to A–Z so the rotor machine stays on letters. You do not re-encode anything.
  • Greek rotor steps: unlike Traditional mode it no longer stands still. When the left rotor sits on a notch, the Greek rotor moves too. Its ring setting applies.
  • Message layout: every Modern message starts with the stamp ALBV, carries header, message ID and body, and ends with a check group. The check group rejects changes before any plaintext appears.
  • Automatic message key of four letters — the start positions of all four rotors, including the Greek rotor.
  • Two sheet types: V3 · daily key (one key per calendar day) and V3 hardened (an independent full key per time slot). The telegram remains ALBV. Details in chapter 5.

Fixed points on the end rotor: a letter may map to itself (A → A). That is allowed for a free permutation and impossible on the historical UKW.

Involutions are discarded: an involution is a pairing (like the UKW). Alberich does not emit such end rotors. If random generation still produces an involution, it is thrown away and generated again — so Modern V3 does not accidentally become self-inverse.

TraditionalModern V3
Involutionyesno (Alberich splits encrypt and decrypt)
AlphabetA–Zany text, Base-26 internally
UKW / EWreflector Bruno / Caesar / Doraend rotor, free 26-letter permutation
Greek rotorfour start positions; does not step; ring appliesfour start positions; steps along; ring applies
Notchesas on the historical originalrandom fillers from the daily key
Message keymanual or generatedautomatic, 4 letters
Integritycheck group, verified first
StampALBV

5. Code sheets, codebooks & networks

In short

Two sheet types for Modern V3: daily key (JSON/QR) and V3 hardened (time slots, file .alb3cb2). Up to five networks. Emergency wipe clears this device.

Monthly sheet in the app: days, rotors, rings, plugs
Monthly sheet in the Android app (Modern V3). Each row is a daily key; end rotor and filler notches sit on the sheet.

Modern V3 has two sheet types. Both produce normal ALBV messages. The cipher core does not change. Sender and receiver need the same type and the same sheet.

  • V3 · daily key: one full V3 key per calendar day. Share as JSON, still QR (ALBERICH-CBQR1) or text.
  • V3 hardened: one full, independent V3 key per time slot. Share as a binary file .alb3cb2; in the web app also as a live QR (CBQR2). JSON and still QR cannot carry a hardened sheet.

Traditional stays on the classic monthly key sheet. The companion (Chrome, Edge, Firefox, Thunderbird) has daily keys only — no hardened sheet generator.

5.1 V3 · daily key

  • Generate: create a monthly sheet at random in setup.
  • Sheet word: a short, non-secret comparison value based on CRC-32 (shown as XXXX XXX). It helps detect accidental differences between sheets — a practical everyday check. It is not a signature or cryptographic authentication; CRC-32 collisions are possible. For sensitive groups, verify the match through an independent channel whenever practical.
  • Networks: the historical term for different groups — family, friends, colleagues. Up to five named networks, one sheet each. Nobody in another group can read along; the split raises security. “Remove sheet” clears only the active network. Re-importing or deleting a sheet does not reset the local message-key register.
  • Import/export: JSON, QR (ALBERICH-CBQR1), text, optional NFC. Sheet QR and courier QR are separate.

Emergency wipe. Irreversibly deletes every sheet in this browser or app. Confirmation required.

Hard rule. The daily key lasts the whole day. Alberich draws the four-letter message key cryptographically at random. Because 26⁴ = 456,976 values exist, accidental repeats are possible; the message ID is independent and does not replace the rotor start. On send, Alberich refuses a message key already used under this full key (local register, fail-closed). Decrypt does not add a new entry. If a sheet is compromised (photographed, forwarded, left on an unsafe computer), replace it immediately. Otherwise the messages of that period are no longer safe.

The demo sheet (sheet word CPTZ YYH) is public. It is for demonstration only and must not be used for personal messages with sensitive content. Day 16 of that sheet is the documented test day for the example messages in the appendix.

5.2 V3 hardened

V3 hardened has shipped (web 1.0 revision 65, Android 1.0 revision 31). It is Modern V3 with an automatically changing full key: end rotor and filler notches sit on the sheet, telegram ALBV. The clock selects the period; it does not derive the key.

  • Key validity: 24 hours · Simple, 4 hours · Recommended (default), 1 hour · Higher protection. Everyone on a network must use the same sheet and the same profile.
  • Alberich key time: CET (UTC+1) all year, no daylight saving, regardless of the device time zone.
  • 24 hours · Simple uses the same daily cadence as the daily key, but live QR or file and CET instead of JSON or a still QR. Less traffic under one key: 4 hours.
  • Pin over clock: a message already started stays on its time slot. New messages use the key that is current then.
  • Receive: the check group finds the matching slot itself (MAC-first). Do not pick a time slot.
  • Compare: hardened sheets show month and fingerprint, not the legacy sheet word.
  • Transfer: web via live QR (CBQR2, animated) or binary file .alb3cb2. Android via file .alb3cb2 — no MUR live QR. JSON and still QR remain for daily keys only.

What V3 hardened is not. It does not silently change the V3 algorithm that was tested. It does not yet reject the known short-period class automatically (laboratory). There are no direction-separated keys and no session or one-shot mode. Whoever has the sheet can read every message of that time slot.

6. Courier mode

In short

Type and encrypt offline, QR to the online device, then into the messenger. Mirror that on receive.

Plaintext stays offline. In Courier mode, the offline device performs the cryptography. The online device transports Alberich ciphertext only. Plaintext and day keys therefore do not have to be entrusted to the messaging device. Alberich shows the finished ciphertext as a QR code; the online device scans it and sends it on the channel you already use. The receiver mirrors this: ciphertext from the messenger → QR → offline device decrypts.

Courier in four steps: type offline, QR, air gap, messenger sees ciphertext only
Four steps: encrypt offline, QR across the air gap, scan online, into the messenger. Plaintext stays left of the gap.

Courier splits computing from transport. Encrypt and decrypt stay on a second device that remains offline (courier off, airplane mode). The everyday device (courier on) only ever sees the finished ciphertext.

Why this helps against client-side scanning (Chat Control 2.0): those schemes target the communications device. If plaintext and the daily key never live there, a scan sees only ciphertext. Courier does not change the cipher. It changes where the cipher runs.

DeviceSwitchJob
OfflineCourier offsheet, plaintext, encrypt/decrypt
OnlineCourier onQR and letters only — no sheet, no plaintext
+---------------------------+                     +---------------------------+
| OFFLINE                   |                     | ONLINE                    |
|                           |      AIR GAP        |                           |
| [plaintext]               |                     |              [messenger]  |
|      |                    |                     |                    ^      |
|      v                    |                     |                    |      |
| Alberich encrypts         |  QR / ALBERICH-     |                    |      |
|      |                    |  CTQR1  ----------> |                    |      |
|      v                    |                     |                    v      |
| [ciphertext]              |                     |      [ciphertext only]    |
+---------------------------+                     +---------------------------+
  • One courier QR holds at most 955 ciphertext letters. Ignore the length warning if you are not using courier.
  • A sheet QR does not import keys into courier mode.
  • Default after first start: courier off. Turning it on asks for confirmation.

Limits of the protection boundary — not of the idea. Courier keeps plaintext and the sheet off the messenger device. It does not protect a compromised offline device, a camera on the screen, messenger metadata, or physical access. The offline device must not go “briefly online”; no cloud backups, no screenshots of plaintext.

7. The cryptographic heart

In short

Traditional: the current goes to the reflector and back the same way. Modern V3: one pass through the end rotor. The check group comes first.

7.1 Traditional path (historical M4)

Traditional signal path with the reflector in the centre
Plaintext enters the plugboard at the top, ciphertext leaves at the bottom. The reflector sits in the middle: outward path on the left, return on the right.
plaintext
   |
   v
Plugboard → Right rotor → Middle rotor → Left rotor → Greek rotor
                                                                  |
                                                                 UKW
                                                                  |
Plugboard ← Right rotor ← Middle rotor ← Left rotor ← Greek rotor
   |
   v
ciphertext

Involution: the UKW pairs letters. The whole path is therefore self-inverse: the same keying returns the plaintext. A letter never enciphers to itself — the classic crib that helped break the cipher.

Classic stepping: the right rotor always moves. On a notch it takes the middle rotor. In double-stepping the middle rotor can advance on two consecutive keypresses because of the notch logic, taking the left rotor with it. The left rotor’s notch has no effect. The Greek rotor stands still.

Rotor wirings (I–VIII, Beta, Gamma, UKW Bruno/Caesar) are historical and do not change.

Why historical Enigma was weak
  • Involution and “no letter to itself”. Known plaintext (cribs) rules out many settings at once. The Bombe used exactly that.
  • Procedure failures. For a time, doubled message keys, stereotyped openings and weather reports, careless rotor choice. Often the operator was the weakest link.
  • Parked Greek rotor and short periods. M4 adds a rotor in the electrical path, but that rotor does not step in service. Repeats stay observable.
  • Field keyspace. Plugboard and rotor choice look large; in practice discipline, captured sheets and cribs mattered more. Counting keys is not enough.
  • No integrity. An altered message is still a valid letter sequence. The historical machine does not notice.

Alberich in Traditional mode shows this machine honestly — including its weaknesses. More in the blog: Historical weaknesses of the Enigma.

7.2 Modern V3 — signal path and machine

Modern V3: plugboard through end rotor, no return path
Plaintext enters the plugboard at the top, ciphertext leaves the end rotor at the bottom. One pass, no return.
plaintext
   |
   v
Plugboard → Right rotor → Middle rotor → Left rotor → Greek rotor → End rotor
                                                                          |
                                                                          v
                                                                     ciphertext

On decrypt Alberich uses the same step sequence and the inverse end rotor. You do not set that; the app switches the path when the input is ciphertext.

The end rotor is a free 26-letter permutation, not involutory. Bruno, Caesar and Dora are not the Modern default.

Greek-rotor start and ring. The ground setting is four letters — the visible start of all four rotors, including the Greek rotor. That is true in Traditional and in Modern. During encipherment the Greek rotor does not step in Traditional. The ring setting of the Greek rotor is something else: it applies in Traditional as on the historical M4 and in Modern V3. It shifts which wiring is active at which visible position. That the Greek rotor does not step in Traditional does not change that. In Modern the ground setting encrypts the message-key header and belongs to the canonical day key of the check group. A wrong ground setting fails the check group; no plaintext appears.

How the end rotor is generated

Alberich draws a random permutation from the device’s cryptography interface. If an involution comes out (a pairing like the UKW), it is discarded and drawn again. That is an internal safeguard, not an operator step.

7.3 V3 stepping

Notches are read before the rotors move. Modern V3 uses four-stage double-step. In so-called double-stepping the middle rotor can advance on two consecutive keypresses because of the notch logic:

Four rotors and double-step rules
When …then this moves …
every keypressthe right rotor
the right rotor sits on a notchthe middle rotor as well
the middle rotor sits on a notchleft and middle (double-step)
the left rotor sits on a notchGreek rotor and left (double-step)
Greek rotorhas no notches and drives no other rotor
  Greek rotor    Left rotor    Middle rotor    Right rotor
        ^              ^              ^                *
        |              |              |                |
        +------ double-step ------+                    |
                       |              +---- on notch --+
                       +---- on middle notch ----------+

7.4 Base-26 encoding

The rotor machine knows A–Z only. The UTF-8 message is therefore turned into one large integer and then written in base 26 as the letter body:

n ← 0
for each byte b:  n ← n × 256 + b
then n as A–Z digits (base 26)

The letter count of the body determines the original byte length uniquely. An empty message stays empty. Invalid lengths or non-UTF-8 are rejected.

Another character changes the whole integer (times 256 plus the new byte). That is why the ciphertext body looks mixed while you type — a consequence of the encoding, not a claim of cryptographic avalanche. Recommended maximum everyday length: 4,096 characters.

7.5 Message layout and check group

A Modern message is A–Z only. Groups of four are display. Minimum length 36 letters. The stamp ALBV means: this is a Modern V3 message.

ALBV | header (4) | message ID (8) | body | check group (20)
ALBV header message ID body check group
ALBV KCBD TESTMSGX XWSWIYDBU EFRKEQMITQRCOGPDSZAL

The header carries the message key: four rotor positions including the Greek rotor, encrypted under the day’s ground setting. The message ID is eight random letters, not a rotor position. It sits in the clear in the message and is bound into the check group. The message ID allows Alberich to detect messages already seen by the local replay cache. This protection remains local and requires no cloud state. Detection applies in the current session (up to 512 entries) and is not necessarily persistent across restarts or devices. The body is the Base-26 plaintext through the machine, running under the message key.

The check group lets Alberich reject tampering or the wrong key before any plaintext is released. Technically: HKDF-SHA-256 derives an authentication key from the canonical day key (salt ALBERICH-ALB3-AUTH, info pruefgruppe-v1); HMAC-SHA-256 is computed with that key; the first 12 bytes become 20 Base-26 letters (about 94 bits of tag space). The check group strengthens integrity and authenticity checking; it does not add to the nominal confidentiality keyspace. If it does not match, no plaintext appears.

The check group is computed from a canonical write-up of the daily key. That write-up includes a network label. Alberich uses the fixed abbreviation ALB here — not the internal number each device assigns to a network locally. Sender and receiver would not share that local number; the check group would fail even though both have the same sheet.

Canonical daily key of the documented test day (demo sheet, 16 August 2026):

ALB3-KEY
net:ALB
epoch:2026-08-16
rotors:Beta,V,VI,VIII
rings:EPEL
ground:CDSZ
plugs:AE BF CM DQ HU JN LX PR SZ VW
end:QWERTYUIOPASDFGHJKLZXCVBNM
notches:AFLRX|BEIMQUY|CDHKNPSVZ

7.6 Keyspace and security claims

The figures below apply only to the Modern V3 standard profile (four rotors by the selection rules, ten plug pairs with no repeated letters, a free non-involutory end rotor, three filler sets from {5,7,9}, randomness from the device cryptography interface — a CSPRNG, a cryptographically secure random generator). Hand-set rotors or plugs do not inherit these counts.

What “layer” means here. These are not five ciphers stacked on top of each other, but five views of the same system — the public research count, so combinatorics is never sold as attack cost.

  • A Support — how many standard sheets can exist at all (pure combinatorics).
  • B Shannon — how evenly the generator spreads over that space (actual entropy).
  • C Min-entropy — the least favourable, i.e. most likely, generator output.
  • D Equivalent-key — whether any settings would do nothing electrically (dead fields).
  • E Best demonstrated attack — what has actually been measured, not what the bit count promises.
LayerWhat is countedWhat it means for you
A SupportAll valid standard sheets: rotor choice, four rings, ground setting, ten plug pairs, free end rotor, three filler sets. Together ≈248-bit combinatorial support size of the standard profile.This describes the nominal configuration space and must not be interpreted as 248 bits of proven cryptographic security.
B ShannonHow evenly the generator spreads over that space. Size-5 notch sets are a little more common than size-9.The sheet you get is genuinely random — not every theoretical combination is equally likely; the gap is documented.
C Min-entropyThe least-favourable (most likely) generator output, in bits.An honest floor: even in the worst case the space stays large.
D Equivalent-keyFields that would change nothing electrically.No known dead fields on live V3. The study remains open — that is research, not a hidden flaw.
E Best demonstrated attackWhat the public research folder has measured so far.In the published research status as of September 2026, no practical complete day-key recovery without key gifts has been demonstrated. Details: chapter 9 Lab.

≈248-bit combinatorial support size of the standard profile. This describes the nominal configuration space and must not be interpreted as 248 bits of proven cryptographic security. The large configuration space is a feature of Modern V3, stated separately from any claim about actual attack complexity — open source, Kerckhoffs-compliant, with self-tests and a Python reference.

What Alberich deliberately does not solve. Forward secrecy in the classical sense (as in Signal): there, new key material is agreed after each message. Stealing today’s key still does not read yesterday. With V3 · daily key the key lasts the whole day; with V3 hardened it lasts the time slot (24, 4 or 1 hour). Whoever has the sheet reads every message of that epoch. Other epochs with another key stay untouched; that is not ratchet forward secrecy.

Anonymity: Alberich does not hide who talks to whom. The messenger still sees sender, receiver and time. Metadata, a stolen sheet and a compromised offline device sit outside the cipher.

8. Security, threat model & good practice

In short

No server, no account. The sheet is the secret. Courier protects the online device, not the metadata.

The table describes typical situations, not a ranking of the cipher. Left the situation, middle what Alberich does, right what you still handle operationally.

SituationWhat Alberich doesWhat you can do
Someone intercepts a message in the messengerWithout the monthly sheet there is no rotor path and no valid check group. The interceptor sees ALBV groups, not plaintext.Do not send the sheet on the same channel. Length and timing stay visible on the channel — that is metadata, not the cipher.
A partner loaded a different sheetThe check group fails. No plaintext is released unless verification succeeds.Compare the sheet word (daily key) or month and fingerprint (V3 hardened) before the first message. If it differs, share the sheet again.
The online device (messenger phone) is untrustedIn courier mode, plaintext and sheet are not on that device. A scan sees only ciphertext.Actually use courier. Without it, sheet and plaintext sit in the app on that same device.
The offline device falls into other handsThe cipher cannot protect a physically compromised or unlocked device: the sheet and often plaintext are there.Lock the device, emergency wipe, new sheet to your partners. Whoever has the offline device can also create new messages and feed them in via QR.
The sheet was shared unsafely or published (photo, mail, cloud)With the sheet, every message of that epoch can be read and forged (day or time slot). That is not a cipher failure — the sheet is the secret.Wipe or remove the sheet at once and issue a new one. Treat older messages of that period as unsafe.
Open review / lab analysisAlgorithm, self-tests and research are public. Transparency is a feature: anyone who knows the code should be able to examine it.Within the documented threat model, compromising the sheet or endpoint is one of the most direct practical attack paths. Cryptanalysis explicitly remains an area of open research.
A forged or substituted websiteA cipher on a hostile page does not protect you. Arbitrary code could exfiltrate keys.Use the official address alberich.pro, the companion or the Android app. Get Android only from Play or alberich.pro/fdroid (check the fingerprint). Compare an offline copy of the web app with the public repository.

What Alberich offers — and what it does not claim

Transparency is a feature, not a weakness.

Product promises and limits
What Alberich offersWhat Alberich does not claim
Local, inspectable, openly specified, reproducible testsNo formal security proof
No telemetry, no cloud keys, no accountNot a replacement for established AEAD protocols
Air-gap Courier, visible machine logicNo protection if the offline endpoint is fully compromised; no hiding of messenger metadata
Traditional as historical simulation; Modern V3 as everyday modeTraditional is not an everyday cipher

Good practice

  • Compare the sheet word (daily key) or month and fingerprint (V3 hardened) on a different path from the messages. Do not photograph the sheet or put it in the cloud.
  • Change rotors and keys only when the text fields are empty. Check the mode at the top.
  • Do not mix Traditional and Modern: different algorithms, incompatible.
  • Use courier if the online device is untrusted. Never take the offline device “briefly online”.
  • Emergency wipe if the device or sheet is lost, then a new sheet to your partners.

Chat Control 2.0 / client-side scanning: courier helps against scans on the messenger device, because neither plaintext nor sheet live there. It does not help against metadata, the offline device, an unsafely shared or published sheet, or a forged website.

The internal cryptanalysis of Modern V3 — attacks, limits and the public evidence snapshot — is in chapter 9 Lab.

9. Lab: We attacked Modern V3

In short

Without being given parts of the day key in advance, the internal cryptanalysis did not practically recover the complete Modern V3 day key. That is not a proof of security. Protocol leaks, reuse and a constrained weak-key class are known. Next step: independent external review.

How secure is Alberich Modern V3 in practice? Instead of assuming that a large keyspace must be enough, the lab tried to take the system apart systematically: intercepted messages, known plaintext, very long messages, many messages under the same key, reused message keys, partial knowledge of key components, state and cycle analysis, and targeted attacks on the rotor structure.

Without being given parts of the day key in advance, our extensive internal cryptanalysis did not practically recover the complete Modern V3 day key.

That is a strong result — but it is not a proof of security. The research also found concrete protocol weaknesses and operational risks. That is exactly why the lab exists: not to claim perfect security, but to expose weaknesses before someone else does.

Internal closure status
V3_INTERNAL_CRYPTOANALYSIS_CLOSED_PENDING_EXTERNAL_REVIEW

Target algorithm
Alberich Modern V3 · fingerprint 909cc1f35c98789c

Why run a cryptanalysis lab at all?

The historical Enigma was not broken because its designers failed to add enough machinery. It was broken because structure, reuse, operating procedures and mathematical relations could be exploited.

The algorithm may be public. The secret is the key.

Modern V3 is openly specified. Source code, test vectors and research artifacts are intended to be inspectable. Transparency is treated as a prerequisite for stronger confidence, not as a weakness.

So the central question in the lab was never only “How large is the keyspace?”, but: Can an attacker find structure that makes that large space collapse in practice?

In short: Modern V3 after the cryptanalysis campaign

Result of the internal campaign — not a bit-security claim
QuestionResult
Was the complete day key practically recovered without key knowledge?No.
Can a few intercepted messages simply reveal the key?Not with the attacks we tested.
Do very long known plaintexts help?Yes — as a strong filter, but they do not generate the correct key.
Does the public header leak information?Yes. It reveals equality relations between message-key letters. Not a full break, but unnecessary information.
Is reusing a message key dangerous?Yes. Same-MK reuse can become exploitable together with a plaintext catalogue.
Are there weak-key classes?One concrete class was found. In our final test it became exploitable only with extremely long known plaintext.
Do attacks work when key components are already known?Yes. Under substantial key gifts, components and even full configurations were recovered.
Does this prove Alberich is secure?No. Independent external review is still missing.

Four numbers that capture the closure

0

practical complete no-gift day-key breaks in the completed internal attack campaign

25/25

truth controls passed in the final H1024 long-message experiment

0/9

instances reached the preregistered material outer-generator gate in the joint header/body attack

0/8 → 8/8

short-period class: no success up to 4,096 known characters; 8/8 only at 16,384

These numbers are not “security bits”. They describe concrete experiments under explicitly defined conditions.

What did we attack?

The internal campaign went far beyond simple brute force. It covered several distinct attack models.

1. Ciphertext-only: intercepted messages only

This is both the hardest and the most realistic passive model: the attacker knows the algorithm and sees Alberich messages, but knows neither the plaintext nor the day key.

We investigated ciphertext statistics, repetitions and frequency effects, state and cycle properties, multi-message relations, public-header structure, and search and ranking approaches.

Result: no practical general ciphertext-only attack recovered the complete day key. That does not prove that such an attack cannot exist. It means that the internal attack families we implemented did not find one.

2. Many messages under the same day key

An attacker may collect far more than a single message. We therefore tested whether many messages from the same day can be combined. This uncovered a real protocol leak:

Equal letters at the same public-header position reveal that the corresponding message-key letters are equal.

This relation is exact and free for an observer to obtain. The important counter-result came from the final joint header/body experiment. Even when this header information was propagated directly together with body constraints, it did not create a new practical route through the complete outer key space.

The header reveals more than we want it to reveal in the future — but it did not open the day key.

V4 will remove the leak anyway.

3. Very long known messages

Known plaintext is a classic cryptanalytic setting: the attacker knows part of the original message and its ciphertext. Modern V3 was tested with long known texts reaching several thousand characters.

Long known messages are very effective at destroying false key hypotheses. They are much less effective at generating the correct hypotheses in the first place.

In the final EXP-077 campaign, the true hypothesis survived 25 out of 25 truth controls. At the same time, false candidates were strongly filtered as message length increased. The effect is highly profile-dependent. In the more structured profiles, the remaining false H1024 candidates were essentially eliminated by 4,096 symbols. The hardest profile was the more diverse, less regular material.

Long-message filtering: strong. Full-key recovery: no.

4. Combining the public header with the message body

If the public header leaks relations about the message key, and that same message key sets the rotor start for the body, can both observations be joined into a much cheaper attack? EXP-079 tested exactly that.

The joint model reduced candidates strongly compared with the header alone. But the decisive comparison was against the existing body attack: there was no material new outer-key generator. The preregistered success gate was missed, so we deliberately did not burn additional compute on a long run that had not earned escalation.

The most obvious known way to combine header and body did not break the main no-gift bottleneck.

5. Reused message keys

A message key is supposed to belong to one message. Reusing the same one under the same configuration introduces additional relations between messages. Together with a complete catalogue of possible plaintexts, the lab was able to identify the correct plaintext exactly.

Never reuse a message key.

Normal Alberich use: when the previous message is removed with the delete button and a new message is then written, Alberich automatically generates a new random message key. Users who follow this intended workflow do not need to change or invent the message key themselves. Additional safeguards can later prevent an already-used message key from being reused accidentally outside that normal workflow.

6. Attacking the shared end rotor

Modern V3 uses the same end rotor across multiple messages under a day key. Under normal no-gift conditions, this was not the main bottleneck. But once an attacker already knows substantial parts of the rotor stack, the shared end rotor becomes a cross-message lever. Under such strong preconditions, experiments recovered key components and, in some cases, complete configurations.

This is one reason why V4 is designed to derive the end rotor per message.

7. Weak internal periods

The lab also searched for unusually short internal state periods. It found a precisely defined five-start short-period class. In the synthetic key generator this class appeared in roughly seven percent of sampled cases.

Short-period class — known plaintext
Known charactersResult
256no successful attack
1,024no successful attack
4,096no successful attack
16,384attack reproduced successfully

So the demonstrated attack currently requires an extreme amount of known plaintext. The class is therefore classified as a constrained weak-key class, not an everyday key break. Still: if a known bad key class is cheap to detect during generation, simply do not generate it.

8. Attacks with known key components

The lab intentionally tested unrealistically strong attackers as well: supplied rotor parameters, known rings or notches, parts of the message key, a heavily constrained rotor stack. Under such assumptions, practical recovery progressed as far as complete key configurations.

This does not contradict the no-gift result. It answers a different question: How quickly does the remaining structure fall once a large part of the secret has already been compromised? In some cases, very quickly.

That is why key handling is part of the security model. The complete day key from the codebook must always be treated and protected as one coherent secret. Its individual parameters should not be regarded as independent, less-sensitive pieces that can safely be shared or stored separately.

The central result: filtering is not generation

False hypotheses can often be rejected very efficiently. Once a small, meaningful candidate catalogue exists, the true hypothesis can frequently be recognised and ranked highly. The hard part comes earlier:

How does an attacker practically generate the right combination of rotors, notches, stepping behaviour and message-key assignments in the first place?

That outer candidate space remained the decisive bottleneck. Even the final joint header/body experiment did not produce a practical new route through it.

Within the extended internally tested no-gift attack landscape, Modern V3 remained empirically resistant to practical complete day-key recovery.

No more than that. But no less either.

What does this mean for regular Alberich users?

  1. The day key remains the real secret. If someone gets the code sheet, they have the key. No rotor mechanism can save a published or stolen sheet. The day key in the codebook should always be treated and protected as one complete unit, not as a collection of independent parameters. Do not distribute the sheet over the same channel as the messages if you can avoid it.
  2. Do not reuse message keys. When the previous message is removed with the delete button and a new message is then written, Alberich automatically generates a new random message key. Do not manually copy or reuse a message key that has already been used.
  3. Fewer messages per long-lived key are better. This does not make the rotor cipher mathematically “stronger”. It reduces how much material an attacker can collect under the same shared configuration. That is what V3 hardened is for: shorter epochs (4 hours recommended) instead of a rigid 24-hour key. See chapter 5.2.
  4. Sensitive or very large content can use a fresh key. A session or one-shot key — a fresh independent V3 configuration for one session, one document or even one message — is recommended, but not shipped yet. Until then, generate a new hardened sheet or pick the shorter profile (1 hour).
  5. Courier solves a different part of the problem. Cryptanalysis asks how strong the cipher is. Courier asks where plaintext and keys exist at all. If the messaging device never holds plaintext or the day key, it cannot hand them to an app, a server or a local scanner. This does not replace cipher strength, but it reduces endpoint exposure. See chapter 6.

What has changed — and what is still planned?

Hardened V3: stronger operation without a new cipher

The V3 cipher core remains unchanged and compatible. Hardening happens in key generation and key use. Shipped (web revision 65, Android revision 31): an independent full key per time slot, profiles 24 h / 4 h (default) / 1 h, Alberich key time CET (UTC+1) all year, transfer via CBQR2 (.alb3cb2; web also live QR), MAC-first on receive, message-key register and send watermark (fail-closed), pin over clock. JSON and still QR remain for daily keys only.

Not shipped yet — laboratory or later: automatic rejection of the known short-period class, direction-separated keys, session and one-shot modes, a hard message-count cap per epoch beyond slot length. The companion does not generate hardened sheets. Android has file transfer, not MUR live QR.

Hardened V3 does not silently change the V3 algorithm that was tested. Old messages stay decryptable. Hardened new messages remain normal V3 messages — the keys are simply generated and used more carefully. How to use it: chapter 5.2.

V4: not more rotors — a better protocol

The research also showed what does not automatically help. More rotors, extra ring parameters, more complicated stepping, message-dependent notches or a constantly changing plugboard add a lot of implementation complexity without a demonstrated security gain in our attack landscape. V4 is therefore intentionally minimal.

The rotor core stays close to V3. The main changes are around it: per-message header mapping, per-message end rotor, unique message IDs, replay protection, strict cryptographic domain separation, one canonical data representation, robust key and state management, and automatic rejection of known weak keys.

The goal is not “V4 has more parameters.” It is: “V4 removes weaknesses that we actually found in V3.”

Is Alberich V3 secure now?

The responsible answer is: Modern V3 has been attacked extensively internally. None of those attacks demonstrated practical complete day-key recovery without additional key knowledge. At the same time, concrete protocol, reuse and weak-key issues are known.

So we explicitly do not claim:

  • “unbreakable”
  • “proven secure”
  • “248-bit secure”
  • “post-quantum secure”

A large configuration space is not the same thing as demonstrated attack resistance. The next quality level is therefore not the hundredth internal variation of the same attack. It is independent external cryptanalysis.

What did the lab teach us?

Complexity alone is not security.

The most useful improvements were not “more rotors”. They were less repeated structure, cleaner per-message separation, shorter key lifetimes, better key management, unambiguous protocol state, and transparent testing. The rotor concept remains visible — but the security engineering around it becomes more modern.

The fair balance sheet

What the attacker did achieve

  • expose defined protocol information
  • use long known texts as strong filters
  • exploit additional relations under reuse
  • recover components and even full configurations under substantial key gifts
  • exploit a constrained short-period class under extremely long known plaintext

What our internal analysis did not achieve

  • practical complete recovery of the V3 day key from normal public messages
  • turning the public-header leak into a practical complete no-gift attack
  • turning long messages alone into a full key break
  • practical generation of the complete outer candidate space

That is the state at which we are closing the internal V3 campaign and moving on to the next generation.

Transparency instead of a trust promise

Alberich is an experimental, openly specified rotor system. It is not a replacement for broadly reviewed modern standard cryptography, and it does not come with a mathematical proof of security. That is exactly why we publish more than positive results: negative attack results, weaknesses that were found, ideas that were rejected, limits of our own testing, and the design changes that follow for V4.

Security does not improve because nobody looks. It improves when people look closely.

Public cryptanalysis evidence on GitHub

Research and evidence snapshot

We also publish the key results of the Modern V3 investigation as a public research and evidence snapshot on GitHub:

github.com/MyEngineeringTools/alberich-v3-cryptanalysis-evidence

The repository is intended primarily for technically interested readers, security professionals and cryptanalysts. It includes the final internal security assessment of Modern V3, publicly verifiable evidence for the closure experiments EXP-077, EXP-079 and EXP-081, hash bindings and verification tools, public challenge and result data, explicit marking of conflicting or rejected evidence, and documented limits of our own investigation.

The public snapshot is not a security certificate and not proof that Alberich is “unbreakable.” It is also not the complete internal Laboratory and contains no private truth data. Its purpose is transparency: readers should be able to see which attacks were actually performed, what they found, and which evidence supports our current assessment of Modern V3.

If you do not want to take our conclusions on trust, you can inspect the published evidence yourself.

Frequently asked questions about the lab

Was Alberich Modern V3 broken?

Not in the general sense. The completed internal cryptanalysis did not demonstrate practical complete day-key recovery without additional secret-key knowledge. Successful attacks do exist under defined preconditions, including substantial key gifts or specific reuse failures.

How secure is Alberich Modern V3?

The fair wording is: empirically resistant within the extended internally tested no-gift full-key scope, while retaining known protocol and operational risks. This is explicitly not a mathematical proof of security.

What does “no-gift” mean?

“No-gift” means the attacker is not handed secret key components. The attacker must work only with information allowed by the stated threat model — for example public telegrams, or known plaintext in a known-plaintext attack.

Why build V4 if V3 was not fully broken?

Because good security engineering does not wait for total failure. V4 is intended to remove weaknesses we actually found: repeated cross-message structure, the public-header leak, Shared-E, reuse risks and the known short-period class — without adding decorative complexity.

10. FAQ & troubleshooting

In short

Usually: wrong mode, incomplete message, or not the same sheet.

Why is the output garbage?

Different mode from the sender, different day, different rotor order — or only part of the message. In Modern the receiver must paste everything from ALBV through the check group. Traditional: A–Z only, same start position.

Check group invalid

The check group binds the whole message to the daily key. Typos, missing groups, wrong day or wrong end rotor — all fail the check, and no plaintext appears. That is intentional.

Sheet word does not match

Then the CRC-32 comparison value differs — often you really have a different sheet. Stop, share the sheet again, and compare the sheet word through an independent channel. CRC-32 collisions are possible; the sheet word is a plausibility check, not a signature. Hardened sheets have no sheet word: compare month and fingerprint there.

What is V3 hardened?

Modern V3 with an independent full key per time slot (24 / 4 / 1 hour, default 4 hours). Alberich key time is CET all year. The telegram remains ALBV. Share as a .alb3cb2 file; in the web app also as a live QR. JSON and still QR are for daily keys only. The companion does not generate hardened sheets. Details: chapter 5.2.

Can I mix Traditional and Modern?

No. Both sides need the same mode and the same sheet. The companion (Chrome, Edge, Firefox, Thunderbird) only has Modern and daily keys — Traditional and V3 hardened are in the web app and on Android.

Play Store or F-Droid?

Both are official. Play is the shorter path. The F-Droid repo at alberich.pro/fdroid is the author’s repo, not f-droid.org. Check the fingerprint before adding it. Details in section 1.1.

Can I mix Play and F-Droid?

No. The signatures usually differ (Play App Signing). A Play install cannot be updated from the repo and vice versa. To switch: back up sheets, uninstall, pick the same channel again.

Length limits and several QR codes

The recommended maximum everyday length remains 4,096 characters of plaintext. The theoretical Base-26 codec ceiling is 200,000 individual letters — at most 117,510 UTF-8 bytes. One courier QR holds at most 955 ciphertext letters; ignore the QR warning if you are not using courier. Beyond that, shorten or split into two sends.

Fewer than three plug pairs

This only happens if you set the key by hand. When Alberich generates a sheet it always sets ten plug pairs. Below three pairs Modern refuses to run — add pairs in setup. Each letter may appear in only one pair.

Was Modern V3 broken?

Not in the general sense. The completed internal cryptanalysis did not demonstrate practical complete day-key recovery without additional secret-key knowledge. Successful attacks do exist under defined preconditions, including substantial key gifts or reused message keys. The fair wording and the evidence are in chapter 9 Lab.

11. Glossary

ALBV
Visible stamp of a Modern V3 message. Applies to daily keys and V3 hardened.
Alberich key time
CET (UTC+1) all year, no daylight saving. Selects the time slot for V3 hardened, regardless of the device time zone.
Base-26
Mapping any text onto A–Z as one large integer so the rotor machine stays on letters.
Double-step
A rotor takes the next one with it when it sits on a notch — historical behaviour, extended to four rotors in Modern V3.
End rotor (E)
Free 26-letter permutation instead of a reflector. Not involutory. Fixed points allowed.
Greek rotor
Beta or Gamma. Four start positions like the other rotors. In Traditional it does not step; the ring applies. In Modern V3 it steps and the ring applies.
Ground setting
Four-letter start from the daily key. Encrypts the message-key header.
Involution
A map equal to its inverse. Historical Enigma; not Modern V3.
Short-period class
A precisely defined five-start class with an unusually short internal state period. In the lab it became exploitable only with extremely long known plaintext (16,384 characters). Automatic rejection during generation is not shipped yet (laboratory).
Courier
Physical split: compute offline, online only ciphertext via QR ALBERICH-CTQR1.
Filler notches (“Lückenfüller”)
Key-dependent turnover notches on the right, middle and left rotors. Historically each rotor had one or two fixed notches. Modern V3 puts 5, 7 or 9 notches per rotor from the daily key — visible on the sheet, independent of rings and plugs. The Greek rotor has no notches. These notches remove the fixed historical pattern and make a direct transfer of classic Enigma period and notch attacks significantly more difficult. The behaviour is openly documented and can be analysed independently.
Message ID
Eight random letters, not a rotor position. Bound into the check group and used by the local, session-scoped replay cache — no cloud state.
No-gift
Attacker model without gifted secret key components. The attacker works only with what the model allows — for example public telegrams, or known plaintext in a known-plaintext attack.
Emergency wipe
Deletes every sheet in this browser or app.
Check group
20-letter authentication group at the end of the message (HKDF, then HMAC-SHA-256). Verified first; no plaintext without a valid group.
Message key
Four-letter rotor start per message. Modern: automatic; Traditional: manual or generated.
Sheet word
A short, non-secret CRC-32 comparison value for the daily-key monthly sheet (shown as XXXX XXX). Everyday plausibility check, not a signature. Hardened sheets use month and fingerprint instead.
UKW
Historical reflector (Bruno, Caesar, Dora).
V3 hardened
Shipped sheet type: an independent full key per time slot (24 / 4 / 1 hour). Cipher core unchanged. Transfer via .alb3cb2 (web also live QR).
Time slot
Validity window of a full key in V3 hardened. The clock selects the slot; it does not derive the key.

Filler notches — picture

Gold marks the notches. The remaining letters are the “gaps” — hence the name. When a rotor sits on a gold position, it takes the next one with it. Key-dependent turnover notches remove the fixed historical pattern and make a direct transfer of classic Enigma period and notch attacks significantly more difficult.

A–Z letter ring with seven gold notches
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
  ■       ■       ■       ■       ■       ■       ■
  7 notches, count from {5, 7, 9}, positions random

Appendix

Example message (test vector)

Plaintext Hello, demo sheet day 16 (sheet word CPTZ YYH), message key LDNQ, message ID TESTMSGX. For checking only — not for everyday use.

ALBV KCBD TEST MSGX XWSW IYDB UEFR KEQM ITQR COGP DSZA L

Ungrouped (the app accepts this too):

ALBVKCBDTESTMSGXXWSWIYDBUEFRKEQMITQRCOGPDSZAL

To test: import the demo JSON, pick day 16, paste the full message as ciphertext. Expected output: Hello.

Second vector, UTF-8: plaintext Guten Tag! Äpfel 🔐

ALBVKCBDTESTMSGXXYEOWAEKZVYWNKGNQGALJWTDDGVPGDVBKCQNOSYVWGYPSDFCYZLSRHZAVJ

Links

Versions

  • Handbook date: 4 September 2026
  • Recommended web app: 1.0 (Revision 65)
  • Android: 1.0 (Revision 31)
  • Browser companion: 1.0.24 · Thunderbird: 1.0.16