Parte 1
No, esto no es seguro, no sería semánticamente seguro (porque Random () no es seguro)
Yo diría que no sería seguro porque una función de hash reduce la entropía de su entrada. En otras palabras, una función hash generalmente tiene menos de 1: 1 de asignación de resultados a entrada, y tiene una mayor probabilidad de colisionar con entradas anteriores que la entrada en bruto en sí misma.
En este caso, la entrada no aleatoria simplemente será "más larga" con más bits, pero no la hará más aleatoria, que es la base de la mayoría de las necesidades criptográficas. (Think One Time Pad)
Una mejor solución:
Alimente la entrada no aleatoria en un "HKDF". Un HKDF le permite derivar muchas claves de una clave, suponiendo que la clave de origen / PRF no es necesariamente aleatoria. El HKDF usa el paradigma "Extraer y luego expandir" que agrega aleatoriedad usando una "sal" no secreta que es aleatoria. Muestra HMAC(salt, yourKey)
Otro enfoque consiste en incluir esa entrada no aleatoria en un cifrado de flujo como AES o 3DES y usarlo como una almohadilla de una vez (o para lo que sea que quieras usar)
¿Cómo lo atacarías?
Necesito saber cómo se está utilizando esto. El ataque es el mismo que el ataque en random () con el retardo de hashing agregado posterior. La versión simplificada de este ataque es saber que el área que necesitas para la fuerza bruta es mucho más pequeña que 2 ^ 51 y es probable que no sea despreciable.
En un ejemplo de cifrado de flujo, significa que SHA1 causará una colisión en menos de 281.5 terabytes está encriptado y la función rand () lo reduce aún más. (Si alguien sabe cómo calcular esto, apreciaría esa información)
Parte 2
Solo te concentras en el aspecto "hashing" que no tiene la relación con un PRNG como sospechabas:
Las colisiones son malas porque le permiten al atacante hacer muchas cosas, como implementar un ataque de mensaje elegido, falsificación existencial o una variedad de otros ataques, según el lugar donde se use el resultado de hash resultante.
En términos de hash, es más probable que ocurra una colisión en 2 ^ n / 2 operaciones (aproximadamente la raíz cuadrada del tamaño del espacio de salida).
Name Size Attack Operations
SHA-1 160 2^80 (Insecure, don't use)
SHA-256 256 2^128
SHA-512 512 2^256
Whirlpool 512 2^256 (AES based and slowest)
Lo que se enumera anteriormente es la mejor resistencia de colisión posible (en teoría) basada únicamente en el número de bits en la salida.
Tenga en cuenta que la seguridad realista de un hash probablemente será menos segura que el máximo teórico. Tome SHA-1, por ejemplo, el buscador de colisiones más conocido solo requiere 2 ^ 51 evaluaciones hash y el mejor caso teórico es 2 ^ 80)