質問

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

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

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

もともと私はRSAを使用したかったのですが、それは単純に遅すぎて役に立つように見え、多くの選択肢はありません。

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

役に立ちましたか?

解決

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

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

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

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

つまり、質問は解決しました。ソリューションはRSA + libtomcryptです。 RSA- RSAおよびlibtomcryptに代わるものはあまりないためです - それは小さくてパブリックドメインにあるためです。

他のヒント

OpenSSLはあなたのために仕事をする必要があります。それはオープンソースです(Apacheライセンスなので、ライセンス要件を満たします)。

広く使用されており、よくテストされています。

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

Curve25519をチェックしてください。これは、効率的に実装された楕円曲線Crytpographyです。

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

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

サイドノートとして:

整合性チェックのために、実際にアシュメトリック暗号化が必要な場合を除き、Macは十分である必要があります。

MD5はどうですか?

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

編集:
MD5は、保存されたデータを変更できないことを確認するだけで、データを非表示にしないことを確認する場合に適しています。データに沿ってアプリにキーが必要な場合は、いつでも抽出できることに注意してください。キーを隠すためのテクニックがあります - 人気のあるものは、簡単にリンクできるアイコンなどの静的リソースの中に置くことです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top