Channel Lock: Assured Communications Platform

Signed packets. Known senders.

Channel Lock protects policy-selected traffic at the sender's egress, before packets cross the network. At configured ingress points, Channel Lock validates matching packets. Failed validation is dropped and recorded as a threat for management visibility. Signing keys never cross the packet path.

In 30 seconds

Identity on every protected packet, and a valid-or-invalid verdict wherever you check it.

What it is

Channel Lock adds a verifiable signature to the IPv4 traffic you choose to protect. At configured checkpoints, it verifies that each packet belongs to the expected sender and session. Trusted traffic keeps moving; packets that fail validation are blocked and surfaced as threats.

Why it matters

Networks trust traffic by where it comes from. Channel Lock trusts it by who signed it. A compromised host, rogue agent or scanner can't borrow another sender's access, even with a stolen token.

How to use it

Software on standard Linux or Windows. Put it on the server you're protecting, or on a gateway your traffic already passes through. No tunnels, no application changes.

01 / The problem

The network moves packets. It never checks who sent them.

The Open Systems Interconnection (OSI) stack was designed to deliver traffic from physical connections (Layer 1) to the application layer (Layer 7). The OSI stack was not built to prove where traffic came from. Identity was added at the application layer: API tokens, RPC frameworks, etc. Everything below layer 7 is trusted by position. A stolen API token works from wherever it's sent. Once inside the gateway, packets will look the same and pass as legitimate traffic.

Gaps security teams live with

  1. Visibility isn't validationYour tools see every connection. They can't tell you whether it should have been allowed.
  2. Authentication isn't verificationA login proves someone had the credential, not who is using it now. Stolen credentials, malware on a signed-in device and hijacked sessions all look legitimate.
  3. Automation trusts its inputsAttackers can shape what automation sees: enough to slip past detection, or to disrupt your services through alert fatigue.
The question

"Was this packet sent by the authorized signer, for this exact session?"

Channel Lock answers it for every protected packet.

Conventional assumption

Trust the path

Connection state or network position becomes a proxy for packet authenticity.

Channel Lock

Verify the packet

Selected packet fields are recomputed and checked against session-bound material.

02 / Where it fits

AI agents you can identify and follow

Agents call APIs, fetch data and talk to each other faster than anyone can review. Run each agent under its own account with its own Channel Lock identity, and its traffic carries proof of who sent it at the packet level. Allow an agent one protocol to one resource and nothing more. When something goes wrong, you know which agent did what.

  • Rules by identity, protocol and port
  • Every signed packet traces to one identity
  • Invalid traffic blocked and flagged
  • A stolen token won't work from another account

Traffic you can screen

A model you didn't build can send data you never meant to share. Put it in a VPC where the only route out is a NAT gateway running Channel Lock. Approved services sign their traffic. The gateway's validator blocks everything else, including a model trying to upload somewhere it shouldn't.

Data that stays in your jurisdiction

Put a validator at the border, and data leaves only if a channel you approved signed it. The keys sit in your own CSKA, in your jurisdiction, under your control.

Your services stay hidden from unauthorized scans

Unsigned packets are blocked before they reach a service, so a SYN scan from a compromised machine gets no replies, which leaves nothing to map and nowhere to pivot.

What changes for your security team

Adds to the zero trust you already run

03 / See it working

Watch a server say no.

A GitLab server, and two accounts on the same machine: a user and a coding agent. Both have the user's GitLab access token, and without Channel Lock both can list projects with it, because GitLab can't tell them apart. Turn Channel Lock on and enroll the user's identity, and the user's request still works. The agent's, with the same token, gets no answer, and the attempt shows up as a threat in the Channel Lock dashboard.

API key theft, in practiceSame machine, same token

Before Channel Lock · the user's token

Coding agent

$ curl -s \
  -H "PRIVATE-TOKEN: $GITLAB_TOKEN" \
  https://gitlab.example/api/v4/projects \
  | jq -r '.[].name'
agentic

No check Allowed: the token is enough

With Channel Lock · own token

User

$ curl -s \
  -H "PRIVATE-TOKEN: $GITLAB_TOKEN" \
  https://gitlab.example/api/v4/projects \
  | jq -r '.[].name'
agentic

Valid Allowed

With Channel Lock · the same token

Coding agent

$ curl -s \
  -H "PRIVATE-TOKEN: $GITLAB_TOKEN" \
  https://gitlab.example/api/v4/projects \
  | jq -r '.[].name'
^C  # no answer

Invalid Blocked, logged as a threat

  1. Without Channel Lock, the token is enoughGitLab can't tell the user and the agent apart. Anyone holding the token gets in.
  2. With Channel Lock, the token works for its ownerThe user's packets are signed with the user's enrolled identity, so they come back valid.
  3. The same token fails for the agentThe agent has no signing identity. Its packets come back invalid, are blocked before GitLab sees the request, and are logged as a threat.
