2012-03-24 2 views
8

Я реализую некоторый криптографический алгоритм в C, который включает в себя 80-битный ключ. Особая операция включает поворот, сдвигающий ключ x число бит.Манипуляция типом данных 80 бит в C

Я пробовал длинный двойной тип, который, если я не ошибаюсь, - 80 бит, но это не работает с оператором бит-брейка.

Единственная альтернатива, которую я могу придумать, - использовать массив элементов с 10 элементами с некоторыми сложными циклами и if-else.

Вопрос в том, есть ли простой и эффективный способ осуществления этого.

Спасибо.

+0

Является ли это алгоритмом PC1? Я понимаю, что 80-битная версия используется на других (не x86) архитектурах, таких как Motorola 6809? Можете ли вы дать платформу? – Mikhail

+2

Просто используйте массив символов и реализуйте свой собственный сдвиг/поворот - см. Здесь пример: http://stackoverflow.com/questions/3918229/how-to-circular-shift-an-array-of-4-chars –

+0

Привет, нет, это алгоритм блочного шифрования PRESENT. http://homes.esat.kuleuven.be/~abogdano/papers/present_ches07.pdf Я пытаюсь внедрить его в C на доске xilinx microblaze fpga. – gamerx

ответ

4

К сожалению, вам нужна библиотека bignum. Хотя родные типы данных C поддерживают 80-битные поплавки, они фактически не делают то, что вы хотите.

Можно связать что-то вроде GMP или даже использовать менее желательные подходы, такие как 10-символьный массив или два числа, длинный и короткий (64-битные и 16-битные целые числа).

Ничего особенного, но они действительно работают, и если вы планируете использовать это для чего-либо, кроме класса, то это путь. GMP. В противном случае у вас может быть целый беспорядок тайм-атак, который вы можете кодировать, но он может стать действительно неприятным, реальным быстрым.

+0

Это алгоритм блочного шифрования PRESENT. homes.esat.kuleuven.be/~abogdano/papers/present_ches07.pdf Я пытаюсь реализовать его на C на доске xilinx microblaze fpga. – gamerx

+0

Вы нацелены на ультраэффективность или справедливость? – Ben

+0

Справедливая эффективность будет, как я полагаю. – gamerx

4

Здесь что-то немного испортилось. Если я правильно вас понимаю, вы используете «мягкий» процессор на FPGA.

  1. Традиционно люди используют ПЛИС, чтобы создавать свои собственные регистры сдвига через VHDL/Verilog. Такие алгоритмы довольно безболезненны для реализации и очень быстры. Вернувшись в университет, я сделал это для криптографического проекта.

  2. Кроме того, в документе, который вы упомянули, говорится о 128-битном ключе. Это было бы значительно проще реализовать?

+0

В документе также упоминалось, что алгоритм работает как для 80 бит, так и для 128-битного ключа. Первая - это облегченная версия, которую я пытаюсь реализовать здесь. – gamerx

+0

Это хороший момент: если вы используете FPGA, вы можете построить алгоритм прямо, а не запускать его на мягком процессоре. –

Смежные вопросы