o TRNG (True Random Number Generation)
parèntesi: RNG en ordinadors tradicionals (no HSM)
Com implementem un RNG si no és algorísmic?
*) HSM: Hardware Secure Module
les diverses fonts que farem servir per a generar la seqüència del RNG —ja sigui d'I/O, o de dispositius hardware especialitzats— les podem acumular de diferents fonts individuals mitjançant $\oplus$
en el cas de que una de les fonts no sigui del tot uniforme, això no empitjora la qualitat final del RNG a condició de que al menys una de elles si que ho sigui
s'ha de vigilar però que la acumulació garanteixi que:
el que podem fer és marcar cada font individual d'aleatorietat amb una entropia
UI ($\ll 1$ kbps després de reducció)
latència disc dur ($\ll 1$ kbps després de reducció)
Xarxa ($\approx 1$ kbps després de reducció)
funcions de processador (Intel: $\gg$ Mbps)
Els RNG han de tenir unes propietats
aquestes propietats no aplican al nombre generat (o el bit) en sí, si no a les seqüències de nombres generats
la seqüència de nombres (o de bits) ha de tenir una distribució uniforme
per a $n$ bits generats, la probabilitat d'una seqüència donada és la mateixa de la de cap altra ($2^{-n}$)
cap algorisme pot predir el següent bit coneguts els anteriors (y a més a més, la probabilitat d'encert ha de ser $p \aprox 1/2$)
per seqüències prou llargues el nombre d'$1$'s i $0$'s tendeix a ser el mateix
per seqüències prou llargues el nombre de grups ${00, 01, 10, 11}$ tendeix a ser el mateix
etc.
aquests tipus de tests permeten saber que la meva font no té problemes obvis, però no és suficient contra un atacant capaç de modificar convenient el sistema RNG
un RNG només es pot considerar segur si sabem com el generem, i el generem de forma segura
Wikipedia: Random number generator attack
Cloud: random... amb poca entropia per poca I/O
Debian: random... amb poca entropia per errors de codi
Intel: random... implementació tancada (...)
PlayStation 3: random... constant
la criptografia és segura sempre que les hipòtesis de funcionament es compleixin
l'aleatorietat suficient de la font RNG (o PRNG) és una d'elles
(de xkcd.com/221)
per a generar claus hem de fer servir PRNG o RNG?
podem fer servir PRNG a condició que:
AES-CTR
xifrant una seqüència constant és una bona opció)
AES-128
o RSA-3072
)AES-256-CTR
si volem generar claus amb $256$ b de seguretat amb una mateixa
seqüència)(usats en HSM, SmartCards, algunes CPUs, etc.)
una resistència a temperatura ambient, té electrons lliures que es mouen aleatòriament (càrrega negativa) i podem mesurar-ne el desequilibri momentani amb un conversor Analògic/Digital
el conversor donarà una seqüència indefinida de bits aleatoris
el soroll tèrmic és el resultat d'un fenòmen caòtic (no estrictament aleatori)
(...)
amb una font (tènue) apuntem a un mirall semireflectant; dos fotodetectors detecten un o l'altre el fotó de forma totalment aleatòria
(d'idquantique.com)
les dues famílies de dispositius generen nombres aleatoris... però no uniformes
el flux en cru es processa sempre, típicament:
això redueix els bps però "uniformitza" la seqüència
a Linux (Ubuntu) tenim dues fonts random:
/dev/random
: sortida RNG basada en I/O ($\approx$ bps)/dev/urandom
: unblocking random, sortida PRNG enriquida amb /dev/random
; ($\approx$ Mbps)a altres Linux tenim diferents combinacions de /dev/random
i amb aleatorietat obtinguda de fonts diferents
(Hardware Secure Module)
(Hardware Secure Module)
les funcions d'un HSM són:
(font
DGP)
per a implementar les funcions anteriors cal:
els HSM poden ser certificats segons
FIPS 140-2
en diferents nivells:
aquest estàndar defineix els requeriments de seguretat que han de seguir els HSM (certificats):
The security requirements cover areas related to the secure design and implementation of a cryptographic module. These areas include cryptographic module specification; cryptographic module ports and interfaces; roles, services, and authentication; finite state model; physical security; operational environment; cryptographic key management; electromagnetic interference/electromagnetic compatibility (EMI/EMC); self-tests; design assurance; and mitigation of other attacks.
per a gestionar claus d'usuaris per a signatura avançada habitualment es requereix FIPS 140-2 nivell 2
per a autoritats de validació o de segell de temps, habitualment es requereix FIPS 140-2 nivell 2
per a autoritats de certificació habitualment es requereix FIPS 140-2 nivell 3
PKCS #11
és una especificació de la API dels HSM en llenguatge C (literalment un .h
)
PKCS: Public Key Cryptographic Standard. Estàndards de facto publicats per RSA Labs. Inc. (ara EMC2 (ara Dell Technologies));
actualment la gestió de l'estàndard ha passat a
OASIS
en claus importants (e.g. d'una CA arrel) un HSM pot no ser suficient (i si el roben?)
en aquests casos podem dividir la clau en trossos:
ho podem fer "per software"?
sí, però el secret ha estat "en clar" en la RAM de l'ordinador per tant un cop recuperat el secret la seva exposició ha augmentat notablement
però en HSM és una propietat habitual
permet dividir el secret en $M$ trossos, dels quals en calen $N$ per a recuperar-lo
definit sobre $\mathbb{Z}_{p}^{*}$ (no sobre $\mathbb{R}$ com al dibuix anterior)
si en lloc de fer servir una recta (polinomi de grau $1$), fem servir un polinomi de grau $M-1$ podem ajustar quants trossos cal recuperar ($M$)
podem fer-ne tants trossos ($N$) com calgui ($N | N \geq M$)