# signature-key-identity-exclusion-review

> Review unknown native signature keys without modeled exact identity exclusion.

Canonical: https://nightshade.dicksonwu.xyz/rules/signature-key-identity-exclusion-review.html
Release: Nightshade 0.1.1 (v0.1.1)

| Field | Value |
| --- | --- |
| Rule ID | `signature-key-identity-exclusion-review` |
| Severity | info |
| Confidence | varies |
| Maturity | experimental |
| Selection | Opt-in |
| Policy intent | not required |
| Default enabled | no |
| Category | Other active opt-ins / Authorization, identity and membership |
| Engine facts used | canonical-native-verifier-operands, complete-original-successful-histories, typed-immutable-key-exclusion |
| Release | v0.1.1 |

## Selection and scope

Not selected by default. Select it with `--detectors` or the `detectors` list in nightshade.json. Either one replaces profile selection, so list every rule you want.

```sh
./.nightshade/node_modules/.bin/nightshade ./contracts --detectors signature-key-identity-exclusion-review
./.nightshade/node_modules/.bin/nightshade detector show signature-key-identity-exclusion-review
```

The first command runs only this rule; `--detectors` takes a comma-separated list. The second prints the rule's metadata from your installed version.

Severity is review priority. It does not express exploitability or impact. Confidence is detector metadata, not a probability. All built-in rules are experimental.

Compiler scope: the engine supports the pinned profiles 0.28.0, 0.29.0, 0.30.0, 0.31.1, 0.33.0-rc.2, 0.34.0, 0.35.0-rc.1 and 0.35.0, with ZKIR2 by default. Support for this rule can be narrower; the rule documentation below states any narrower scope.

## Corpus checks

Synthetic corpus checks for this rule in the 0.1.1 proof run. A check counts only with compiler acceptance and complete analysis.

| Positive detected | Corrected quiet | Lookalike quiet | Other negative quiet | Incomplete |
| ---: | ---: | ---: | ---: | ---: |
| 3/3 | 3/3 | 2/5 | 1/1 | 0 |

Deviations recorded for this rule:

| Case | Kind | Expected to observed lines | Issue |
| --- | --- | --- | --- |
| manifest.json / signatureIdentityExclusion46/drafts/signature46/caller-key/lookalike.compact | lookalike | [5,9] to [5,9] | control hit |
| manifest.json / signatureIdentityExclusion46/drafts/signature46/persistent-key/lookalike.compact | lookalike | [12,17] to [12,17] | control hit |
| manifest.json / signatureIdentityExclusion46/drafts/signature46/counter/lookalike.compact | lookalike | [44,45] to [44,45] | control hit |

These are behavior checks on synthetic fixtures, not a precision or recall estimate. See [evaluation](https://nightshade.dicksonwu.xyz/evaluation.md#synthetic-corpus).

## Rule documentation

From https://github.com/DicksonWu654/nightshade/blob/v0.1.1/docs/detectors/signature-key-identity-exclusion-review.md at v0.1.1.

Availability: **opt-in**, informational severity, high confidence in the reported
source relationship. No policy required.

Review an unknown caller key or an unknown whole persistent Cell snapshot passed
to the canonical native Jubjub Schnorr or secp256k1 ECDSA verifier. A finding says
that a complete original modeled successful history contains no modeled mandatory
caller or internal check excluding the identity of the exact immutable key on its
own curve. Message-only checks retain the key obligation. An application namesake
verifier is outside scope.

This does not establish that the key is identity, that an identity input could
satisfy the other checks, that enrollment is unsafe, or that a signature is
mandatory. Curve membership, subgroup validity, sole authorization, concrete
feasibility and application impact remain unproved. Trusted initialization or
application policy can make the observation intentional. A check in a separate
enrollment transaction cannot validate an unknown later storage snapshot without
a complete storage invariant.

The observer captures caller-refined arguments in evaluation order before the
callee adds constraints, then retains the invocation only on its successful
history. Imported aliases, ordinary helpers, callbacks and summary replay use the
ordinary transfer engine. Empty callback sequences retain zero-iteration behavior.
Exact key inequalities, mandatory equalities and native identity-to-identity
`ecMul`/`ecNeg` observations are joined only within that history. An enforced
nonidentity cofactor result excludes identity of that exact Jubjub input; it proves
no curve or subgroup property. Native generator nonidentity is evidence about its
output only. Coordinate checks or derived verifier points cannot validate an input
key by inversion. Guards on another key, a different Cell revision or a mutually
exclusive history cannot discharge the obligation.

The supported exact profiles are Compact 0.34.0/ZKIR2 for Schnorr and
0.34.0/ZKIR3 for both families, plus 0.35.0 and 0.35.0-rc.1/ZKIR2 Schnorr. The latter
source-pinned verifiers reject identity internally and are quiet. ZKIR3 is currently
qualified only for 0.34.0; this rule supplies no guessed 0.35 ECDSA model. Unsupported
profiles, relevant opaque predicates, lost provenance, unknown collection or struct
projections, transformed verification operands, checkpoints, external composition,
unfinished histories and exhausted allowances produce incomplete diagnostics.
Known point constants are outside this unknown-key review. The default
`identity-signature-key`, Jubjub enrollment and signed-input rules keep their
existing contracts and observation cost.

Preparation, observation, retained metadata, immutable keys, typed predicate
closure and finding emission share the unchanged **40000 steps per entry,
256 paths per entry, 50000 cumulative abstract values per rule**. There is no
separate proof allowance or retry. Experimental Counter-query mode lacks this
exact observation contract and reports unavailable evidence when selected.

From a built source checkout, select this rule with
`node dist/src/cli.js scan examples/review/contract.compact --detectors signature-key-identity-exclusion-review --zkir-version 3`.
Inspect its CLI metadata with
`node dist/src/cli.js detector show signature-key-identity-exclusion-review --json`.

## Suppress a match

If a match is intentional, suppress it on the line before with the exact rule ID and a reason of at least eight characters:

```compact
// nightshade-disable-next-line signature-key-identity-exclusion-review -- Reason this match is intentional
```

Diagnostics cannot be suppressed, and an unmatched directive for a selected rule makes analysis incomplete. See [configuration](https://nightshade.dicksonwu.xyz/configuration.md#suppress-an-intentional-match) for fingerprint suppressions and baselines.

## References

- [Rule source document at v0.1.1](https://github.com/DicksonWu654/nightshade/blob/v0.1.1/docs/detectors/signature-key-identity-exclusion-review.md)
- [Catalog entry in rules.json](https://nightshade.dicksonwu.xyz/rules.json)
- [All rules](https://nightshade.dicksonwu.xyz/rules.md#authorization-identity-and-membership)
- [Limitations](https://nightshade.dicksonwu.xyz/limitations.md)
