docs: OQ-SK-02 direction settled — "both" auth, split by the door

- endgame story makes both mechanisms real: consumer binds the produced
  SOCKS5 resource locally (optional front door, ssh -D shape without
  the forced bind) and points tun2proxy at it
- producer side: identity seam only (CF-005/CF-006); a password there
  is moot against the ACL system — in-band conversation runs NoAuth
- consumer front door: owns RFC 1929 where vanilla clients need it
  (tun2proxy/curl user:pass), maps accepted credentials to the channel
  identity it opens the producer with; the SOCKS password never crosses
  the channel as a SOCKS password
- replace-or-second-gate sub-question dissolves: the mechanisms occupy
  different planes (door-local creds vs channel-level identity)
- remaining for Phase 1: credential->identity mapping shape; producer-
  side local backend door surface; AuthMethod trait vs door-owned check
This commit is contained in:
glm-5.3-flash committed 2026-09-13 16:15:57 +00:00
1 parent c3ccba4d59
commit 4730672f10
1 file changed
+52 -5
+52 -5
View File
@@ -388,10 +388,52 @@ own optional username/password auth (RFC 1929). Questions:
consults the alkcall `AuthContext`/`Identity` (filed upstream if the
hook shape doesn't fit — AGENTS.md convention 17)?
Hunch: identity-at-the-open-op is the primary gate for
channels-native consumers; in-band username/password exists for the
local-backend path only. Needs a decision (and possibly an upstream
ask) in Phase 1.
(Answered in direction by the 2026-09-13 posture statement below:
yes / planes-don't-compare / probably-not — Phase 1 formalizes.)
**Posture — settled direction (2026-09-13 discussion): "both," split
by the door.** The planned end-to-end story is the vpn-like
composition: a consumer connects to an endpoint producing the SOCKS5
resource, *optionally* binds it locally (component 2's front door —
ssh `-D`'s shape, with the defining difference that no port is bound by
default), and points tun2proxy (`--proxy socks5://user:pass@host:port`
natively, per §Vision principle 6) at the local port. That makes "both"
auth mechanisms real, each on its own side of the door:
- **Producer side: identity only.** The channels-native open is
authorized by the alkcall ACL/identity seam (CF-005/CF-006); a
producer-side password is moot — the ACL system is strictly better
than a shared secret, and the producer's in-band conversation runs
NoAuth/no-op. A password there would add nothing the identity seam
doesn't already do.
- **Consumer side (the front door): RFC 1929 where vanilla clients
need it.** The door is where the vanilla world meets the ACL world,
so it owns credential presentation: a vanilla client carrying
`user:pass` (tun2proxy, curl) gets a real RFC 1929 conversation at
the door. The door then maps the accepted credential to *local*
configuration — which channel identity/endpoint to open the producer
channel with — and that identity reaches the producer via the
CF-005/CF-006 seam. The SOCKS password never crosses the channel as
a SOCKS password; the channel identity never reaches the vanilla
client.
The "replace or second-gate" sub-question dissolves: the mechanisms
occupy different planes (in-band creds are door-local; identity is
channel-level). The NoAuth door (POC #1's raw-pipe shape, zero
protocol translation) remains valid for loopback-only or wrapper-aware
use; the cred-bearing door is the same bridge plus the greeting half
(fast-socks5's server typestate for auth + `read_command`, then the
consumer session in-band) — an assembly-layer choice, not a protocol
one.
Remaining for Phase 1: the door's credential→identity mapping shape
(static config vs pluggable lookup); whether the producer-side
optional local backend offers the same door surface (same code shape —
door = vanilla↔ACL boundary — so presumably yes); and whether the door
needs a fast-socks5 `AuthMethod` impl or simply checks credentials
itself before handing the stream to the typestate (likely the latter —
the door is this crate's code, the trait was designed for embedders
who don't own the accept loop).
### OQ-SK-03: UDP ASSOCIATE without binding — the hard case
@@ -824,7 +866,12 @@ Candidate reading for the research specialist (to be expanded):
primary, in-band auth for the local backend); **POC #1 validated
the seam end to end** (per-call opener identity at the
establisher; channel-0 identity propagation is a producer
harness wiring requirement); decide in Phase 1
harness wiring requirement); **direction settled 2026-09-13**
("both," split by the door: producer-side identity only — a
password there is moot against the ACL; consumer-side front door
owns RFC 1929 for vanilla clients and maps credentials to the
channel identity); Phase 1 formalizes the door's
credential→identity mapping
- [ ] OQ-SK-03 (UDP ASSOCIATE) — the shape space written (including
the phase-model-vs-alktty-demux analysis); resolve via research
+ POC #2, ADR before the first consumer