Skip to content

release: sign sealed NPU kernel set manifests (authenticity on top of confidentiality) #574

Closed

Description

@bong-water-water-bong

Follow-up from #548 (closed as not planned): the NPU kernels stay sealed (<set>/layout.json + <set>/layer1_*/layer1.elf
with the 1BPKCRYP magic, ONEBIT_KCRYPT_REQUIRE_SEALED=1, package_checks refusing anything else under npu/kernels).
That keeps confidentiality, which is the part the owner's rule requires.

What is missing is authenticity: today the only thing that says a set is ours is the sealing itself — a set re-sealed
by a different key, or a set swapped for another one that also decrypts, is not distinguishable by the shipped engine
beyond the key check. Signing the sealed set's manifest on top of encryption closes that without giving anything up: the
kernels stay ciphertext, and the signature only covers the manifest (and through the manifest's digests, the ciphertext
files).

Sketch, so whoever picks it up starts in the right place:

  • manifest per set, listing every shipped file with its sha256 of the ciphertext; manifest.sig is an Ed25519
    signature over the manifest, verified by the engine (the loader lives in the private NPU runtime, which holds only the
    release public key);
  • scripts/package-linux.sh / scripts/weekly.sh package_checks: a sealed set must also carry a manifest that lists
    exactly the files packed, and a set without one fails the package;
  • os/mini/release-check.sh: an on-stick row that every file under /data/npu/kernels is sealed and listed in its
    set's signed manifest;
  • scripts/lemond-onebit.sh: keep ONEBIT_KCRYPT_REQUIRE_SEALED=1 and add whatever the loader names for "manifest
    required" once the private runtime has it — a public flag that nothing reads is worse than none (that is what npu: kernel sets now ship with a signed manifest instead of sealing #548
    shipped).

Sequencing: this needs the private NPU runtime (and possibly the kernel-set release flow) to land first, and the pin bumps
in the same window; the public side cannot verify a signature it has no key or format for. #548's own attempt is worth
reading for the shape of the packaging checks, but it replaced sealing rather than adding to it.

No deadline; this is a hardening item for a later pin, not a release blocker.

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions