2010-11-08 23 views
5

Busco a un sistema de cifrado conmutativa - es decir¿Un cifrado conmutativo?

E(K₁,E(K₂,P)) = E(K₂,E(K₁,P)) 

pero no es asociativa - es decir

E(K,P) ≠ E(P,K) 

Eso descarta XOR, que de otro modo habría sido aceptable.

Sería preferible un cifrado simétrico, pero también funcionaría un cifrado asimétrico.

El protocolo básico Quiero aplicar es:

  1. Alice tiene una lista de fichas (enteros de 32 bits) y se encripta cada ficha con la misma clave (K0)
  2. Alice envía la lista de tokens encriptados a Bob
  3. Bob aleatoriza la lista, encripta cada token con una clave separada (K1 - Kn), etiqueta cada token y devuelve la lista a Alicia.
  4. Alice descifra cada ficha con K0, dejándola una lista de tokens, cada cifrado con una clave separada (K1 - Kn)
  5. Algún tiempo después, Bob envía Alice una clave para una etiqueta específica (Kx)
  6. Alice descifra el token con Kx que le da el texto en claro para el token etiquetado x
  7. Bob puede ver el texto plano, por lo que no debe poder derivar K0 de la información que le dieron anteriormente.

¿Alguien puede sugerir un cifrado que pueda usar y también señalarme una implementación de ese cifrado?

Tengo un conocimiento de los protocolos y aplicaciones criptográficas, pero realmente no entiendo las matemáticas de la mayoría de los cifrados que hay. Sin embargo, las guías matemáticas paso a paso estarían bien.

Planeo implementar esto en Clojure por lo que cualquier biblioteca de Java también es buena. Sin embargo, cualquier código es bueno porque entiendo el código.

+0

¿Hay algún motivo serio por el cual Alice no puede simplemente retener K0 y descifrar el token con K0 solo después de descifrarlo con la clave recibida de Bob? –

+0

@Lunatic Experimentalist: Sí. Esta es solo una descripción de protocolo simplificada. Lo que sucede después es que Alice genera un montón de claves y encripta cada token ella misma. Cada token ahora está doblemente encriptado. Si Bob quiere revelar el token X a Alice, le envía su Kx. Si Alicia quiere revelar el token X a Bob, ella le envía su Kx. – camh

Respuesta

3

Parece que estás intentando implementar "Mental Poker" (o si no, deberías buscar la investigación, ya que es análogo a tu problema).

El algoritmo de SRA tiene las propiedades que desea. Es un poco difícil encontrar información, pero es esencialmente solo RSA excepto que ambos los exponentes e y d se mantienen en secreto. Trivialmente:

(P e1) e2 == (P e2) e1

+0

He leído un montón de cosas sobre póker mental, pero todas asumen una baraja de cartas estándar 52/54 conocida por todos los jugadores. Estoy trabajando con un mazo desconocido de tamaño arbitrario (desconocido en el sentido de que se conocen todas las cartas disponibles, pero las que están en el mazo no son conocidas por el no propietario). Desafortunadamente, mi habilidad matemática no es tan alta como puedo adaptar lo que veo sobre el póker mental. Gracias por la referencia a SRA. Lo buscaré. – camh

0

continuación hace referencia a mi solución hobbiest usando mi propio programa de cifrado en C#. el programa y la fuente son gratuitos y están disponibles.

¿Recuerdas el 'rompecabezas de caja cerrada' que se encuentra en un podcast de SECURITY NOW?

aquí está el episodio ... Episodio # 33 | 30 de marzo de 2006 | 43 min. simétricas de bloque cifrados

https://www.grc.com/sn/sn-033.txt

Steve dice ... ... Leo y contesto de la semana pasada Puzzler/enigma que explora la idea de usar dos privadas one-time pad "claves", como dos candados, para transmitir de forma segura un mensaje entre dos partes, ninguno de que tendría la clave del otro. Luego continuamos nuestro recorrido continuo de tecnología fundamental cripto por que describe el funcionamiento de sistemas de cifrado simétrico de bloques ...

