Subject: Re: signed binary pkgs [was: Re: BPG call for use cases]
To: Curt Sampson <cjs@cynic.net>
From: Todd Vierling <tv@duh.org>
List: tech-pkg
Date: 07/25/2005 23:05:58
On Tue, 26 Jul 2005, Curt Sampson wrote:
> There are two issues I see with this, though I don't know if they're
> important enough that we want to give up "single-pass" functionality.
Aha, "single-pass" (extract-in-place) is the issue you've been inferring
here. I forgot that there was work done on that -- seems my perception of
pkg_add is still a bit back in the stone age. :)
> 1. If we extract, then nuke when we discover an error, we wipe out
> any files that existed before we started the extraction.
If tempfile-then-rename(2) is used, maybe not. Perhaps the tarball can be
extracted in a special subdirectory of ${PREFIX}, to be moved into place by
rename(2) once the members are all extracted and verified? That would be
similar to a staged install, but skips the extra copy step.
This does have partition-spanning issues, unfortunately, if someone has
${LOCALBASE} (or other ${PREFIX} depending on the package) mounted partially
on one partition, and partially on another. <sigh> It's difficult to
satisfy all parties here....
We could bend over backwards and treat the "extras" as files to move a la
classical staging installs. Or offer the user the option to do
rename-in-place (with caveat that ${PREFIX} must be one partition) or staged
install.
I'm not sure what approach would work best.
> 2. Creating a signed archive can't be done with an append operation
> on an existing archive. Though now that I think about it, since you
> could just write a new signed archive (except, ironically enough,
> not if the input is streamed to you), this is probably no big deal
> at all.
Personally, I get warm fuzzies if the signing process is forced to happen
at package tar-up time, because that reduces the compromise time window.
But that's anecdotal and not a technical argument.
In reality, it's not hard to sign an archive that uses stream-based
compression after the fact without extracting to the filesystem. It just
requires a bit more CPU to do two decompression passes (one to create
signatures/hashes, and one to stream data to be recompressed) and one
compression pass (to rebuild the tarball with the signature up front).
What is good about having the signatures/hashes available up front in the
tarball is the ability to have quick-abort functionality on a failed
signature.
> 1. In a "generic signed archive," the first file in the archive is a
> list of hashes for all of the following files, in order.[...]
> 2. It is an error for files to be in the archive but not in the
> signed list of hashes.
>
> 3. The first file will have a defined name, as well as an easily
> recognisable format.[...]
That sounds exactly like what I was imagining.
> It seems to me that this could work for tar, cpio, pax, ZIP, whatever.
> Is there anything it's missing that pkgsrc would need? (I don't see the
> need for hashes for files created by scripts in the archive, since those
> scripts will be verified with hashes.)
If pkg_add understands the archive format internally (thus eliminating any
"hidden data" attacks caused by invoking an external tar or pax or
what-have-you), then just signing/hashing every physical file in the archive
is directly analogous to signing the tarball externally.
--
-- Todd Vierling <tv@duh.org> <tv@pobox.com> <todd@vierling.name>