Makoto
Menu
Case 06 · invisible Unicode

Unchanged bytes can still violate policy.

A string contains a bidirectional control or zero-width character. The signature and digest both pass because the dangerous bytes were present when the producer signed them.

The correct failure

  1. Verify authenticity Keep the valid signature result. Do not mislabel the content hazard as tampering.
  2. Verify artifact integrity Keep the valid digest result when the received bytes are unchanged.
  3. Apply the required profile Validate the actual structured artifact or relevant predicate extension under the receiver's digest-pinned schema.
  4. Deny on content policy Report the exact field and rule that failed so the producer can normalize, reject, or explicitly justify the value.

Why this belongs in the provenance story

The profile and result travel with the evidence boundary, so a later recipient can tell the difference between “bytes changed” and “unchanged bytes were never acceptable.” That distinction matters for incident response and remediation.

Concrete content-policy check

InputA signed JSON artifact whose visible label contains a hidden bidirectional or control character.
Integrity resultThe digest and signature can still pass because the bytes have not changed.
Profile resultA receiver-required bounded string rule rejects the exact field and reports the profile failure.
RemediationThe producer normalizes or rejects the field, creates new output bytes, and appends a new signed statement.

Inspect the safe and flagged byte sequences side by side

Inspect the bytes

The detailed case includes a bounded string-profile example.