Vulnerability report classification

This document defines how NGCC findings receive Severity, Status, Layer, and Discovery labels. These labels answer different questions and must be assigned independently:

A finding can therefore be Critical but easy to fix, or Low but expensive to fix. An expensive constant-time implementation is not automatically a design flaw, but it becomes design evidence when the construction's claimed software performance relies on the leaky operation and no portable competitive constant-time path is supplied or known.

Here supplied means the submitters provide the constant-time code, and known means a well-known security-engineering technique exists that the report itself can describe (for example masked arithmetic, bitslicing, in-register shuffles, AES instructions, Beneš networks, or a published constant-time decoder or solver). The same meaning applies to hash functions.

Proposed fixes

When a report records a proposed change, whether communicated publicly or privately, it places that material in a Proposed fixes subsection and attributes the source. An attributed attack or concern about a proposed change may also be noted there, clearly scoped to the proposal. Recording it does not establish that a revision is correct, sufficient, complete, compatible, or secure, and does not alter the archived submission's classification. A revised candidate requires separate evaluation. Reports may state that one attack route is independent of another mechanism, but must not turn that observation alone into a verdict on a proposed fix.

Discovery effort

Discovery effort is independent of severity, reproducibility, attribution, and whether AI tools assisted the work. Rate the reasoning needed to find and substantiate the mechanism—not the cost of executing the resulting attack:

Do not use Hard merely because the final attack is computationally expensive, the reproduced experiment is large, the severity is Critical, or the report was AI-assisted. If a later extension becomes the principal basis for the finding, reassess Discovery using the extension's reasoning.

Security targets

A finding is judged against the NGCC call as well as the specification's own claims. The canonical documents are published by ICCS.

For Round 1, the submitted specification and implementations are the evaluation target. An attack that requires a proposed modification does not change the submitted candidate's headline severity or status. Discussion of that modified variant belongs under Proposed fixes, clearly distinguished from evidence about the submission. An auditor-devised hypothetical variant may be discussed in a separate analysis note, clearly marked as hypothetical; it is not a candidate finding or a submitter-proposed fix.

Public-key algorithms (call):

Hash algorithms (call):

Severity

Rate the strongest consequence supported by the report, including its stated preconditions and controls. Do not rate the feared consequence of an uncompleted attack.

A build or packaging problem alone is not a security finding, even at Low: record it in an evaluation or harvest note unless it causes a demonstrated security, availability, or interoperability failure in a submitted/supported build. A crash reachable through the submitted API may be Low when its only shown effect is termination; a failure that occurs only in a hand-edited or unsupported build does not qualify on that basis.

Critical

The report demonstrates a violation of a primary cryptographic security claim or applicable NGCC target, or gives a concrete attack bound below that target. Examples include:

A candidate-specific route with a quantified below-target cost may be Critical / Lead if material steps remain unvalidated. The report must name those steps and make clear that the cost is conditional, not a demonstrated break. A generic possibility or an unexplained extrapolation does not qualify.

NGCC requires a 512-bit classical level and permits an optional 384-bit level. A demonstrated 2^256 attack against a 512-bit claim is therefore Critical: practical feasibility is not required when the advertised security bound is violated.

For quantum attacks, a Grover-iteration count alone is not an end-to-end work estimate when the oracle is nontrivial. Count the oracle circuit, reversible arithmetic, memory and parallelization costs under the metric used by the claim. If those costs could close the reported margin and have not been bounded, classify the result as an analysis or proof gap rather than a confirmed below-target attack.

High

The report establishes a serious security failure but stops short of a complete primary-claim break. Typical cases are:

A demonstrated violation of a claimed property that the NGCC call does not require is High rather than Critical. For example, signature malleability that violates a claimed SUF-CMA property while leaving EUF-CMA intact is High, because the call accepts either EUF-CMA or SUF-CMA. Failing the designed security level of a required property is Critical.

Do not use High merely because a defect is expensive to repair. A side-channel finding can nevertheless be High when it exposes secrets directly and the construction lacks a portable constant-time realization without a substantial and justified loss of its advertised performance.

Medium

The report confirms a security-relevant defect or secret-dependent leakage, but does not demonstrate recovery, forgery, or a primary indistinguishability break. Examples include:

Low

The demonstrated impact is narrow and presently separated from a cryptographic claim violation. Examples include:

An easy fix may support Low when the demonstrated consequence is already narrow. It must not downgrade a demonstrated key recovery, forgery, or claim violation.

Info

Use Info for withdrawn records or non-security tracking entries. A live security finding should normally be Low or above.

Info may also record a reported property that is generic to a class of designs, such as the multi-ciphertext loss of every unsalted deterministic FO KEM, when the submission makes no stronger claim and the property has no candidate-specific consequence. Keep the cross-candidate discussion in an analysis note rather than singling out one submission with a higher severity.

A generic loss of a proof technique, shared across multiple schemes, does not by itself identify a candidate vulnerability. Examples are generic QROM/FO reduction terms and a Grover-iteration count without the oracle's full cost. Record these in a class analysis note, or retain a reported candidate ID as Info for traceability. The numerical calculation may be correct without being an attack. This exception does not turn a candidate-specific proof shortfall, parameter choice, false premise, or unvalidated claimed safety bound into Info. Apply the ordinary Medium/High proof-gap rules to those cases while stating clearly that no attack is demonstrated.

Info may record an attack requiring state-control capabilities outside the evaluated security model, such as seeding, cloning, resetting or rewinding the signer's DRBG, unless the submitted public interface or a formal security claim grants that capability. Randomized security experiments instead give each algorithm call fresh coins with the specified distribution. This rule does not cover ordinary reuse of scheme state exposed by the API, or an implementation that ignores, bypasses or predictably initializes its randomness source; classify those by their demonstrated consequence. An informal robustness remark in a submission does not create a formal claim. Use Status: Confirmed when the reported behavior was reproduced; reproduction confirms the behavior, not an in-model attack. State the out-of-model capability in the title and Exploitation line.

The same principle applies to cross-profile composition. A reproduced attack that requires one key to be installed simultaneously in distinct parameter profiles is not an attack on either profile's ordinary EUF-CMA experiment. Use Info when the composition also depends on an auxiliary non-default mode and the specification neither supports shared-profile keys nor claims joint security. Use Low as a hardening finding when shared key generation and formats make the reuse a plausible deployment mistake and missing profile separation is the only extra precondition. Use a higher severity only when a formal claim or a supported public interface covers the composition.

The ICCS KAT environment fixes drng.c and its seed-to-stream mapping, so a report may pin a KAT seed as a reproducible test fixture. Byte identity is not promised for a different secure RBG. One seeded witness establishes existence in the frozen implementation, not a general rate or an adversary's ability to choose that stream; broader claims require an analytic argument or multi-seed controls.

The supplied init_random_number/get_random_number interface is an external RBG interface, not a scheme XOF. Reinitializing or resetting a local instance from protocol data and relying on byte-for-byte replay uses that RBG as a deterministic PRG, KDF, or XOF. When correct decoding, verification, re-encryption, serialized-key interpretation, or cross-implementation behavior depends on the particular ICCS drng.c stream, record a Low Implementation finding unless a stronger consequence is demonstrated. A scheme-defined XOF with an explicit seed-to-stream mapping does not have this defect. If a specification defines and builds its own internal XOF but calls it a PRNG or DRBG, that is a labeling error and is not reported; the defect is reliance on the determinism of the external RBG. Use Layer: Implementation when the code wires a specified internal expander to the external RBG, and Layer: Design when the specification itself routes the expansion through the external RBG. Ordinary fresh-randomness calls and KAT seeding are not affected.

Side-channel severity

For timing, cache, branch, division, power, or address-trace findings, answer these questions in order:

  1. Is the varying operand secret or derived from secret data at that point?
  2. What can observe it: source inspection only, co-resident cache/process, local timing/power, or remote timing/API status?
  3. Is the channel measured and repeatable, or only visible in source or machine code?
  4. Is there a candidate-specific map from observations to a key, shared secret, plaintext, or forgery?
  5. Has that map been executed end to end with the submitted implementation?

Use the resulting consequence, not the mere presence of a branch or table, as the primary severity determinant:

Evidence and consequence Usual severity
Source-level secret branch/address, no measured channel, local repair Low
Repeated secret leakage, measured channel, or material constant-time rewrite; no recovery Medium
Direct fine-grained leakage intrinsic to the advertised fast path, with no competitive constant-time realization supplied or known High may be justified
Stable oracle plus candidate-specific recovery path, one channel/scale gap remains High
End-to-end key/secret recovery or forgery, without an explicit side-channel-resistance claim High
End-to-end key/secret recovery or forgery that contradicts an explicit claim of resistance to the relevant side-channel class Critical

The table is a default, not a substitute for candidate-specific cryptanalysis. Public-value branches and lookups are not vulnerabilities.

Remediation burden supplies a second floor when no stronger consequence has been demonstrated: a local constant-time rewrite is Low, a material rewrite using known moderate-cost techniques is Medium, and a leak intrinsic to the advertised fast path with no supplied or known competitive constant-time realization may be High and Layer: Design. Use the higher of this floor and the consequence-based severity. Thus an easy fix does not lower a demonstrated recovery, and a hard design-level fix can raise a source-only leak.

Full recovery demonstrates that the implementation requires countermeasures and is therefore High even when the submission makes no side-channel claim. Critical is reserved for a demonstrated primary attack that additionally contradicts an explicit constant-time or relevant side-channel-resistance claim; merely supplying ordinary reference or optimized code does not imply such a claim.

Hash-function portability rule

For this audit, hash inputs and internal states are treated as potentially secret. Hash functions are routinely used on passwords, key material, transcripts containing secret contributions, and other confidential data.

A hash side channel is Layer: Design when all of the following hold:

  1. the fast construction or the submission's advertised performance relies on secret-indexed tables, secret-dependent control flow, or another operation that is not portable constant-time;
  2. removing that operation requires a different evaluation strategy rather than a local mask or canonical lookup replacement;
  3. the portable constant-time strategy has a significant demonstrated or technically justified performance cost; and
  4. no competitive portable constant-time path is supplied by the submitters or known as a well-known technique.

Hardware instructions may provide a safe fast path on some targets without curing the design-portability problem. A primitive that is constant-time only where a particular instruction-set extension is available is materially different from an ARX-style construction whose ordinary scalar operations are naturally constant-time across common processors.

Under this rule, a large byte-indexed table that is central to a hash's speed can support High / Design, even before a complete message-recovery experiment, when the address trace directly reveals message or state bytes and the only portable repairs impose a substantial performance loss. The report must identify the portable repair and measure its cost where feasible; an unmeasured slowdown must be labelled as an estimate.

Status

Status records confidence in exactly the claim made by the report:

Confirmed may describe a confirmed source-level leak rated Low, while a High or Critical attack can remain a Lead. Severity and status must not be collapsed into one axis.

Layer

Assign the layer from the root cause, not from repair difficulty:

The absence of a constant-time implementation ordinarily proves only that the submitted code is not hardened. To label the root cause Design, show that the specification mandates the observable behavior, that the advertised fast path structurally relies on it under the hash portability rule, or that the claimed performance/security profile cannot be retained by a portable constant-time implementation.

Remediation burden

Record remediation in the finding body when it helps evaluation:

Use measurements where possible. Qualify an unmeasured cost as an estimate. State tradeoffs: storing an expanded secret changes memory and key handling; masked scans, sorting/permutation networks, dense multiplication, and constant-time elimination may change asymptotic or concrete cost. Do not call such changes local without bounding those costs.

For hash functions, remediation burden also informs the Design classification: a local masked operation or small in-register substitution remains a side-channel implementation defect, while replacing a performance-defining large table or data-dependent evaluation strategy can be a design-level portability defect.

Decision procedure

For each finding:

  1. Trace public and secret inputs through the vulnerable operation.
  2. State the exact observed behavior and attacker model.
  3. Identify the strongest demonstrated consequence and its controls.
  4. Compare that consequence with the applicable NGCC target and any explicit specification claim.
  5. Assign Status from evidence, Severity from consequence, and Layer from root cause independently.
  6. Describe remediation and its expected cost separately.
  7. Keep limitations in the report: what was not measured, recovered, forged, or proved.

For contest pseudohash and pseudoXOF, assume ideal replacement primitives with the same external dimensions and parameters. A finding that disappears solely on that replacement is not publishable.