Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Re-implement PKI from #1509 #4379

Merged
merged 73 commits into from
Aug 10, 2024
Merged

Re-implement PKI from #1509 #4379

merged 73 commits into from
Aug 10, 2024

Conversation

jp-bennett
Copy link
Collaborator

@jp-bennett jp-bennett commented Aug 3, 2024

co-authored-by: edinnen [email protected]

Based on #1509. Different from that effort, we now use the curve25519 DH key as the primary encryption key, and no longer double encrypt. We also allow for fall-through decryption, for cases when we expect a sender to use PKI, but the packet is just symmetric encrypted.

The STM32 target just doesn't have enough flash for the curve25519 key generation functions, but we were able to barely squeeze the decryption in. To make this work, MESHTASTIC_EXCLUDE_PKI_KEYGEN is set as part of the minimal build set.

@jp-bennett jp-bennett marked this pull request as ready for review August 4, 2024 04:30
@thebentern thebentern changed the base branch from master to 2.5-changes August 10, 2024 12:26
@thebentern thebentern merged commit 74afd13 into 2.5-changes Aug 10, 2024
4 checks passed
jp-bennett added a commit that referenced this pull request Aug 13, 2024
* Re-implement PKI from #1509
co-authored-by: edinnen <[email protected]>

* Set the key lengnth to actually make PKI work.

* Remove unused variable and initialize keys to null

* move printBytes() to meshUtils

* Don't reset PKI key son reboot unless needed.

* Remove double encryption for PKI messages

* Cleanup encrypt logic

* Add the MESHTASTIC_EXCLUDE_PKI option, and set it for minimal builds. Required for STM32 targets for now.

* Use SHA-256 for PKI key hashing, and add MESHTASTIC_EXCLUDE_PKI_KEYGEN for STM32

* Fix a crash when node is null

* Don't send PKI encrypted packets while licensed

* use chIndex 8 for PKI

* Don't be so clever, that you corrupt incoming packets

* Pass on channel 8 for now

* Typo

* Lock keys once non-zero

* We in fact need 2 scratch buffers, to store the encrypted bytes, unencrypted bytes, and decoded protobuf.

* Lighter approach to retaining known key

* Attach the public key to PKI decrypted packets in device memory

* Turn PKI back off for STM32 :(

* Don't just memcp over a protobuf

* Don't PKI encrypt nodeinfo packets

* Add a bit more memory logging around nodeDB

* Use the proper macro to refer to NODENUM_BROADCAST

* Typo fix

* Don't PKI encrypt ROUTING (naks and acks)

* Adds SecurityConfig protobuf

* Add admin messages over PKI

* Disable PKI for the WIO-e5

* Add MINIMUM_SAFE_FREE_HEAP macro and set to safe 1.5k

* Add missed "has_security"

* Add the admin_channel_enabled option

* STM32 again

* add missed configuration.h at the top of files

* Add EXCLUDE_TZ and RTC

* Enable PKI build on STM32 once again

* Attempt 1 at moving PKI to aes-ccm

* Fix buffers for encrypt/decrypt

* Eliminate unused aes variable

* Add debugging lines

* Set hash to 0 for PKI

* Fix debug lines so they don't print pointers.

* logic fix and more debug

* Rather important typo

* Check for short packets before attempting decrypt

* Don't forget to give cryptoEngine the keys!

* Use the right scratch buffer

* Cleanup

* moar cleanups

* Minor hardening

* Remove some in-progress stuff

* Turn PKI back off on STM32

* Return false

* 2.5 protos

* Sync up protos

* Add initial cryptography test vector tests

* re-add MINIMUM_SAFE_FREE_HEAP

* Housekeeping and comment fixes

* Add explanatory comment about weak dh25519 keys

---------

Co-authored-by: Ben Meadors <[email protected]>
@jp-bennett jp-bennett deleted the pki branch August 14, 2024 14:22
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants