Estoy trabajando en un proyecto que divide archivos grandes en varios bloques cifrados de tamaño fijo (por ejemplo, 4KiB). Esos bloques se utilizarán para ser almacenados de forma persistente en un dispositivo de almacenamiento.
Los bloques se cifran simétricamente y cada bloque tiene su propio vector de inicialización. Desafortunadamente, no estoy seguro de cómo "generar" esos vectores de inicialización correctamente:
Como se explica aquí y here hay varios algoritmos de generación de vectores de inicialización diferentes. Obviamente, debe distinguirse entre los privados (por ejemplo, ESSIV) y los públicos (por ejemplo, Plain). También leí que los algoritmos IV como Plain no deberían combinarse con el modo de operación CBC.
¿Qué algoritmo de generación IV debo usar? O en otras palabras: ¿Qué no debo hacer definitivamente?
No quiero usar nonces aleatorios para cada bloque, ya que esos nonces tendrían que ser almacenados en algún lugar, un algoritmo de generación IV sería mucho más cómodo para mí.