2012-03-24 12 views
8

私はCで80ビットのキーを含む暗号アルゴリズムを実装しています。 特定の操作では、キー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

こんにちは、これはPRESENTブロック暗号アルゴリズムではありません。 http://homes.esat.kuleuven.be/~abogdano/papers/present_ches07.pdf 私は、Cでxilinx microblaze fpgaボードに実装しようとしています。 – gamerx

答えて

4

悲しいことに、bignumライブラリが必要です。 Cのネイティブデータ型は80ビットの浮動小数点数をサポートしていますが、実際には必要としません。

GMPのようなものをリンクすることも、10文字の配列や長短の2つの数字(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上で「ソフト」なCPUを使用しています。

  1. 伝統的に、人々はFPGAを使用して、VHDL/Verilogを通して独自のシフトレジスタを作成します。このような種類のアルゴリズムは、実装するのが非常に簡単で非常に高速です。大学に戻ると、これは暗号化プロジェクトのためのものです。

  2. また、上記の記事では128ビットのキーについて説明しています。これは実装がはるかに簡単ですか?

+0

この論文では、アルゴリズムが80ビットと128ビットのキーの両方で機能することも述べています。前者はここで実装しようとしている軽量バージョンです。 – gamerx

+0

これは良いことです:FPGAを使用している場合は、アルゴリズムをソフトCPU上で実行するのではなく、その中にアルゴリズムを組み込むことができます。 –