You can disable JTAG if you like or you can just lock it with a
challenge-response code. Section 67.7 of the reference manual, for
anyone who's curious about the controls available. The internally
fused, per-SoC key cannot be read out via JTAG or software.
Random thoughts:
- patched u-boot can probably configure trustzone to protect the fuse array.
- patched u-boot can probably virtualize the sdcard and transparently
encrypt it.
- Doesn't verity just present a signed, immutable filesystem? You
could use that to store some trusted luks/dm utilities which are then
used to decrypt and mount the real filesystem.
- You can probably package a kernel, device tree, boot args, and an
initrd into a FIT blob that uboot can verify.
Fusing private/secret keys on the SoC is never a good idea, even if JTAG can be disabled and code can be secure booted ideally you would prompt for those keys at boot.
If you really want to use a built-in key the i.MX53 has a built-in unique symmetric encryption key fused in the SCC that can be used for the task, this key cannot be requested and/or extracted and only the SCC can use it.
We prefer to prompt for the key at boot and it is our goal to have TrustZone code doing that in the long term. I disagree on b), so far we can smoothly connect to Linux, Windows and OSX with a dhcp server on the USB armory without too many issues, this is my preferred communication method at this time.
On Sunday, May 10, 2015 at 9:50:25 AM UTC+2, Andrea Barisani wrote:Fusing private/secret keys on the SoC is never a good idea, even if JTAG can be disabled and code can be secure booted ideally you would prompt for those keys at boot.Could you elaborate about attack scenarios? I'm a SoC/Arm noob, totally intimidated by 5000+ pages reference manual ;)So I guess there is a relatively easy way do retrieve those keys from the device? Like using the omnipotent SRK to look them up in the internal bootloader?
If you really want to use a built-in key the i.MX53 has a built-in unique symmetric encryption key fused in the SCC that can be used for the task, this key cannot be requested and/or extracted and only the SCC can use it.Is there a ready linux module for doing that?
We prefer to prompt for the key at boot and it is our goal to have TrustZone code doing that in the long term. I disagree on b), so far we can smoothly connect to Linux, Windows and OSX with a dhcp server on the USB armory without too many issues, this is my preferred communication method at this time.The ethernet connection method is fine (it will definitely work everywhere - and I'm happily using it now), but almost (?) always requires to set up a manual interface address for usbarmory. And it would be an overkill to spawn a dropbear ssh to input the luks key (every machine that hosts usbarmory would have to have an ssh client, it's more likely to get caught by a keylogger - unlike putting inconspicuous jpg file on some usb storage - inconspicuous from malware's perspective that is).
Very cool!