Oh, that's really interesting!

It's a one-time write register so if we explicitly wrote garbage, all zeroes, etc, that would preclude it being used for nefarious purposes later.

What I found more intriguing is the possibility to write an RSA public key -- like, say, the nostr:npub17tyke9lkgxd98ruyeul6wt3pj3s9uxzgp9hxu5tsenjmweue6sqq4y3mgl public key. Not sure yet what that might enable... still can't trust anything running from the SD card...

Reply to this note

Please Login to reply.

Discussion

Not sure all 32-bit registers (they are 67) are one-time write. Modifying some of them could compromise the correct behaviour of the device, for example the 17th changes the boot mode (microSD/USB), but for sure a lot of them could be used to store keys and can be zeroed out without bricking the device.

It should be noted that this kind of risk falls under the "Double evil maid attack" category since she'd have to sneak in, swap in an evil SD card, wait for me to use it, then sneak back in and retrieve the Raspi that now has a secret written into its persistent hardware registers.

Of the remaining threats we have, I'd rank this probably at the bottom of my personal priority/concern list.

Yeah, it's a remote possibility. But it's good to be aware it is possible.

An immediate, although not convenient solution, consists in using the 'vcgencmd otp_dump' command to print and check the OTP registers have not been modified. However it's only a partial solution because the command doesn't show the first 256 bits. I need to further investigate how to print the first 8 32-bits registers.

Thank you for highlighting this. We're going to document for formal development follow-up. https://github.com/SeedSigner/seedsigner/issues/390

Thank you