Definitivamente no es imposible, y no perderá la entropía al repetir los datos semilla, pero tampoco ganará ninguno.
Por "ellos", me refiero a una persona ficticia que está tratando de averiguar cómo se genera su entropía.
Si saben que estás tirando un dado, saben que cada dígito será 1-6.
Si saben cuántas veces estás tirando los dados, saben la longitud de la cuerda.
Si saben que el número se repite otras 9 veces, solo necesitan 100/1000 dígitos para calcular la cadena completa.
Un atacante ya podría haber deducido varias posibilidades al tener este conocimiento.
Técnicamente, tampoco es completamente aleatorio.
Código de ejemplo de Python:
# Generating dice rolls
import random
finalResult = ''
for i in range(0, 99):
finalResult += str(random.randint(1, 6))
finalResult = finalResult * 10
print finalResult
Nuestra cadena de resultados es
"445656152532321321544533156515514562441512263431326526522641111345452422363416326462451246641163263445656152532321321544533156515514562441512263431326526522641111345452422363416326462451246641163263445656152532321321544533156515514562441512263431326526522641111345452422363416326462451246641163263445656152532321321544533156515514562441512263431326526522641111345452422363416326462451246641163263445656152532321321544533156515514562441512263431326526522641111345452422363416326462451246641163263445656152532321321544533156515514562441512263431326526522641111345452422363416326462451246641163263445656152532321321544533156515514562441512263431326526522641111345452422363416326462451246641163263445656152532321321544533156515514562441512263431326526522641111345452422363416326462451246641163263445656152532321321544533156515514562441512263431326526522641111345452422363416326462451246641163263445656152532321321544533156515514562441512263431326526522641111345452422363416326462451246641163263"
La cadena produce 2.5806473 bits de entropía.
Si tuviéramos que repetir esta cadena 100 veces, los bits de entropía producen 2.5806473, por lo que no obtienes más entropía repitiendo la misma cadena. Tiene la misma cantidad exacta de bits de entropía.
Podrías usar un método mucho mejor para calcular esos tipos de cadenas.
Por ejemplo, usemos el siguiente conjunto de caracteres:
- (abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 ~ '! @ # $% ^ & * () -_ = + [{]} \ |:', <. >? / ")
Podríamos hacer que cada carácter corresponda a un número aleatorio (0-9).
Generaremos una cadena de 100 caracteres al azar 10 veces, cada resultado se agregará al final de la otra.
Código de ejemplo de Python:
import random
finalResult = ''
for i in range(0, 9):
charSet = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789~'!@#$%^&*()-_=+[{]}\|;:',<.>?/"
charDict = {}
for char in charSet:
charDict[char] = random.randint(0, 9)
resultNum = ''
for c in range(0, 99):
resultNum += str(charDict[random.choice(charSet)])
finalResult += resultNum
print finalResult
Nuestro resultado final es
"989399239097499389189022059092089492027501842251063182295989039209500981690709174339560500718099187606453339255549850346696565025042504925549332139224650652008702541994436538038618150315533023690953265748197684554400738548471882056153703865878585568168785067956510245109630478032252017568653870833894188388554461614037175856595140494136416835954432291428646093513565418053453659690464509631548126684471012603870043241726762620992001266264567652958725540078190802887737716846137398760778230100671898578274611212550507493363271408738936020202251709524912326332192065460961427192491397953337291818408796519672933031867956012894824302218099239929701290857804033886980677310953734098050027009200344729070097168472819000050821260058120486772283080610287066869211061373297557455864016702744529267151023698266001761202821747262141933039130063624472814012939225414242779000144228077687272549297604021".
La cadena produce 3.3067561 bits de entropía.
Incluso si tuviera que repetir esta cadena 100 veces, los bits de entropía seguirían siendo 3.3067561.
Para generar 1 TB de entropía aleatoria, esto haría el trabajo, sin embargo, no sugiero que ejecutes el código, ya que bloqueará tu computadora.
import random
finalResult = ''
for i in range(0, 999999999999):
charSet = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789~'!@#$%^&*()-_=+[{]}\|;:',<.>?/"
charDict = {}
for char in charSet:
charDict[char] = random.randint(0, 9)
resultNum = ''
for c in range(0, 99):
resultNum += str(charDict[random.choice(charSet)])
finalResult += resultNum
print finalResult