The demo's rule on GitLabPlain English, then as configured
  1. ValidTCP to port 443, signed by a seraphsec.com identity: allow
  2. InvalidTCP to port 443: block, and log it as a threat

As configuredvalidate_stripL567sha512All CSKADomain: seraphsec.comtcp and dst port 443

validate_strip
Validate, then remove the trailer before the packet goes on.
L567
Hash the payload only, because the demo's signer sits behind a NAT.
sha512
The digest.
All CSKA
The trust group the signer's CSKA must belong to; here, any.
Domain: seraphsec.com
Any identity in that domain. A rule can also name a single identity.
tcp and dst port 443
Which packets the rule applies to, in BPF filter syntax.

The same GitLab server, reached over SSH. To start, the user and the coding agent each hold an SSH key the server has authorized, and both log in without a password. Then the server's authorized keys file is moved aside and Channel Lock is started on both machines. The user still gets in: a PAM module on the server checks the verified identity on the connection instead of a key. The agent, trying the same account, is refused.

Passwordless SSH, in practiceSame account, no key

Before Channel Lock · the authorized key

Coding agent

$ ssh jdemo@gitlab.example
jdemo@gitlab:~$

No check Allowed: the key is enough

With Channel Lock · no key on the server

User

$ ssh jdemo@gitlab.example
jdemo@gitlab:~$

Valid Allowed

With Channel Lock · the same account

Coding agent

$ ssh jdemo@gitlab.example
Permission denied
(publickey,keyboard-interactive).

Denied No verified identity

  1. Without Channel Lock, the key is enoughBoth terminals hold an SSH key the server has authorized for the account, so the user and the coding agent both log in without a password.
  2. With Channel Lock, the user logs in with no key at allThe server's authorized keys file is moved aside. The signer ties the user's SSH traffic to the enrolled identity, the validator on the server verifies it, and a PAM module lets the login through on that identity.
  3. The agent is refusedIts connection carries no authorized identity, so the PAM check fails and the server answers "Permission denied".

04 / How it works

Three roles. Keys never touch the packet path.

The Channel Signing Key Authority (CSKA) holds the key relationships and hands out session material. The Signer and Validator do the packet work. Keys move on a separate control plane. The packet path carries only signed data.

How the roles connectKeys out of band
Channel Lock control plane and packet pathOn the control plane, the signer registers its signing key with the CSKA, and the CSKA releases each session key once to the validator. On the packet path, signed IPv4 packets travel from the signer to the validator, with no key among them.CONTROL PLANE · OUT OF BANDCSKAControl planeHolds the key relationshipsSignerEgress32-byte signing keyValidatorIngress or gateway16-byte session keySigning key registered at enrollmentSession key, released oncePACKET PATH · SIGNER TO VALIDATORIPv4 packet + signature trailer, up to 34 bytesNo signing key crosses the packet path.

Egress

Signer

Holds a 32-byte signing key. Derives a session key and tags each packet with it.

Control plane

CSKA

Knows which signers and validators belong to which channels. Derives session keys for authorized validators, and returns the signer's identity with each one.

Ingress or gateway

Validator

Fetches the matching 16-byte session key once, then recomputes each packet's digest and blocks the packets that fail.

  1. EnrollA user proves who they are to the identity provider, with an email PIN and a passkey, and downloads a one-time enrollment file. Imported on the device within 15 minutes, it becomes a device credential only that user's account can read.
  2. SignFor each session, the signer combines its signing key with the session ID and channel ID to derive a session key. It hashes the configured packet fields with that key and appends the result as a trailer.
  3. FetchThe validator asks the CSKA for that session's key, naming the signer and the user. The CSKA checks the request, releases the key once, and returns the user's identity, signed by the identity provider, so the validator knows who is sending.
  4. CheckThe validator recomputes and verifies each protected packet. Valid traffic continues. Failed validation is blocked and recorded as a threat.

05 / The packet

Up to 34 bytes, at the end of the packet.

Channel Lock appends a signature trailer to the tail of the IPv4 packet, then fixes up length and checksums so the packet stays valid on the wire. Fields that legitimately change in transit, such as TTL and checksums, are normalized before hashing, so routers don't break the signature.

Packet layoutBefore and after signing
Channel Lock signature trailer in an IPv4 packetBefore signing: L2 frame, IPv4 header, TCP or UDP header, payload, frame check. After signing, a Channel Lock trailer of up to 34 bytes sits between the payload and the frame check, and the IPv4 length and checksum are updated.BEFORE SIGNINGL2frameIPv4headerL4TCP / UDPPayloadapplication dataFCSAFTER SIGNINGL2frameIPv4length + checksumL4TCP / UDPPayloadapplication dataCL trailerup to 34 bytesFCS
L2 framePer-hop framing, left to the network
IPv4 headerVolatile fields normalized for hashing
TCP/UDP and payloadHashed to the configured L3, L4 and payload scope
CL trailerUp to 34 bytes

Normal networking still applies: MTU, fragmentation, routing and middleboxes behave as they always do.

06 / The verdict

Valid packets pass. Invalid packets stop.

The validator answers one question per packet, and blocks every packet that fails.

For each protected packet, the validator checks one thing: did the authorized signer send it, for this session, with the protected fields unchanged? Valid packets carry on as normal. Invalid packets are blocked before they reach the service.

ValidatorOne answer per packet
ValidInvalid
  • Carries on to where it was going
  • Blocked, and recorded

What can make a packet invalid

An invalid verdict means the packet can't be trusted, whatever the cause. It's blocked, and the dashboard records it.

What happenedVerdict
The authorized signer sent it for this session, and the protected fields are unchangedValid
Fields changed in transit, or a different key signed itInvalid
Packets injected into a session already under way, as in a hijackInvalid
No trailer: a scanner, a rogue process, an unapproved agentInvalid
Signed, but the identity is missing, expired or not allowed by the ruleInvalid
The signer belongs to a CSKA outside the rule's trust groupInvalid
A malformed trailer, or one from an unsupported versionInvalid
The CSKA refused the session key, because someone else already took itInvalid
The CSKA can't be reached, so validation fails closedInvalid

No quiet way to take a key. The CSKA releases each session key only once. If an attacker retrieves it first, the legitimate validator's request is denied. Every packet in that session then fails validation, flagging the affected session for investigation. Once the legitimate validator has retrieved the key, an attacker cannot obtain it through another request: the CSKA refuses any repeat release.

07 / Security model

One key per session, released once.

Session keys move on the control plane, never with the packets. Each key is scoped to one session, and the CSKA releases it one time. That keeps any exposure small, and it means nobody can get a key from the CSKA quietly: if the wrong party asks first, the real validator finds out.

  1. A key per sessionThe signer derives a fresh key for every session. A session key is good for that session and nothing else.
  2. Released onceThe CSKA hands each session key out once and records who took it. A second request for the same key is refused.
  3. No quiet way to take oneIf the wrong party gets a session key from the CSKA first, the real validator can't. Every packet in that session fails, and the session shows up as a threat.
  4. One secret, three places to guard itA forged packet needs the session key. The signer's key can derive it, the validator holds it while it checks, and the CSKA releases it once. Protect all three; this isn't a design where an attacker needs two of them.

Channel Lock is a packet-integrity and validation layer. It works alongside endpoint, key and access controls, not instead of them.

08 / Deployment

Goes in where your traffic already flows.

09 / FAQ

Frequently asked questions.

Does the validator block traffic?
Yes. Packets that fail validation are blocked, and the dashboard records them. Valid packets carry on as normal.
Do unsigned packets show up as threats?
Not by default. A packet with no trailer at all is dropped and counted, but not listed as a threat, so a host that isn't configured yet doesn't flood the dashboard. Signed packets that fail are listed, with the reason and the rule that caught them.
What if someone steals an API token?
It only works from the account it belongs to. The application checks the token; Channel Lock checks who sent the packets. Use a user's token from another account on the same machine, such as a coding agent's, and that account's packets come back invalid.
How does a user get an identity?
They sign in to the identity provider with a passkey and download a one-time enrollment file. Imported on their device within 15 minutes, it becomes a device credential that only their account can read.
Is this IPsec or a VPN?
No. Nothing is encrypted or tunneled. Channel Lock proves which sender signed each packet and that the protected fields didn't change. Pair it with encryption if you need confidentiality.
Does it add latency?
Per packet: one keyed hash and a trailer of up to 34 bytes. The CSKA is consulted when a session starts and when the signer rotates its key.
What stops someone forging a trailer?
Without the session key, a forged digest is a one-in-four-billion guess per hashed layer, and every miss is dropped and logged. A lucky guess reveals nothing about the key. Hash more layers and the odds multiply: L3, L4 and payload together are 96 bits to match.
What happens at a NAT?
NAT rewrites addresses and ports, which would break a digest over L3 or L4. Behind a NAT, set the rule to hash the payload only (L5 to L7), as the demo does.
What about MTU?
Nothing to change. The trailer adds up to 34 bytes, and normal fragmentation handling applies.
IPv6?
Not yet. Channel Lock covers IPv4 today; IPv6 is on the roadmap.
Do my applications change?
No. Channel Lock works at the packet level, below your applications.
What if the CSKA goes down?
Validation fails closed: a session the validator has no key for is blocked. Sessions already keyed keep validating until their signer next rotates its key.
Who is it for?
Teams that run services other machines call, and need to know which user, device or agent is behind each call. Developer and platform teams give each service and agent its own identity. Enterprise security teams screen traffic at gateways and borders. SOC teams get threats that are failed checks, not guesses.
Can threats go to our ticketing or monitoring tools?
Not yet. Today threats are in the Channel Lock dashboard: the Threats view lists each one with its reason and the rule that caught it, and the Metrics view counts what was signed, dropped and flagged.

Channel Lock by Seraph Security

Put identity back in the packet.

Tell us where your traffic leaves your network, and we'll show you what Channel Lock would check there.

Book a demo