!VRULIdgoKmKPzJZzjj:nixos.org

Nix Hackers

902 Members
For people hacking on the Nix package manager itself191 Servers

Load older messages


SenderMessageTime
5 Mar 2025
@roberthensing:matrix.orgRobert Hensing (roberth)yes. They're also the current most frequent example where "first" is a thing, because many FODs can produce the same output path09:05:10
@picnoir:alternativebit.frPicnoirShouldn't there be a third category for FODs? They're resulting from the builder but are output-addressed.09:05:21
@picnoir:alternativebit.frPicnoirYeah09:05:23
@picnoir:alternativebit.frPicnoirAnd most importantly: can be poisoned.09:05:29
@roberthensing:matrix.orgRobert Hensing (roberth)It applies to all CA outputs, where FOD is a special case of CA as it can be implemented without rewriting any hashes09:06:14
@roberthensing:matrix.orgRobert Hensing (roberth)(the deriver firstness thing I mean)09:06:59
@roberthensing:matrix.orgRobert Hensing (roberth)not sure what you mean with poisoning?09:07:07
@roberthensing:matrix.orgRobert Hensing (roberth)btw input addressing might not have the uniqueness property that it currently sort of has, with https://github.com/NixOS/nix/issues/1078009:11:24
@picnoir:alternativebit.frPicnoir
  1. You upload some sort of payload in a store (be it local or remote) to a certain output hash.
  2. You push a fetcher derivation trying to fetch from a certain URL having the CA of step 1 (wrong ca).
  3. The builder uses the cached FOD in the local/remote store instead of trying to verify the FOD.

Agreed, this is more of an UX-like posoning. Also agreed, it's CA-specific, not FOD specific.

What I'm trying to say, is that CA and non CA derivations are behaving quite differently on the build graph. I'd be nice to have a way to distinguish those from the validpath boundary.

09:13:21
@picnoir:alternativebit.frPicnoirI'm not super familiar with nix CA, that's why I was focussing on FODs :)09:13:45
@picnoir:alternativebit.frPicnoir *
  1. You upload some sort of payload in a store (be it local or remote) to a certain output hash.
  2. You push a fetcher derivation trying to fetch from a certain URL having the CA of step 1 (that does not necessarily reflect the ca you'd get fetching the url).
  3. The builder uses the cached FOD in the local/remote store instead of trying to verify the FOD.

Agreed, this is more of an UX-like posoning. Also agreed, it's CA-specific, not FOD specific.

What I'm trying to say, is that CA and non CA derivations are behaving quite differently on the build graph. I'd be nice to have a way to distinguish those from the validpath boundary.

09:14:59
@roberthensing:matrix.orgRobert Hensing (roberth) John Ericson: I've suggested to treat the Nixpkgs "fix" for the CA placeholder issue (no storedir prefix) as a workaround as ca-derivations is experimental https://github.com/NixOS/nixpkgs/pull/386774#pullrequestreview-2660479310 09:27:53
@roberthensing:matrix.orgRobert Hensing (roberth)See https://github.com/NixOS/nix/issues/12577 for avoidable confusion09:31:20
@emilazy:matrix.orgemily isn't /. + "/1121rp0gvr1qya7hvy925g5kjwg66acz6sn1ra1hca09f1z5dsab" problematic in the same way as being able to construct arbitrary store path values? 14:26:10
@Ericson2314:matrix.orgJohn Ericson @roberthensing:matrix.org: haven't read it yet (cause packing) but I realized that output names for dyn drv are in fact statically known! 16:06:02
@Ericson2314:matrix.orgJohn Ericson The drv name & output spec name -> output store path name function 16:06:22
@Ericson2314:matrix.orgJohn EricsonYou can just do it recursively down the deriving path16:06:35
@Ericson2314:matrix.orgJohn EricsonIt's funny I didn't realize this before, because in a way I did: I was always frustrated making dyn drv examples that the "name felt so predetermined'16:07:14
@Ericson2314:matrix.orgJohn EricsonWell, lol, it was exactly pre-determined!16:07:33
@roberthensing:matrix.orgRobert Hensing (roberth)Nice. Don't be late because I nerd sniped you!16:08:00
@Ericson2314:matrix.orgJohn Ericson Based on this, I feel like both types of placeholders could look exactly like store paths, except for using a different hash character set to very subtly distinguish them 16:08:25
@Ericson2314:matrix.orgJohn Ericson I might be a little worried about that confusing humans, hah, who just glance at it 16:08:55
@Ericson2314:matrix.orgJohn EricsonBut it would be great for code in Nixpkgs that wants to look for name parts and and the store dir16:09:29
@roberthensing:matrix.orgRobert Hensing (roberth) Canonical JSON looks kinda good. Canonical, sorted, no floats. Strings are bytes, so not technically JSON. RFC 8785 is complicated and does not allow non-Unicode bytes 16:31:41
@emilazy:matrix.orgemily please don't use canonicalized JSON formats 16:42:10
@emilazy:matrix.orgemilypeople WILL use something less rigid and only find out years down the line when it's a huge headache16:42:25
@emilazy:matrix.orgemilypick a format that's rigid by design or at least has a canonical format rigidly specified in the same spec rather than being something people have made 100 canonical versions of16:42:54
@emilazy:matrix.orgemilyit's a huge footgun, everyone who uses JSON in a cryptographic context gets bitten by this eventually. Matrix included iirc :)16:43:17
@roberthensing:matrix.orgRobert Hensing (roberth)hmm ok. Something human readable would be great (and something not ATerm)16:45:17
@emilazy:matrix.orgemily

human-readable can actually be a drawback for formats specifically designed to be non-malleable, precisely because they invite opening in a text editor and appending some keys in whatever order.

fwiw, https://preserves.dev/ is well-designed, has a superset of JSON types, and has both a textual format and a binary format with a rigidly-defined canonical representation for the latter. however it's also a bit obscure and won't have as wide library support as alternatives so I can understand not going with it. the Spritely/Agoric/Cap'n Proto standardization effort OCapN uses it as Syrup, which is a separate canonical-but-made-up-of-printable-characters serialization of it https://github.com/ocapn/syrup#pseudo-specification.

more well-known alternatives:

  • deterministic CBOR serialization, buuuut there are like three versions of it so caveat emptor https://www.imperialviolet.org/2022/04/17/canonsofcbor.html
  • canonical s-expressions
  • bencode
  • …ASN.1 BER? 🙃

also, if you don't actually need a flexible/extensible format, defining your own very simple rigid serialization isn't a sin when you want cryptographic canonicity. (just make sure it's actually non-ambiguous and preferably can't be corrupted into another valid message by truncation, especially if you might be concatenating multiple messages.)

17:00:57

Show newer messages


Back to Room ListRoom Version: 6