On 4 Apr 2006 at 14:29, Joachim Werner wrote:

[...]
> This file will be signed with a SUSE key on all products coming from SUSE. 
> The 
> public key (GPG public key, ascii armor protected) for this key that can be 
> used to verify the signature is in the file "products.key" for convenience.
> 
> This key will also be imported from the initrd (the initial bootable Linux 
> image that always starts first if you run an installation media), so usually 
> YaST will already know about it. This is not the case yet on the current 

I see no real advantage having the key in initrd (other than security by 
obscurity): Anyone wanting to intoduce his own key can do so either in the root 
filesystem (instsys) or initrd.

> betas. The initial key is the one YaST always trusts without asking. The key 
> is usually also on the installation media as

See above.

> 
> /gpg-pubkey-9c800aca-40d8063e.asc
> 
> (This key may change. The one above is the one we currently use.)
> 
> The signature for "products" is in the file "products.asc".
> 
> When YaST detects an installation source it checks if the file "products" is 
> there, and then checks if it is signed with a known key. If it is not signed 
> at all or with an unkown key, or if the key is on the media, but not trusted 
> (yet), the user will be asked what to do.
> 
> We sign the "products" file to make sure that nobody can add products to an 
> installation source that don't belong there.

But that user could replace the key and possibly re-sign the packages, or could 
modify the signature checkingof yast a bit (or use an older version of gpg) ;-)

> 
> b) The file "content"
> 
> For every product there is a "content" file. If there is no "products" file 
> that tells us where the products are, we look for the file in the 
> installation source's root.
> 
> The "content" file is signed in the same style as the "products" file, so 
> there is a "content.key" (usually, but not necessarily the same as 
> "products.key").
> 
> Compared to "content" files on older releases we have additional data. There 
> are two new keys: META and KEY. Here are two examples:
> 
> META SHA1 08579e4b28287d6aedd954098b64c6bb49d17367  packages
> 
> KEY SHA1 a108c6aab19fe604fa98ef299cdce6e6ba275f09  
> gpg-pubkey-0dfb3188-41ed929b.asc # all in one line
> 
> META keys are added for all files in the directory named in the key DESCRDIR, 
> e.g.
> 
> DESCRDIR suse/setup/descr
> 
> on a typical SUSE Linux.
> 
> Before YaST uses any file from DESCRDIR it will look up the entry in 
> "content". This entry is currently an SHA1 checksum followed by the package 
> name. This may change to an SHA256 checksum.
> 
> The KEY entries list all the keys that YaST should import from the media. 
> Those keys can be used for checking RPM signatures and metadata signatures 
> and will be stored in he RPM database, so they can be used with "rpm 
> --checksig" for package-level verification.
> 
> If I get things right, we will also trust those by default because the list 
> of 
> KEYs is in a file that was signed by the initial key from the initrd that we 
> trust by default.
> 
> The next step in the chain is the file "packages" in DESCRDIR.
> 
> If you are familiar with its syntax you will see that we added a new tag 
> there, too, right after the "Pgk:" tag. Here is an example of the first two 
> lines of the entry for the default kernel:
> 
> =Pkg: kernel-default 2.6.16 13 i586
> =Cks: SHA1 8c8eb2b605e1d626c22bea8dd0c3b05885432b16
> 
> Again we have an SHA1 checksum.
> 
> So there is a consistent chain of trust from the initial key (that you need 
> to 
> verify on your own if you don't trust your installation media) via the 
> "product" and "content" files to the individual packages. The chain makes 
> sure that all those files belong there and haven't been manipulated.
> 
> On the package level we may or may not perform an additional "rpm --checksig".
> 
> 
> 2) The "repomd" or "YUM" format
> 
> Here we use the same basic concept. The initial file is "repomd.xml", which 
> is 
> again signed with a detached GPG signature in "repomd.xml.asc".
> 
> I don't know right now if there is a default place for the public key, but 
> usually repomd repositories will be used for udpates and as an add-on source, 
> so the keys are known to the the system already.
> 
> In repomd.xml and all the files referenced from there, a <checksum> tag again 
> makes sure that the installation/update source is consistent. Here is an 
> example snippet:
> 
> <data type="patches">
>   <location href="repodata/patches.xml"/>
>   <checksum type="sha">90ac427749079973d044a9398d6749f5f008</checksum>
>   <timestamp>1144088097</timestamp>
>   <open-checksum type="sha">90ac4044a9398d6749f5f008</open-checksum>
>   </data>

I think there is a slight difference between "SHA" and "SHA-1" ;-)

> 
> repomd uses those checksums by default. The only thing we added is signing 
> the 
> "repomd.xml" file.
> 
> So much for the conceptual background. Feel free to comment on the concept if 
> you have any questions/concerns.
> 
> Now for the problems with YaST and installation sources you may have faced in 
> the last couple of days:
> 
> The problem is that the signature checks are already in place, but the GUI 
> and 
> command line options that let you import non-SUSE keys, override key checking 
> and integrity checking are not in place yet.
> 
> With the final product you will be able to switch all the checks off, so you 
> can still use sources that do not use any signing or checksums. But currently 
> there are a few bugs with YaST expecting a signature to be there etc.

Should be an option for software installer / YOU ("only accept digitally signed 
software/updates" where the user should be able to review his trusted keys)

> 
> We will also provide tools for setting up your own signed and 
> checksum-enabled 
> installation sources ASAP.
> 
> I'll keep you posted and will try to answer your questions. If you want to 
> put 
> this information onto opensuse.org, I wouldn't object. ;-)
> 
> I'll try to update opensuse.org on my own as soon as possible, too.
> 
> Cheers
> 
> Joachim

Thanks.

Regards,
Ulrich


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to