È possibile utilizzare qualsiasi crittografia simmetrica che funzioni generando un flusso di byte dipendente dalla chiave, che viene quindi sottoposto a XOR con i dati da crittografare. Questo è il caso della maggior parte dei codici a flusso ; questo vale anche per un codice a blocchi in modalità CTR (che praticamente trasforma un codice a blocchi in un flusso cifra).
Tali cifrari sono un po 'delicati da usare, perché non dovrai mai riutilizzare un determinato flusso dipendente dalla chiave (sarebbe il famigerato "doppio pad"). Ciò significa che verrà utilizzata una determinata chiave per crittografare solo il messaggio one o che utilizzi un codice di flusso con un vettore di inizializzazione che necessiterà di una propria gestione. Fondamentalmente , nel tuo caso, questo significa che ai potenziali attaccanti non dovrebbe essere permesso di osservare E (k1, t) , E (k2, t) e E (k1, E (k2, t)) , perché ciò consentirebbe loro di recuperare t (cioè da XOR tutti e tre i flussi insieme).
Se il tuo scenario specifico rende inapplicabile la soluzione di cifratura del flusso, allora dovresti usare più soluzioni esoteriche che non sono standard, quindi non possono essere raccomandate nella pratica (ma vanno bene per la ricerca). Ad esempio, dati Parametri del gruppo Diffie-Hellman (un modulo p e un generatore g che è tale che g q = 1 mod p per un primo q che divide p-1 ), un elemento di sottogruppo (un g x per alcuni interi x ) può essere "criptato" con la chiave a aumentandola alla potenza a ( E (a, h) = h a mod p ). "Decryption" implica il sollevamento per alimentare 1 / a mod q (modulo inverso q è calcolato con algoritmo euclideo esteso ). Con questo algoritmo di "crittografia", ottieni la commutatività che cerchi ( E (a, E (b, h)) = E (b, E (a, h)) ) E puoi pubblicare E (a, h) , E (b, h) e E (a, E (b, h)) senza rivelare h .
... ma questa è solo una variante di Diffie-Hellman. La buona domanda è quindi: perché vuoi la tua cosa di crittografia commutativa? Che cosa stai cercando di fare, che Diffie-Hellman non può fare?