2012-03-24 20 views
8

Estoy implementando algún algoritmo criptográfico en C que implica una clave de 80 bits. Una operación particular implica una rotación que cambia la clave x número de bits.Manipulación del tipo de datos de 80 bits en C

He intentado el tipo doble largo, que si no me equivoco es de 80bits, pero eso no funciona con el operador bitshift.

La única alternativa que se me ocurre es usar una matriz de caracteres de 10 elementos con algunos bucles complicados y si no.

Mi pregunta es si hay alguna manera simple y eficiente de llevar esto a cabo.

Gracias.

+0

¿Este es el algoritmo PC1? Según entiendo, ¿la versión de 80 bits se usa en otras arquitecturas (no x86) como el Motorola 6809? ¿Puedes dar una plataforma? – Mikhail

+2

Simplemente use una matriz de caracteres e implemente su propio desplazamiento/rotación - vea aquí un ejemplo: http://stackoverflow.com/questions/3918229/how-to-circular-shift-an-array-of-4-chars –

+0

Hola, no, es el algoritmo de cifrado de bloques PRESENTE. http://homes.esat.kuleuven.be/~abogdano/papers/present_ches07.pdf Estoy tratando de implementarlo en C en una placa xilinx microblaze fpga. – gamerx

Respuesta

4

Lamentablemente necesita una biblioteca bignum. Si bien los tipos de datos C nativos tienen soporte para flotantes de 80 bits, en realidad no hace lo que usted desea.

Es posible vincular algo como GMP o incluso utilizar un enfoque menos deseable como matriz de 10 caracteres o dos números largos y cortos (enteros de 64 bits y 16 bits).

Ninguno de los dos es particularmente bonito pero funcionan y si planea usarlo para cualquier cosa que no sea una clase, GMP es el camino a seguir. De lo contrario, podría terminar con un lío completo de ataques de sincronización que podría codificar, pero podría ser muy desagradable, muy rápido.

+0

Es el algoritmo de cifrado de bloques PRESENT. homes.esat.kuleuven.be/~abogdano/papers/present_ches07.pdf Estoy tratando de implementarlo en C en un tablero xilinx microblaze fpga. – gamerx

+0

¿Pretende ser extremadamente eficiente o simplemente justo? – Ben

+0

La eficiencia justa también lo hará, supongo. – gamerx

4

Hay algo un poco desordenado aquí. Si te entiendo correctamente, estás usando una CPU "suave" en el FPGA.

  1. Tradicionalmente, las personas usan el FPGA para hacer sus propios registros de desplazamiento a través de VHDL/Verilog. Este tipo de algoritmos son fáciles de implementar y muy rápidos. De vuelta en la universidad, hice esto para un proyecto de criptografía.

  2. Además, el documento que menciono habla de una clave de 128 bits. Esto sería significativamente más fácil de implementar?

+0

El documento también menciona que el algoritmo funciona tanto para la clave de 80 bits como para la de 128 bits. La primera es la versión ligera que intento implementar aquí. – gamerx

+0

Ese es un buen punto: si está usando un FPGA, puede construir el algoritmo directamente, en lugar de ejecutarlo en una CPU suave. –

Cuestiones relacionadas