.. SPDX-License-Identifier: GPL-2.0+

Verified Boot on the Beaglebone Black
=====================================

Introduction
------------

Before reading this, please read :doc:`verified-boot` and :doc:`signature`.
These instructions are for mainline U-Boot from v2014.07 onwards.

There is quite a bit of documentation in this directory describing how
verified boot works in U-Boot. There is also a test which runs through the
entire process of signing an image and running U-Boot (sandbox) to check it.
However, it might be useful to also have an example on a real board.

Beaglebone Black is a fairly common board so seems to be a reasonable choice
for an example of how to enable verified boot using U-Boot.

First a note that may to help avoid confusion. U-Boot and Linux both use
device tree. They may use the same device tree source, but it is seldom useful
for them to use the exact same binary from the same place. More typically,
U-Boot has its device tree packaged with it, and the kernel's device tree is
packaged with the kernel. In particular this is important with verified boot,
since U-Boot's device tree must be immutable. If it can be changed then the
public keys can be changed and verified boot is useless. An attacker can
simply generate a new key and put his public key into U-Boot so that
everything verifies. On the other hand the kernel's device tree typically
changes when the kernel changes, so it is useful to package an updated device
tree with the kernel binary. U-Boot supports the latter with its flexible FIT
format (Flat Image Tree).


Overview
--------

The steps are roughly as follows:

#. Build U-Boot for the board, with the verified boot options enabled.

#. Obtain a suitable Linux kernel

#. Create a Image Tree Source file (ITS) file describing how you want the
   kernel to be packaged, compressed and signed.

#. Create a key pair

#. Sign the kernel

#. Put the public key into U-Boot's image

#. Put U-Boot and the kernel onto the board

#. Try it


Step 1: Build U-Boot
--------------------

a. Set up the environment variable to point to your toolchain. You will need
   this for U-Boot and also for the kernel if you build it. For example if you
   installed a Linaro version manually it might be something like::

       export CROSS_COMPILE=/opt/linaro/gcc-linaro-arm-linux-gnueabihf-4.8-2013.08_linux/bin/arm-linux-gnueabihf-

   or if you just installed gcc-arm-linux-gnueabi then it might be::

       export CROSS_COMPILE=arm-linux-gnueabi-

b. Configure and build U-Boot with verified boot enabled::

    export UBOOT=/path/to/u-boot
    cd $UBOOT
    # You can add -j10 if you have 10 CPUs to make it faster
    make O=b/am335x_boneblack_vboot am335x_boneblack_vboot_config all
    export UOUT=$UBOOT/b/am335x_boneblack_vboot

c. You will now have a U-Boot image::

    file b/am335x_boneblack_vboot/u-boot-dtb.img
    b/am335x_boneblack_vboot/u-boot-dtb.img: u-boot legacy uImage,
      U-Boot 2014.07-rc2-00065-g2f69f8, Firmware/ARM, Firmware Image
      (Not compressed), 395375 bytes, Sat May 31 16:19:04 2014,
      Load Address: 0x80800000, Entry Point: 0x00000000,
      Header CRC: 0x0ABD6ACA, Data CRC: 0x36DEF7E4


Step 2: Build Linux
-------------------

a. Find the kernel image ('Image') and device tree (.dtb) file you plan to
   use. In our case it is am335x-boneblack.dtb and it is built with the kernel.
   At the time of writing an SD Boot image can be obtained from here::

       http://www.elinux.org/Beagleboard:Updating_The_Software#Image_For_Booting_From_microSD

   You can write this to an SD card and then mount it to extract the kernel and
   device tree files.

   You can also build a kernel. Instructions for this are are here::

       http://elinux.org/Building_BBB_Kernel

   or you can use your favourite search engine. Following these instructions
   produces a kernel Image and device tree files. For the record the steps
   were::

        export KERNEL=/path/to/kernel
        cd $KERNEL
        git clone git://github.com/beagleboard/kernel.git .
        git checkout v3.14
        ./patch.sh
        cp configs/beaglebone kernel/arch/arm/configs/beaglebone_defconfig
        cd kernel
        make beaglebone_defconfig
        make uImage dtbs   # -j10 if you have 10 CPUs
        export OKERNEL=$KERNEL/kernel/arch/arm/boot

b. You now have the 'Image' and 'am335x-boneblack.dtb' files needed to boot.


Step 3: Create the ITS
----------------------

Set up a directory for your work::

   export WORK=/path/to/dir
   cd $WORK

Put this into a file in that directory called sign.its::

    /dts-v1/;

    / {
        description = "Beaglebone black";
        #address-cells = <1>;

        images {
            kernel {
                data = /incbin/("Image.lzo");
                type = "kernel";
                arch = "arm";
                os = "linux";
                compression = "lzo";
                load = <0x80008000>;
                entry = <0x80008000>;
                hash-1 {
                    algo = "sha1";
                };
            };
            fdt-1 {
                description = "beaglebone-black";
                data = /incbin/("am335x-boneblack.dtb");
                type = "flat_dt";
                arch = "arm";
                compression = "none";
                hash-1 {
                    algo = "sha1";
                };
            };
        };
        configurations {
            default = "conf-1";
            conf-1 {
                kernel = "kernel";
                fdt = "fdt-1";
                signature-1 {
                    algo = "sha1,rsa2048";
                    key-name-hint = "dev";
                    sign-images = "fdt", "kernel";
                };
            };
        };
    };


The explanation for this is all in the documentation you have already read.
But briefly it packages a kernel and device tree, and provides a single
configuration to be signed with a key named 'dev'. The kernel is compressed
with LZO to make it smaller.


Step 4: Create a key pair
-------------------------

See :doc:`signature` for details on this step::

   cd $WORK
   mkdir keys
   openssl genrsa -F4 -out keys/dev.key 2048
   openssl req -batch -new -x509 -key keys/dev.key -out keys/dev.crt

Note: keys/dev.key contains your private key and is very secret. If anyone
gets access to that file they can sign kernels with it. Keep it secure.


Step 5: Sign the kernel
-----------------------

We need to use mkimage (which was built when you built U-Boot) to package the
Linux kernel into a FIT (Flat Image Tree, a flexible file format that U-Boot
can load) using the ITS file you just created.

At the same time we must put the public key into U-Boot device tree, with the
'required' property, which tells U-Boot that this key must be verified for the
image to be valid. You will make this key available to U-Boot for booting in
step 6::

   ln -s $OKERNEL/dts/am335x-boneblack.dtb
   ln -s $OKERNEL/Image
   ln -s $UOUT/u-boot-dtb.img
   cp $UOUT/arch/arm/dts/am335x-boneblack.dtb am335x-boneblack-pubkey.dtb
   lzop Image
   $UOUT/tools/mkimage -f sign.its -K am335x-boneblack-pubkey.dtb -k keys -r image.fit

You should see something like this::

    FIT description: Beaglebone black
    Created:         Sun Jun  1 12:50:30 2014
     Image 0 (kernel)
      Description:  unavailable
      Created:      Sun Jun  1 12:50:30 2014
      Type:         Kernel Image
      Compression:  lzo compressed
      Data Size:    7790938 Bytes = 7608.34 kB = 7.43 MB
      Architecture: ARM
      OS:           Linux
      Load Address: 0x80008000
      Entry Point:  0x80008000
      Hash algo:    sha1
      Hash value:   c94364646427e10f423837e559898ef02c97b988
     Image 1 (fdt-1)
      Description:  beaglebone-black
      Created:      Sun Jun  1 12:50:30 2014
      Type:         Flat Device Tree
      Compression:  uncompressed
      Data Size:    31547 Bytes = 30.81 kB = 0.03 MB
      Architecture: ARM
      Hash algo:    sha1
      Hash value:   cb09202f889d824f23b8e4404b781be5ad38a68d
     Default Configuration: 'conf-1'
     Configuration 0 (conf-1)
      Description:  unavailable
      Kernel:       kernel
      FDT:          fdt-1


Now am335x-boneblack-pubkey.dtb contains the public key and image.fit contains
the signed kernel. Jump to step 6 if you like, or continue reading to increase
your understanding.

You can also run fit_check_sign to check it::

   $UOUT/tools/fit_check_sign -f image.fit -k am335x-boneblack-pubkey.dtb

