Vi esorto a rivedere la vostra premessa. Se entrambi gli endpoint dispongono di un'app, i criteri per la scelta dell'algoritmo non sono validi: l'app gestirà la crittografia / decrittografia, non l'utente. La crittografia a chiave pubblica può potenzialmente fornire una migliore sicurezza in questo contesto; per esempio, può abilitare la gestione delle chiavi trust-on-first-use (SSH-like). Inoltre, ti suggerisco di iniziare pensando prima al modello di minaccia. La prima domanda non dovrebbe essere, quale algoritmo crittografico devo usare? La tua prima domanda dovrebbe essere: quali minacce sto cercando di difendere?
Se è necessario utilizzare la crittografia simmetrica per i messaggi SMS, AES in modalità CBC con rubare il testo cifrato è una scelta plausibile. Il furto del ciphertext eviterà sprechi se il messaggio da crittografare non è un multiplo pari di 16 byte. Avrai ancora bisogno di una flebo, che occuperà un po 'di spazio. Per risparmiare spazio, è possibile inviare un contatore e utilizzare la crittografia AES del contatore come IV.
Se esiste un modo per evitare il trasporto di testi cifrati tramite SMS, evitalo. 160 caratteri sono molto limitanti. Puoi trasportare messaggi su Internet?
Se puoi evitare il tunneling tramite SMS, puoi esplorare un modello in cui l'app ha la sua chiave privata / pubblica e mantiene una chiave pubblica per ogni contatto. Quando si contatta qualcuno di nuovo, l'app invia la propria chiave pubblica, riceve una chiave pubblica dall'altra persona, ricorda quella chiave pubblica e invia il messaggio crittografato con quella chiave pubblica. Questo è ovviamente vulnerabile agli attacchi man-in-the-middle, ma potrebbe essere più facile da usare.