2012-03-24 24 views
8

Wdrażam algorytm kryptograficzny w C, który obejmuje klucz 80-bitowy. Poszczególne operacje obejmują obrót przesuwając klucz x liczba bitów.Manipulowanie typem danych 80-bitowych w C

Próbowałem długi podwójny typ, który jeśli nie jestem zły jest 80bit, ale to nie działa z operatorem bitshift.

Jedyną alternatywą, jaką mogę wymyślić, jest użycie tablicy elementów składających się z 10 elementów z pewną skomplikowaną pętlą i, jeśli nie.

Moje pytanie brzmi, czy istnieje prosty i skuteczny sposób realizacji tego.

Dzięki.

+0

Czy to jest algorytm PC1? Rozumiem, że wersja 80-bitowa jest używana w innych architekturach (a nie w architekturze x86), takich jak Motorola 6809? Czy możesz dać platformę? – Mikhail

+2

Po prostu użyj tablicy znaków i wykonaj własną zmianę/obróć - zobacz tutaj: http://stackoverflow.com/questions/3918229/how-to-circular-shift-an-array-of-4-chars –

+0

Cześć, nie jest to OBECNY algorytm blokowy szyfru. http://homes.esat.kuleuven.be/~abogdano/papers/present_ches07.pdf Próbuję zaimplementować go w C na płycie FPGA xilinx microblaze. – gamerx

Odpowiedz

4

Niestety, potrzebujesz biblioteki bignum. Chociaż rodzime typy danych C obsługują 80-bitowe zmienne, to tak naprawdę nie robią tego, co chcesz.

Możliwe jest połączenie czegoś podobnego do GMP, a nawet użycie mniej pożądanego podejścia, takiego jak 10-znakowa tablica lub dwie liczby długie i krótkie (liczby całkowite: 64-bitowe i 16-bitowe).

Żadne z nich nie jest szczególnie ładne, ale działają i jeśli planujesz użyć tego do czegokolwiek poza klasą, jest to jedna z wielu dróg. W przeciwnym razie mógłbyś skończyć z całą masą ataków na taktowanie, które mógłbyś zakodować, ale mógł stać się naprawdę nieprzyjemny, naprawdę szybki.

+0

To jest OBECNY algorytm blokowy szyfru. homes.esat.kuleuven.be/~abogdano/papers/present_ches07.pdf Próbuję zaimplementować go w C na płycie FPGA xilinx microblaze. – gamerx

+0

Czy dążysz do ultra wydajnego lub sprawiedliwego? – Ben

+0

Wydaje się, że uczciwa wydajność też się uda. – gamerx

4

Jest tu coś niedobrego. Jeśli dobrze cię rozumiem, używasz "miękkiego" procesora na FPGA.

  1. Tradycyjnie ludzie używają FPGA do tworzenia własnych rejestrów przesuwnych za pośrednictwem VHDL/Verilog. Tego rodzaju algorytmy są dość bezbolesne w implementacji i bardzo szybkie. Po powrocie na uniwersytet zrobiłem to dla projektu kryptografii.

  2. Co więcej, wspomniany artykuł mówi o kluczu 128-bitowym. Byłoby to znacznie łatwiejsze do wdrożenia?

+0

W pracy wspomniano również, że algorytm działa zarówno na klucz 80-bitowy, jak i 128-bitowy. Ta pierwsza to lekka wersja, którą próbuję tutaj zaimplementować. – gamerx

+0

To dobry punkt: jeśli używasz FPGA, możesz zbudować algorytm bezpośrednio, zamiast uruchamiać go na miękkim procesorze. –