which results in::

    Verifying Hash Integrity ... sha1,rsa2048:dev+
    ## Loading kernel from FIT Image at 7fc6ee469000 ...
       Using 'conf-1' configuration
       Verifying Hash Integrity ...
    sha1,rsa2048:dev+
    OK

       Trying 'kernel' kernel subimage
         Description:  unavailable
         Created:      Sun Jun  1 12:50:30 2014
         Type:         Kernel Image
         Compression:  lzo compressed
         Data Size:    7790938 Bytes = 7608.34 kB = 7.43 MB
         Architecture: ARM
         OS:           Linux
         Load Address: 0x80008000
         Entry Point:  0x80008000
         Hash algo:    sha1
         Hash value:   c94364646427e10f423837e559898ef02c97b988
       Verifying Hash Integrity ...
    sha1+
    OK

    Unimplemented compression type 4
    ## Loading fdt from FIT Image at 7fc6ee469000 ...
       Using 'conf-1' configuration
       Trying 'fdt-1' fdt subimage
         Description:  beaglebone-black
         Created:      Sun Jun  1 12:50:30 2014
         Type:         Flat Device Tree
         Compression:  uncompressed
         Data Size:    31547 Bytes = 30.81 kB = 0.03 MB
         Architecture: ARM
         Hash algo:    sha1
         Hash value:   cb09202f889d824f23b8e4404b781be5ad38a68d
       Verifying Hash Integrity ...
    sha1+
    OK

       Loading Flat Device Tree ... OK

    ## Loading ramdisk from FIT Image at 7fc6ee469000 ...
       Using 'conf-1' configuration
    Could not find subimage node

    Signature check OK


At the top, you see "sha1,rsa2048:dev+". This means that it checked an RSA key
of size 2048 bits using SHA1 as the hash algorithm. The key name checked was
'dev' and the '+' means that it verified. If it showed '-' that would be bad.

Once the configuration is verified it is then possible to rely on the hashes
in each image referenced by that configuration. So fit_check_sign goes on to
load each of the images. We have a kernel and an FDT but no ramkdisk. In each
case fit_check_sign checks the hash and prints sha1+ meaning that the SHA1
hash verified. This means that none of the images has been tampered with.

There is a test in test/vboot which uses U-Boot's sandbox build to verify that
the above flow works.

But it is fun to do this by hand, so you can load image.fit into a hex editor
like ghex, and change a byte in the kernel::

    $UOUT/tools/fit_info -f image.fit -n /images/kernel -p data
    NAME: kernel
    LEN: 7790938
    OFF: 168

This tells us that the kernel starts at byte offset 168 (decimal) in image.fit
and extends for about 7MB. Try changing a byte at 0x2000 (say) and run
fit_check_sign again. You should see something like::

    Verifying Hash Integrity ... sha1,rsa2048:dev+
    ## Loading kernel from FIT Image at 7f5a39571000 ...
       Using 'conf-1' configuration
       Verifying Hash Integrity ...
    sha1,rsa2048:dev+
    OK

       Trying 'kernel' kernel subimage
         Description:  unavailable
         Created:      Sun Jun  1 13:09:21 2014
         Type:         Kernel Image
         Compression:  lzo compressed
         Data Size:    7790938 Bytes = 7608.34 kB = 7.43 MB
         Architecture: ARM
         OS:           Linux
         Load Address: 0x80008000
         Entry Point:  0x80008000
         Hash algo:    sha1
         Hash value:   c94364646427e10f423837e559898ef02c97b988
       Verifying Hash Integrity ...
    sha1 error
    Bad hash value for 'hash-1' hash node in 'kernel' image node
    Bad Data Hash

    ## Loading fdt from FIT Image at 7f5a39571000 ...
       Using 'conf-1' configuration
       Trying 'fdt-1' fdt subimage
         Description:  beaglebone-black
         Created:      Sun Jun  1 13:09:21 2014
         Type:         Flat Device Tree
         Compression:  uncompressed
         Data Size:    31547 Bytes = 30.81 kB = 0.03 MB
         Architecture: ARM
         Hash algo:    sha1
         Hash value:   cb09202f889d824f23b8e4404b781be5ad38a68d
       Verifying Hash Integrity ...
    sha1+
    OK

       Loading Flat Device Tree ... OK

    ## Loading ramdisk from FIT Image at 7f5a39571000 ...
       Using 'conf-1' configuration
    Could not find subimage node

    Signature check Bad (error 1)


It has detected the change in the kernel.

