2012-03-24 5 views
8

80 비트 키가 포함 된 C에서 일부 암호화 알고리즘을 구현 중입니다. 특정 작업에는 키 x 비트 수를 이동시키는 회전이 포함됩니다.C에서 80 비트 데이터 유형 조작

필자는 실수가 80bits가 아니라 비트 시프트 연산자에서 작동하지 않는 long double 유형을 시도했습니다.

제가 생각해 낼 수있는 유일한 대안은 복잡한 루핑과 if-else가있는 10 개 요소 char 배열을 사용하는 것입니다.

제 질문은 이것을 수행하는 몇 가지 간단하고 효율적인 방법이 있는지입니다.

감사합니다.

+0

PC1 알고리즘입니까? 제 생각에 80 비트 버전은 Motorola 6809와 같은 다른 (x86이 아닌) 아키텍처에서 사용됩니까? 플랫폼을 줄 수 있습니까? – Mikhail

+2

char 배열을 사용하고 자신 만의 shift/rotate를 구현하십시오. 예를 보려면 다음을 참조하십시오. http://stackoverflow.com/questions/3918229/how-to-circular-shift-an-array-of-4-chars –

+0

안녕하세요, 아니요. 현재 블록 암호화 알고리즘입니다. http://homes.esat.kuleuven.be/~abogdano/papers/present_ches07.pdf 자일링스 마이크로 블레이즈 FPGA 보드에서 C로 구현하려고합니다. – gamerx

답변

4

슬프게도 bignum 라이브러리가 필요합니다. C 네이티브 데이터 형식은 80 비트 부동 소수점을 지원하지만 실제로 원하는대로 할 수는 없습니다.

GMP과 같은 것을 연결하거나 10 문자 배열 또는 길고 짧은 두 개의 숫자 (64 비트 및 16 비트 정수)와 같은 덜 바람직한 접근법을 사용할 수도 있습니다.

어느 쪽도 특히 예쁘지 않지만 작동하며, 수업 이외의 용도로 사용하려는 경우에는 GMP을 사용해보세요. 그렇지 않으면 당신은 코딩 할 수있는 타이밍 공격의 전체 엉망으로 끝날 수 있지만 정말 재밌고 진짜 빠를 수 있습니다.

+0

그것은 PRESENT 블록 암호 알고리즘입니다. homes.esat.kuleuven.be/~abogdano/papers/present_ches07.pdf 자일링스 마이크로 블레이즈 FPGA 보드에서 C로 구현하려고합니다. – gamerx

+0

당신은 매우 효율적이거나 공정하게 목표로 삼고 있습니까? – Ben

+0

내가 생각하기에 공정한 효율이 좋을 것이다. – gamerx

4

약간 엉망이 있습니다. 내가 너를 올바르게 이해한다면, FPGA에서 "소프트"CPU를 사용하고있는 것이다.

  1. 전통적으로 사람들은 FPGA를 사용하여 VHDL/Verilog를 통해 자신의 시프트 레지스터를 만듭니다. 이러한 종류의 알고리즘은 구현하기가 상당히 쉽지 않으며 매우 빠릅니다. 대학으로 돌아가서 나는 이것을 암호화 프로젝트에 사용했다.

  2. 또한, 언급 한 논문에서는 128 비트 키에 대해 이야기합니다. 이것은 구현하기가 훨씬 쉬울까요?

+0

이 논문은 알고리즘이 80 비트와 128 비트 키 모두에서 작동한다고 언급했다. 전자는 여기서 구현하고자하는 경량 버전입니다. – gamerx

+0

좋은 지적입니다. FPGA를 사용하는 경우 소프트 CPU에서 실행하는 대신 알고리즘을 바로 빌드 할 수 있습니다. –