Re: [RFD] linux-firmware key arrangement for firmware signing

gregkh
2015-05-21T17:02:40Z

On Thu, May 21, 2015 at 04:03:02PM +0000, Woodhouse, David wrote:
> On Thu, 2015-05-21 at 08:45 -0700, Greg Kroah-Hartman wrote:
> > On Thu, May 21, 2015 at 09:05:21AM -0400, Mimi Zohar wrote:
> > > Signatures don't provide any guarantees as to code quality or
> > > correctness. They do provide file integrity and provenance. In
> > > addition to the license and a Signed-off-by line, having the
> > > firmware provider include a signature of the firmware would be
> > > nice.
> >
> > That would be "nice", but that's not going to be happening here, from
> > what I can tell. The firmware provider should be putting the signature
> > inside the firmware image itself, and verifying it on the device, in
> > order to properly "know" that it should be running that firmware. The
> > kernel shouldn't be involved here at all, as Alan pointed out.
>
> In a lot of cases we have loadable firmware precisely to allow us to
> reduce the cost of the hardware. Adding cryptographic capability in the
> 'load firmware' state of the device isn't really compatible with that
> :)

We do? What devices want this? That's really a bad hardware design to
trust the kernel to get all of this correct.

And I say this as someone who is currently working on a hardware design
that does just this for a very tiny device. It's only a few hundred
bytes of firmware size to be able to do proper key verification that the
firmware image is correct and can be "trusted".

> In the case where kernel and modules are signed, it *is* useful for a
> kernel device driver also to be able to validate that what it's about
> to load into a device is authentic. Where 'authentic' will originally
> just mean that it's come from the linux-firmware.git repository or the
> same entity that built (and signed) the kernel, but actually I *do*
> expect vendors who are actively maintaining the firmware images in
> linux-firmware.git to start providing detached signatures of their own.

Again, why have a detached signature and not just part of the firmware
blob? The device needs to be caring about this, not the kernel.

Do other operating systems have this type of "feature"?

As the kernel doesn't know/care about what the firmware blob really is,
I don't see why it should be caring about firmware signing as that's a
binary running on a separate "computer". Do we want to take this
the next logical step further and start requiring networked devices to
attest their kernels are signed correctly before we can talk to them?

We do that, and we are back at the old ISDN nightmare :)

thanks,

greg k-h