You can also be sneaky and try to switch images, using the libfdt utilities
that come with dtc (package name is device-tree-compiler but you will need a
recent version like 1.4::

    dtc -v
    Version: DTC 1.4.0

First we can check which nodes are actually hashed by the configuration::

    $ fdtget -l image.fit /
    images
    configurations

    $ fdtget -l image.fit /configurations
    conf-1
    fdtget -l image.fit /configurations/conf-1
    signature-1

    $ fdtget -p image.fit /configurations/conf-1/signature-1
    hashed-strings
    hashed-nodes
    timestamp
    signer-version
    signer-name
    value
    algo
    key-name-hint
    sign-images

    $ fdtget image.fit /configurations/conf-1/signature-1 hashed-nodes
    / /configurations/conf-1 /images/fdt-1 /images/fdt-1/hash /images/kernel /images/kernel/hash-1

This gives us a bit of a look into the signature that mkimage added. Note you
can also use fdtdump to list the entire device tree.

Say we want to change the kernel that this configuration uses
(/images/kernel). We could just put a new kernel in the image, but we will
need to change the hash to match. Let's simulate that by changing a byte of
the hash::

    fdtget -tx image.fit /images/kernel/hash-1 value
    c9436464 6427e10f 423837e5 59898ef0 2c97b988
    fdtput -tx image.fit /images/kernel/hash-1 value c9436464 6427e10f 423837e5 59898ef0 2c97b981

Now check it again::

    $UOUT/tools/fit_check_sign -f image.fit -k am335x-boneblack-pubkey.dtb
    Verifying Hash Integrity ... sha1,rsa2048:devrsa_verify_with_keynode: RSA failed to verify: -13
    rsa_verify_with_keynode: RSA failed to verify: -13
    -
    Failed to verify required signature 'key-dev'
    Signature check Bad (error 1)

This time we don't even get as far as checking the images, since the
configuration signature doesn't match. We can't change any hashes without the
signature check noticing. The configuration is essentially locked. U-Boot has
a public key for which it requires a match, and will not permit the use of any
configuration that does not match that public key. The only way the
configuration will match is if it was signed by the matching private key.

It would also be possible to add a new signature node that does match your new
configuration. But that won't work since you are not allowed to change the
configuration in any way. Try it with a fresh (valid) image if you like by
running the mkimage link again. Then::

    fdtput -p image.fit /configurations/conf-1/signature-1 value fred
    $UOUT/tools/fit_check_sign -f image.fit -k am335x-boneblack-pubkey.dtb
    Verifying Hash Integrity ... -
    sha1,rsa2048:devrsa_verify_with_keynode: RSA failed to verify: -13
    rsa_verify_with_keynode: RSA failed to verify: -13
    -
    Failed to verify required signature 'key-dev'
    Signature check Bad (error 1)


Of course it would be possible to add an entirely new configuration and boot
with that, but it still needs to be signed, so it won't help.


6. Put the public key into U-Boot's image
-----------------------------------------

Having confirmed that the signature is doing its job, let's try it out in
U-Boot on the board. U-Boot needs access to the public key corresponding to
the private key that you signed with so that it can verify any kernels that
you sign::

    cd $UBOOT
    make O=b/am335x_boneblack_vboot EXT_DTB=${WORK}/am335x-boneblack-pubkey.dtb

Here we are overriding the normal device tree file with our one, which
contains the public key.

Now you have a special U-Boot image with the public key. It can verify can
kernel that you sign with the private key as in step 5.

If you like you can take a look at the public key information that mkimage
added to U-Boot's device tree::

    fdtget -p am335x-boneblack-pubkey.dtb /signature/key-dev
    required
    algo
    rsa,r-squared
    rsa,modulus
    rsa,n0-inverse
    rsa,num-bits
    key-name-hint

This has information about the key and some pre-processed values which U-Boot
can use to verify against it. These values are obtained from the public key
certificate by mkimage, but require quite a bit of code to generate. To save
code space in U-Boot, the information is extracted and written in raw form for
U-Boot to easily use. The same mechanism is used in Google's Chrome OS.

Notice the 'required' property. This marks the key as required - U-Boot will
not boot any image that does not verify against this key.


7. Put U-Boot and the kernel onto the board
-------------------------------------------

The method here varies depending on how you are booting. For this example we
are booting from an micro-SD card with two partitions, one for U-Boot and one
for Linux. Put it into your machine and write U-Boot and the kernel to it.
Here the card is /dev/sde::

    cd $WORK
    export UDEV=/dev/sde1   # Change thes two lines to the correct device
    export KDEV=/dev/sde2
    sudo mount $UDEV /mnt/tmp && sudo cp $UOUT/u-boot-dtb.img /mnt/tmp/u-boot.img  && sleep 1 && sudo umount $UDEV
    sudo mount $KDEV /mnt/tmp && sudo cp $WORK/image.fit /mnt/tmp/boot/image.fit && sleep 1 && sudo umount $KDEV


8. Try it
---------

Boot the board using the commands below::

    setenv bootargs console=ttyO0,115200n8 quiet root=/dev/mmcblk0p2 ro rootfstype=ext4 rootwait
    ext2load mmc 0:2 82000000 /boot/image.fit
    bootm 82000000

You should then see something like this::

    U-Boot# setenv bootargs console=ttyO0,115200n8 quiet root=/dev/mmcblk0p2 ro rootfstype=ext4 rootwait
    U-Boot# ext2load mmc 0:2 82000000 /boot/image.fit
    7824930 bytes read in 589 ms (12.7 MiB/s)
    U-Boot# bootm 82000000
    ## Loading kernel from FIT Image at 82000000 ...
       Using 'conf-1' configuration
       Verifying Hash Integrity ... sha1,rsa2048:dev+ OK
       Trying 'kernel' kernel subimage
         Description:  unavailable
         Created:      2014-06-01  19:32:54 UTC
         Type:         Kernel Image
         Compression:  lzo compressed
         Data Start:   0x820000a8
         Data Size:    7790938 Bytes = 7.4 MiB
         Architecture: ARM
         OS:           Linux
         Load Address: 0x80008000
         Entry Point:  0x80008000
         Hash algo:    sha1
         Hash value:   c94364646427e10f423837e559898ef02c97b988
       Verifying Hash Integrity ... sha1+ OK
    ## Loading fdt from FIT Image at 82000000 ...
       Using 'conf-1' configuration
       Trying 'fdt-1' fdt subimage
         Description:  beaglebone-black
         Created:      2014-06-01  19:32:54 UTC
         Type:         Flat Device Tree
         Compression:  uncompressed
         Data Start:   0x8276e2ec
         Data Size:    31547 Bytes = 30.8 KiB
         Architecture: ARM
         Hash algo:    sha1
         Hash value:   cb09202f889d824f23b8e4404b781be5ad38a68d
       Verifying Hash Integrity ... sha1+ OK
       Booting using the fdt blob at 0x8276e2ec
       Uncompressing Kernel Image ... OK
       Loading Device Tree to 8fff5000, end 8ffffb3a ... OK

    Starting kernel ...

    [    0.582377] omap_init_mbox: hwmod doesn't have valid attrs
    [    2.589651] musb-hdrc musb-hdrc.0.auto: Failed to request rx1.
    [    2.595830] musb-hdrc musb-hdrc.0.auto: musb_init_controller failed with status -517
    [    2.606470] musb-hdrc musb-hdrc.1.auto: Failed to request rx1.
    [    2.612723] musb-hdrc musb-hdrc.1.auto: musb_init_controller failed with status -517
    [    2.940808] drivers/rtc/hctosys.c: unable to open rtc device (rtc0)
    [    7.248889] libphy: PHY 4a101000.mdio:01 not found
    [    7.253995] net eth0: phy 4a101000.mdio:01 not found on slave 1
    systemd-fsck[83]: Angstrom: clean, 50607/218160 files, 306348/872448 blocks

    .---O---.
    |       |                  .-.           o o
    |   |   |-----.-----.-----.| |   .----..-----.-----.
    |       |     | __  |  ---'| '--.|  .-'|     |     |
    |   |   |  |  |     |---  ||  --'|  |  |  '  | | | |
    '---'---'--'--'--.  |-----''----''--'  '-----'-'-'-'
                    -'  |
                    '---'

    The Angstrom Distribution beaglebone ttyO0

    Angstrom v2012.12 - Kernel 3.14.1+

    beaglebone login:

At this point your kernel has been verified and you can be sure that it is one
that you signed. As an exercise, try changing image.fit as in step 5 and see
what happens.


Further Improvements
--------------------

Several of the steps here can be easily automated. In particular it would be
capital if signing and packaging a kernel were easy, perhaps a simple make
target in the kernel.

Some mention of how to use multiple .dtb files in a FIT might be useful.

U-Boot's verified boot mechanism has not had a robust and independent security
review. Such a review should look at the implementation and its resistance to
attacks.

Perhaps the verified boot feature could be integrated into the Amstrom
distribution.


.. sectionauthor:: Simon Glass <sjg@chromium.org>, 2-June-14
