You're completely right someone could put some other firmware on the image but have it return the correct one - we solve this by:
- padding the image to the size of the ROM (256k, the runtime image is ~10k)with random data making it incompressible - signing the image (including the random bit) so that the image can't be altered
On a linux system the udev install script kicks off a process that starts with verification of the firmware image and finishes with putting it into service if verification passes.
This is open hardware - you can program it yourself, we'll be releasing both the hardware design and all the software in a little while - along with programmer for doing it - you just wont be able to create an image signed by us - but you can sign images and share them with your friends.
Note: what you can't do is program the device over the USB
As far as lifting the lid and verifying what's underneath is concerned we don't expect every user to open it and look at the board and understand how it works (we hope some people will and will verify our work) - but what you can do is look under there and verify that the board looks the same as images that we publish.
padding the image to the size of the ROM (256k, the runtime
image is ~10k)with random data making it incompressible -
signing the image (including the random bit) so that the
image can't be altered
You could pad it with data that looks random, but is secretly compressible. For example, the output of a prng with a known seed.Why not pad it with something that's already compressed, but which has information content, like a nice jpeg or something?
So now you have some extra room left on the ROM to embed your malicious firmware and still be able to dump the original full 256k.
If you start with a known image/photo (not yours, some public domain), that after encryption/compression is exactly the amount of padding you need (or cut-off), you have your padding-bitstream that is a lot harder to regenerate from a seed.
Edit: clarification
[1] http://en.wikipedia.org/wiki/A_Million_Random_Digits_with_10...
[2] http://www.amazon.com/Million-Random-Digits-Normal-Deviates/...
Dumping the firmware means you can ensure it's not been modified (presumably from when you uploaded it to the device yourself).
Being able to inspect components means you can ensure it's still exactly as you built it. And if you haven't, you can visually check that it does what it says it does.
If you're not technically competent to make this verification, you can ask somebody you trust and who is to do it for you.
we'll be publishing the layout files of course
IMO it seems like simply trusting the large block diagram that says "USB PHY" is a very weak point in the design.
Sarcasm and FTDI chips aside, I'm hoping the point was clear. Guess it wasn't.
Using USB as the physical transport from dongle to CPU just introduces more black boxes in a system where everyone was bragging about no black boxes. But since we're past the age of parallel ports and discrete GPIOs on these machines, there doesn't seem to be an easy answer.
Well, of course, in theory. In practice the total amount of firmware space is limited. It's rather large, as these things go, at 256 or 512 KB depending on the exact model.
If it dumps a firmware close to that size, which passes scrutiny by several people, I would say that the risk that the chip still manages to contain a firmware which creates bad random data and a fake firmware is rather slim.
Of course it's not impossible, and if you made it a contest (which, perhaps it is to some people) I'm sure it could be done.
It's hard to trust digital systems of this complexity; what if you decide you don't trust TI (the makers of the microcontroller) in the first place, for instance? Building your own processor at this performance and size level isn't trivial.
(and then of course one verifies the source by inspection)
I'd love to see a 3D printer that specifically built verifiably secure hardware.
> You can ask it to dump the current firmware to you
It can dump the firmware but it can still execute something else than this (or in addition to) this firmware, can't it?
> You can see all the components on the board
The fact that I can see these tiny thingies doesn't do much good either? Can I, seeing them, tell what they do? No.
Building one of these yourself seems to solve both problems. Not trying to undermine it or anything, just curious what others think of it.