Steve y Leo de acuerdo en que un espía ver texto cifrado de ALICE antes y después de de encripción para XOR los dos juntos y derivamos su llave secreta Sin embargo, si se utiliza un cifrado complejo y conmutativo que no usa el simple XORing para encriptar, entonces I cree que el intercambio de claves sería seguro y el intercambio de claves funcionaría.

por ejemplo ... BOB encripta el mensaje con su clave. ALICE encripta el mensaje de arriba cifrado de BOB con su clave. ALICE envía de vuelta el mensaje cifrado a BOB. BOB descifra el mensaje anterior de ALICE con su clave. BOB envía arriba a ALICE. ALICE descifra arriba con su clave. ALICE ahora puede leer el texto descifrado original de BOB y no necesitan para intercambiar claves. Un ataque de espía no funcionará si el algoritmo no es un simple 'xor'ing de texto sin formato y clave.

este cifrado es un algoritmo complejo conmutativo.

comenzando con el archivo de texto del bloc de notas que contiene un carácter, una 'm'. m es hexadecimal 6d 01101101.  es hex c2 11000010 está 'm' encriptado por bob y luego enviado a alice. ø es hexadecimal d8 11011000 es el cifrado de alice de '' que bob descifra a '£' y lo envía a alice. £ es hex a3 10100011 que alice descifra a 'm' con su clave. m es el resultado del descifrado de alice un espía ve el msg de alice antes de su cifrado. el espía ve el mensaje de ø alice después de su cifrado. the eavesdropper xors  y ø. 11000010 '' 11011000 'ø' 00011010 el resultado xor de eavesdropper = 1a en hexadecimal. si un ataque de espía trabajó, habría encontrado 'E' hex 45 01001001 que es la primera letra de

clave de alice.

esto parece un cambio de clave más simple que PGP etc. Todo lo que se necesita es que las dos partes usen el mismo programa criptográfico y acuerden un autenticador.

Confieso ser un hobbiest. Si alguien quiere el programa WINDOWS C# .NET y/o el código fuente del cifrado, pueden tenerlo.

a continuación se muestra un ejemplo con teclas aleatorias más largas.

TEXTO SENCILLO esto es una prueba.

BOB CLAVE kZtOfS0kKqcRLjTNPh7OjcJKZZFLjmm5OVm02YlrBQN0zI9SxOD1zJjQcpetUbX

BOB CIPHER TEXTO A ALICE. 1IÎ.8Ío # "ëìAùJ'

ALICE CLAVE O1yfuV7MpX3n4wtefUhr6YctRaeCcrrzH7LqLNRUQCMVZuL5Mr0Bw3qMeIT92hg

ALICE CIPHER TEXTO DE BOB μRÖ³ # ioO, fzkÆaå

BOB decodifica ALICE ARRIBA QUE = por debajo. øqqøð < ª> P & @ <, Y ENVÍA POR ENCIMA DE ARRIBA A ALICE, QUE ALICE DECODES RENDIMIENTO ... esta es una prueba.

+0

para autenticar, simplemente agregue las contraseñas acordadas en texto sin formato dentro del mensaje pero no como parte del texto cifrado del mensaje. necesario solo para los últimos 2 intercambios. por ejemplo, "μRÖ³ # ïÓO, fzkÆaå apassword" – user1477194

0

Estoy haciendo algo similar y estoy usando AES en modo OFB (salida de realimentación). En este modo, un IV (valor aleatorio conocido públicamente) se cifra con AES utilizando alguna clave. El resultado de esto es XORed con sus datos. La salida (antes de ser XORed con los datos) se vuelve a cifrar para obtener otra salida a XOR con más datos. Esto no solo es conmutativo sino recíproco en el sentido de que los algoritmos de cifrado y descifrado son idénticos. http://en.wikipedia.org/wiki/Block_cipher_mode_of_operation#Output_Feedback_.28OFB.29