Reportskem-23 · Constant-time review

Mito (kem-23)

CandidateMito
FamilyCode-based
ArchiveMito.zip (SHA-256: ee11788a3e8bf8653d18ade6580c47a331b91e7eac3e31a5a6750a4b4cfb827b)

kem-23-1: Mito-E discards every erasure before Reed–Solomon decoding

SeverityMedium
Scopeimplementation
StatusConfirmed
AffectedMito-1-E and Mito-2-E, all three parameter sets
DiscoveryTrivial
ExploitationDFR/conformance failure; concrete decapsulation failure rate not measured
CreditMarkku-Juhani O. Saarinen markku-juhani.saarinen@tuni.fi, with AI assistance
Date2026-09-21

The specification defines Mito-E by distance-informed errors-and-erasures decoding. The modified inner Reed–Muller decoder returns an erasure count t and erasure positions pos; the outer Reed–Solomon decoder is then supposed to use them, with correctness condition 2ν+t ≤ N−K. The E-variant DFR calculation relies on this extra decoding capacity.

All twelve submitted Mito-E source trees (six parameter variants, each in reference and optimized form) compute t and pos but immediately discard both. They call the same two-argument, errors-only reed_solomon_decode(m,tmp) used by the baseline scheme. Thus the shipped E variants do not implement the algorithm whose DFR is claimed in the PDF. Some submitted trees also hard-code PARAM_ALPHA=7 where the specification's E-variant DFR tables use 9 or 11. Without a fresh analysis of the shipped decoder and constants, this is not yet a quantified key-recovery attack.

Reproducing

Commands below run in a checkout of the ngcc-harness repository with the candidate built (see its README).

python3 security/design_parameter_audit.py --report-id kem-23-1

The kem-23-1 check verifies this data-flow defect in the six reference E-variant source trees retained in the public harness and the corresponding errors-and-erasures requirement in the PDF. The command does not inspect the optimized trees.

To check the six optimized counterparts mentioned above, download the SHA-256-identified official archive and inspect each optimized E-variant's code.c and reed_solomon.h for the same discarded t/pos values and two-argument reed_solomon_decode(m, tmp) call:

IDS=kem-23 ./download.sh
./extract.sh kem-23
rg -n 'reed_muller_decode\(tmp, pos, em\)|reed_solomon_decode\(m, tmp\)' kem-23/Implementations --glob code.c