Estoy desarrollando una utilidad simple para resolver un problema muy específico: quiero almacenar todas mis imágenes en la nube. Fotos familiares, nada perversas, ilegales o mortales. Los requisitos son:
Quiero que estén al menos "ocultos", como en "no visibles e indexables automáticamente cuando alguien barre mi cuenta de almacenamiento", como Google o Microsoft cuando están recolectando cosas para entrenar sus servicios cognitivos o cualquier mega de corporaciones. co.nz da acceso a mis archivos para. Mejor sería cifrado de forma segura, obviamente.
Necesito poder detectar cambios en una sola imagen y cargar solo eso, evitando así enormes archivos.
He desarrollado una secuencia de operaciones utilizando solo bibliotecas estándar (apache commons crypto principalmente) que deberían ser seguras para los estándares actuales:
[una vez, cuando se ejecuta el cifrado]
- ingrese una contraseña (cualquier longitud)
[los siguientes pasos se repiten para cada archivo]
- generar un salt SecureRandom (32 bytes)
- calcular una contraseña de 16 bytes + hash de sal usando PBKDF2WithHmacSHA512 (1000 iteraciones)
- generar un secureRandom IV (16 bytes)
- ZIP el archivo único (esto se puede alternar ya que es inútil para las imágenes)
- AES cifra el archivo utilizando AES / CBC / PKCS7Padding
Sé que esto no ocultará el nombre, la naturaleza y el tamaño de mis archivos (al contrario de lo que trata de hacer Cryptomator, por ejemplo, pero webdav es un problema cuando se trata de detectar cambios en los archivos), pero debería estar bien por mí, a menos que permita el craqueo de todo el cifrado de alguna manera.
Ahora necesito almacenar el salt y el IV, y actualmente he decidido almacenarlos en un archivo JSON de metadatos en el mismo lugar donde almacenaré el archivo cifrado. He leído y entiendo que la IV debe ser aleatoria pero no necesita ser secreta, corríjame si me equivoco, pero ¿qué pasa con la sal de hachís? ¿Puedo almacenarlo con el IV y el archivo cifrado sin amenazar con ninguna parte del cifrado?