No sé si realmente hay alguna métrica que haga que cualquier algoritmo sea "preferido" sobre cualquier otro en lo que respecta a flash, pero sugeriría hacer lo que hacen las unidades flash encriptadas por hardware, y simplemente usar AES-128 / 256 CBC o CTR.
CTR solo usa un contador como fuente, lo que lo hace un poco más rápido y elimina la necesidad de almacenar cada clave individual para cada bloque de 16 bytes en la cadena en la memoria (lo que equivaldría a requerir la misma cantidad de RAM que hay) firmware). En realidad, el CTR convierte un cifrado de bloque en un cifrado de flujo, por lo que es relativamente sencillo escribir cada bloque para destellar a medida que se descifra, lo que minimiza el tiempo empleado en la RAM (y, por lo tanto, el tiempo empleado en ser vulnerable a los ataques de arranque en frío). Se adapta bien al cifrado flash incorporado, y de hecho, el modo CTR es a menudo el esquema de cifrado más fuertemente optimizado en las bibliotecas integradas.
En general, descifrar AES-256 es un 40% más lento que AES-128. Por lo tanto, en mi opinión, hay pocas ventajas de usar AES-128 sobre 256.
En cuanto al tiempo de descifrado real, creo que puede estar sobreestimando enormemente lo difícil que es esto realmente.
Por un lado, los aceleradores de AES realmente solo rinden alrededor de una velocidad 8 veces mayor en el STM32, por lo que hacerlo en software no es incluso mucho más lento.
Para AES-256, la mayoría de las bibliotecas que encontré tardaron alrededor de 1600-2000 ciclos por bloque descifrado. No sé cuál es la velocidad de su reloj, pero suponiendo que en el peor de los casos, para 1 MB, serían 131,072,000 ciclos de reloj. Dependiendo de su STM32 exacto, eso podría ser desde 2 segundos hasta 500 ms. Pero, para ser claros, en general, incluso el software AES-256 aún se mide en MB / s en la plataforma STM32. Probablemente no sea mucho más que 1-1.5MB / s, pero aún así es MB / s.
Y, puede obtener bibliotecas solo para ensamblaje capaces de realizar AES-128 (lo cual, en mi opinión, también es lo suficientemente bueno, si realmente desea hasta el último bit de velocidad) en menos de 700 ciclos por bloque. Consulte enlace
Pero, independientemente, no es un sumidero masivo de tiempo para descifrar 1 MB de bloques AES. AES es probablemente lo más cercano a un algoritmo de encriptación "preferido" que obtendrá, principalmente porque uno de los criterios principales que se usó para elegir qué algoritmo se usaría para AES (por parte del Ejército de los EE. UU.) Fue el rendimiento. Por lo tanto, es poco probable que otros esquemas de encriptación sean más rápidos que AES, a menos que ofrezcan una seguridad significativamente menor como compensación.