Patrik Dominik Pordi cc492bbf6e
[Sponsored by ARK] Encryption (#24489)
* Added the board configs for encryption, I had to disable smbus and px4 io in the arkv6x

* Added the key generator script

* Added the decryptor, logs are needed for it though

* Added the log download and modified the decryptor

* Quick fixes & README

* Additional modifications & cleanup

* Tested upd connection
Adjusted the log downloader to handle multiple entry responses from the FC
Edited README

* Reverted IP address change

* Added pycryptodome to the requirements.txt

* fixes for log download and decryption

* Removed old log decryptors and updated README

* Pointed the ark borads to the dummy key updated the README accordingly

* Adjusted the folders in README, removed new lines

* Extended command line arguments for all possibilities for description

* Added MAV_CMD_REQUEST_AUTOPILOT_CAPABILITIES after heartbeat received to make sure log request is answered in all cases

* Update Tools/log_encryption/README.md

Co-authored-by: Jacob Dahl <37091262+dakejahl@users.noreply.github.com>

* Update Tools/log_encryption/README.md

Co-authored-by: Jacob Dahl <37091262+dakejahl@users.noreply.github.com>

* Update Tools/log_encryption/README.md

Co-authored-by: Jacob Dahl <37091262+dakejahl@users.noreply.github.com>

* Update Tools/log_encryption/README.md

Co-authored-by: Jacob Dahl <37091262+dakejahl@users.noreply.github.com>

* Edited README, changed the serial connection logic and updated logdownload, made decryption a bit easier to understand

* Update Tools/log_encryption/README.md

Co-authored-by: Hamish Willee <hamishwillee@gmail.com>

* Removed new lines

* arkv6x: add individual mags to default.px4board

---------

Co-authored-by: Jacob Dahl <dahl.jakejacob@gmail.com>
Co-authored-by: Alex Klimaj <alex@arkelectron.com>
Co-authored-by: Jacob Dahl <37091262+dakejahl@users.noreply.github.com>
Co-authored-by: Hamish Willee <hamishwillee@gmail.com>
2025-04-02 23:40:45 -08:00

2.2 KiB

PX4 Log Encryption Tools

Tools for generating encryption keys, building PX4 firmware with encrypted logs, downloading logs, and decrypting them.

For more information see: https://docs.px4.io/main/en/dev_log/log_encryption.html

Usage

  1. Get the board file: In order to use these tools you need to create an encrypted_logs target in your target board directory. For example:

    encrypted_logs.px4board
    

    Using make menuconfig you should enable these settings: Blake2s hash algorithm, entropy pool and strong random number generator and select use interrupts to feed timing randomness to the entropy pool. Once you have generated the keys make sure you add them to the boardconfig.

    make <your_board_name>_encrypted_logs menuconfig
    
  2. Generate Keys:

    cd PX4-Autopilot/Tools/log_encryption
    python3 generate_keys.py
    

    Make sure you have the right key in your board file CONFIG_PUBLIC_KEY1="../../../keys/public/public_key.pub"

  3. Build Firmware:

    cd PX4-Autopilot
    
    AND
    
    make <your_board_name>_encrypted_logs
    
    FOR INSTANCE
    make_ark_fpv_encrypted_logs
    
    Upload the custom firmware on your flight controller and record some logs
    
  4. Download Logs:

    cd PX4-Autopilot/Tools/log_encryption
    
    python3 download_logs.py /dev/ttyACM0 --baudrate 57600
    
    OR
    
    python3 download_logs.py udp:0.0.0.0:14550
    

    Addresses might need to be adjusted

  5. Decrypt Logs: The easiest way to run this is to have your private key and encrypted logs in the following folders respectively:

    PX4-Autopilot/keys/private
    PX4-Autopilot/logs/encrypted
    

    Then run:

    cd PX4-Autopilot/Tools/log_encryption
    
    AND
    # Uses default key + default folder
    python3 decrypt_logs.py
    
    OR
    # Use --help to get all the options
    python3 decrypt_logs.py --help
    

    Your decrypted logs can be found in:

    PX4-Autopilot/logs/decrypted
    

    Otherwise

Directory Structure

  • keys/: Encryption keys.
  • logs/encrypted/: Downloaded encrypted logs.
  • logs/decrypted/: Decrypted logs.