2012-03-24 29 views
8

Tôi đang triển khai một số thuật toán mã hóa trong C có khóa 80 bit. Một hoạt động cụ thể liên quan đến việc xoay chuyển số x khóa bit.Thao tác 80 bit datatype trong C

Tôi đã thử loại gấp đôi dài nếu tôi không sai là 80 bit, nhưng điều đó không hoạt động với toán tử bitshift.

Cách thay thế duy nhất tôi có thể đưa ra là sử dụng mảng char 10 phần tử với một số vòng lặp phức tạp và nếu có.

Câu hỏi của tôi là liệu có một số cách đơn giản và hiệu quả để thực hiện điều này.

Cảm ơn.

+0

Đây có phải là thuật toán PC1 không? Sự hiểu biết của tôi là phiên bản 80bit được sử dụng trên các kiến ​​trúc khác (không phải x86) như Motorola 6809? Bạn có thể cung cấp cho một nền tảng? – Mikhail

+2

Chỉ cần sử dụng một mảng char và thực hiện thay đổi/xoay của riêng bạn - xem tại đây để biết ví dụ: http://stackoverflow.com/questions/3918229/how-to-circular-shift-an-array-of-4-chars –

+0

Xin chào, không phải là thuật toán mã hóa khối PRESENT. http://homes.esat.kuleuven.be/~abogdano/papers/present_ches07.pdf Tôi đang cố gắng triển khai tính năng này trong C trên bảng vi mạch fblga xilinx microblaze. – gamerx

Trả lời

4

Đáng buồn là bạn cần thư viện bignum. Trong khi các kiểu dữ liệu gốc C có hỗ trợ cho các bit nổi 80 bit thì nó không thực sự làm những gì bạn muốn.

Có thể liên kết một cái gì đó như GMP hoặc thậm chí sử dụng một phương pháp tiếp cận ít hấp dẫn hơn như 10 mảng ký tự hoặc hai số dài và ngắn (số nguyên 64 bit và 16 bit).

Không có gì đặc biệt đẹp nhưng chúng hoạt động và nếu bạn định sử dụng nó cho bất cứ thứ gì ngoài lớp học, thì GMP là cách để đi. Nếu không, bạn có thể kết thúc với một loạt các cuộc tấn công thời gian mà bạn có thể mã xung quanh nhưng nó có thể nhận được thực sự khó chịu, thực sự nhanh chóng.

+0

Đó là thuật toán mã hóa khối PRESENT. homes.esat.kuleuven.be/~abogdano/papers/present_ches07.pdf Tôi đang cố gắng triển khai nó trong C trên một bảng fblga microblaze xilinx. – gamerx

+0

Bạn đang nhắm đến siêu hiệu quả hay công bằng? – Ben

+0

Hiệu quả công bằng sẽ làm tốt như tôi giả sử. – gamerx

4

Có điều gì đó hơi rối tung ở đây. Nếu tôi hiểu bạn một cách chính xác, bạn đang sử dụng một CPU "mềm" trên FPGA.

  1. Theo truyền thống, mọi người sử dụng FPGA để tự đăng ký thay đổi thông qua VHDL/Verilog. Những loại thuật toán này khá khó thực hiện và rất nhanh. Trở lại trường đại học tôi đã làm điều này là cho một dự án mật mã.

  2. Hơn nữa, bài báo bạn đề cập đến nói về khóa 128 bit. Điều này sẽ dễ dàng hơn để thực hiện?

+0

Bài báo cũng đề cập rằng thuật toán hoạt động cho cả khóa 80 bit và 128 bit. Trước đây là phiên bản nhẹ mà tôi đang cố gắng triển khai ở đây. – gamerx

+0

Đó là một điểm tốt: nếu bạn đang sử dụng một FPGA, bạn có thể xây dựng các thuật toán ngay trong, thay vì chạy nó trên một CPU mềm. –