¿Puede una sal mantener pseudoaleatoriedad después de ser modificada?

1

TL; DR: ¿Cuánto puede una función (como la que se muestra a continuación) modificar una cadena inicialmente aleatoria antes de que esa cadena se vuelva inútil como sal para el hashing de contraseñas? ¿Hay una regla general?

# Function generates a random string of characters using urandom(), then converts each
# character to its hexadecimal equivalent, and then converts *those* digits back to characters.
# Each hexadecimal character-string is then concatenated into a super-string, excluding the '0x' 
# prefixes. The function returns the first 64 characters of the super-string.

def hex_salt():
    raw_salt = os.urandom(500)
    hex_salt = ""
    trimmed_salt = ""

    for i in range(len(raw_salt)):
        dec_num = ord(raw_salt[i])
        hex_substring = str(hex(dec_num))
        hex_salt += hex_substring


    j=0
    while(len(trimmed_salt) < 64):
        if (hex_salt[j]=='0' and hex_salt[j+1]=='x') or (hex_salt[j]=='x'):
            j+=1
            continue

        trimmed_salt+=hex_salt[j]
        j+=1

    return trimmed_salt

La razón por la que pregunto es que estoy usando el módulo hashlib incorporado de python para configurar un servicio de inicio de sesión para mi sitio web. Debido a que los caracteres hexadecimales son más fáciles de tratar, quiero crear una sal aleatoria (usando os.urandom) y derivar una sal aleatoria de ella que solo contenga caracteres hexadecimales. Este es mi primer post aquí, así que me disculpo por los pecados que sin duda he cometido.

    
pregunta AG Boling 02.07.2015 - 00:25
fuente

1 respuesta

1

El simple hecho de cambiar la representación del mensaje no debería reducir la entropía dado que el significado subyacente de los datos no debe modificarse. Por ejemplo, podría codificarlo en Base64 o ASCII sin problema.

Sin embargo, para responder a esta pregunta en general:

  

¿Cuánto puede una función (como la de abajo) modificar inicialmente una   cadena aleatoria antes de esa cadena

Es más preocupante cómo usted modifica los datos en lugar de cuánto han cambiado los datos. Si hace algo que hace que los datos sean más predecibles, comprometerá la seguridad del valor aleatorio. Por ejemplo, podría invertir de forma segura los bits de la cadena, pero si revisara alguna secuencia de bits eliminada que no correspondiera a un carácter ASCII A-Z, lo haría menos seguro.

En su caso, no implementaría mi propio esquema de codificación; solo usaría Base64 .

    
respondido por el thexacre 02.07.2015 - 02:49
fuente

Lea otras preguntas en las etiquetas