Built this over the past few weeks. It's a Bitcoin wallet where your keys live on an NXP SE050 secure element connected to a Raspberry Pi. All signing happens on the chip — private key material never touches the host. Web UI is only reachable as a Tor hidden service.
The SE050 communicates over I2C, which is plaintext by default, so the whole thing is wrapped in SCP03 (AES-128-CMAC + AES-128-CBC). NXP ships every chip with the same publicly documented factory keys, so if you don't rotate them on first use you're basically running without encryption. The setup wizard forces you to deal with this.
Some stuff I learned the hard way: if you create a key slot without ALLOW_DELETE in the policy bitmask, that slot is bricked forever. No recovery. NXP confirmed. I burned 4 of my first 16 slots figuring that out.
There's a full threat model in the repo if anyone wants to pick it apart. Looking for feedback from people who actually work with embedded security or hardware crypto. Tell me what I'm doing wrong, right or indifferent. I think it's pretty cool.
Built this over the past few weeks. It's a Bitcoin wallet where your keys live on an NXP SE050 secure element connected to a Raspberry Pi. All signing happens on the chip — private key material never touches the host. Web UI is only reachable as a Tor hidden service.
The SE050 communicates over I2C, which is plaintext by default, so the whole thing is wrapped in SCP03 (AES-128-CMAC + AES-128-CBC). NXP ships every chip with the same publicly documented factory keys, so if you don't rotate them on first use you're basically running without encryption. The setup wizard forces you to deal with this.
Some stuff I learned the hard way: if you create a key slot without ALLOW_DELETE in the policy bitmask, that slot is bricked forever. No recovery. NXP confirmed. I burned 4 of my first 16 slots figuring that out.
There's a full threat model in the repo if anyone wants to pick it apart. Looking for feedback from people who actually work with embedded security or hardware crypto. Tell me what I'm doing wrong, right or indifferent. I think it's pretty cool.