molecular, what is the source of randomness inside the Trezor?
Done more digging and asked satoshilabs for hints.
Relevant info is on page 533 of
http://www.st.com/web/en/resource/technical/document/reference_manual/CD00225773.pdfThe RNG processor is a random number generator, based on a continuous analog noise, that provides a random 32-bit value to the host when read.
and more specifically:
The random number generator implements an analog circuit. This circuit generates seeds
that feed a linear feedback shift register (RNG_LFSR) in order to produce 32-bit random
numbers.
The analog circuit is made of several ring oscillators whose outputs are XORed to generate
the seeds.
I'm not a physicist or electronics guy, but I'm guessing those ring oscillators and their operational output are influenced my many factors, like impurities in the matierials on the die, variance in the amount of material and probably external factors like magnetic / electric fields, temperature, maybe even gravitational or more esoteric quantum effects?
If you look at the wikipedia article about ring osciallators, there's a section on jitter which attributes the variance in oscillation period to temperature only:
Jitter: Period of ring oscillator vibrates in a random manner T=T+T' where T' is a random value. In high-quality circuits, the range of T' is relatively small compared to T. This variation in oscillator period is called jitter.[3] Local temperature effects cause the period of a ring oscillator to wander above and below the long-term average period:[4] When the local silicon is cold, the propagation delay is slightly shorter, causing the ring oscillator to run at a slightly higher frequency, which eventually raises the local temperature. When the local silicon is hot, the propagation delay is slightly longer, causing the ring oscillator to run at a slightly lower frequency, which eventually lowers the local temperature.
caveat regarding above bolded sentence: often 'random' just means 'unknown to the observer' or 'unpredictable with available information', but that's leading up to a philosophical discussion.
EDIT: as a side-note: I quite trust the combination of the hw rng and the random source on my cpu to be sufficiently random and above all unkowable to anyone.
EDIT2: you can get entropy from your trezor using python-trezor:
localhost (master) ~/bitcoin/python-trezor\> ./cmdtr.py get_entropy 32
b5ad64d05241aa1cbbb8d62cdd12542749dd008a23817b71e703d6f9b905665a
that way you can at least check it's not doing this:
(courtesy xkcd)EDIT3: if you want your mind fucked, check
On the security of oscillator-based random number generators