2

C++プログラムで使用する高速の非対称暗号アルゴリズムを探しています。私たちのアプリケーションは、アーカイブに保存されている読み取り専用データ(カスタム形式、tarにいくらか似ています)にアクセスします。アーカイブインデックスを非対称に暗号化することで、そのアーカイブの変更を防ぎたいと思います(これは完全なソリューションではないことを認識しています。データは、特定の手法を使用して抽出および再パックできます)。

アーカイブ内の一部の個々のファイルは対称暗号で暗号化され、それらの暗号化キーはアーカイブインデックス(ヘッダー)内に保存されます。そのため、アーカイブヘッダーを非対称に暗号化したいのです。

暗号の要件:
1)アルゴリズムの実装はプラットフォームに依存しない必要があります。2)アルゴリズムは、自分で簡単に実装できるか、独自のアプリケーションとの静的
リンクを 可能にするライブラリ(ソースコード付き)で利用できる必要があります。つまり、GPL /LGPL/ウイルスライセンスは使用できません。MIT / BSDライセンスのコード、またはパブリックドメインコードが受け入れられます。 3)サイファーがライブラリで利用できる場合、理想的にはメモリフットプリントが小さく、実装がコンパクトである必要があります。本格的な万能暗号コレクションではなく、1つの暗号のみを実装するC /C++ライブラリを使用したいと思います。

もともとRSAを使いたかったのですが、遅すぎて役に立たないようで、選択肢も多くありません。

それで、私が何を使うことができるかについてのアドバイスはありますか?

4

5 に答える 5

4

さて、私は探していたものを見つけました、そしてそれはOpenSSLよりも優れていると思います(少なくとも私の目的では)。

2つのライブラリがあります。いくつかの暗号(RSAを含む)を実装する
libtomcryptと、bignum演算を実装するlibtommathです。どちらのライブラリもパブリックドメインであり、ハッキング/変更が簡単で、OpenSSLよりもプログラミングインターフェイスがシンプルで、(はるかに)OpenSSLよりも優れたドキュメントを備えています。
以前に見つけた古いパブリックドメインのrsaコードとは異なり、libtomcryptは新しいキーを非常に迅速に生成でき、OpenSSLで生成されたキーをインポートでき、パディングをサポートします。libtomcryptのもう1つの優れた点は、追加の依存関係がなく(たとえば、Windows用のOpenSSLではgdi32が必要)、OpenSSLよりも小さいことです。

結局のところ、暗号化にRSAを使用することにしました。なぜなら、(私には)真に非対称な代替手段がないからです。他の暗号(エルガマル、楕円曲線)のほとんどは、セッションキーが非対称に暗号化されている対称暗号化に適しているようです。これは私には適していません。このような暗号はネットワーク通信/セッションキーに適していますが、ディスク上の静的な不変データに使用するのは適切ではありません。

「RSAが遅い」については、アーカイブ形式を少し変更したため、非対称に暗号化されているのはごく一部のデータのみです。このチャンクの復号化に失敗すると、不可能ではないにしても、アーカイブインデックスの読み取りが完全に困難になります。また、RSAの遅さは、以前に使用しようとした古いコードによって部分的に間違った印象を与えたことを認めなければなりません。

つまり、質問は解決しました。解決策はRSA+libtomcryptです。RSA-RSAに代わるものは多くないため、libtomcrypt-は小さく、パブリックドメインであるため。

于 2010-02-18T03:21:34.043 に答える
2

OpenSSLがあなたに代わって仕事をしてくれるはずです。オープンソースです(Apacheライセンスなので、ライセンス要件を満たしています)。

広く使用され、十分にテストされています。

于 2010-02-11T21:08:46.183 に答える
2

カスタムRSAを使用してアーカイブに署名します。公開鍵をアプリケーションに保存し、秘密鍵を社内に保管します。これで、誰でも読み取り専用アーカイブを変更できますが、アプリケーションは変更されたアーカイブのロードを拒否します。

于 2010-02-11T21:17:29.103 に答える
2

効率的に実装された楕円曲線暗号化であるCurve25519と、特許の問題を確認してください。

それはあなたのすべての要件を満たしています。こちらをご覧ください

これを使用して、暗号化するか、単に署名することができます。

補足として:

整合性チェックには、非対称暗号化が本当に必要でない限り、MACで十分です。

于 2010-02-11T21:30:21.863 に答える
1

MD5はどうですか?

はい、MD5が壊れていることを認識しています。-しかし、ほとんどの実用的なアプリケーションでは、これは関係ありません。
特に、変更されたデータが特定のデータ形式で有効であり、正しいMD5を持っている必要がある場合

編集:
MD5は、保存されているデータを変更できない(または少なくとも検出できる)ことを確認したいが、データを非表示にしない場合に適しています。データと一緒にアプリにキーが必要な場合は、いつでも抽出できることに注意してください。キーを非表示にする手法があります。一般的な手法は、簡単にリンクできるアイコンなどの静的リソース内にキーを配置することです。

于 2010-02-11T21:24:12.967 に答える