5

ファイルに署名できるようにしたい。つまり、受信者はファイルが実際に私からのものであり、その内容を表示できることを確認できます。C ++でそれを行う簡単な方法はありますか?

WikipediaのPGPの記事を見たところ、「ハッシュ、データ圧縮、対称鍵暗号化、そして最後に公開鍵暗号化」の途中で私を失ってしまいました。signString(string, privateykey)理想的には、関数を持ち、受信者が関数を持っているライブラリが欲しいreadSignedString(string, publickey)です。なにか提案を?

編集:

正しいアプローチを使用しているかどうかわからないので、これが私がやろうとしていることです。

デスクトップアプリケーションに簡単な著作権侵害保護を実装したいと思います。そのため、ユーザーがライセンスを購入すると、名前と電子メールを含む署名付きファイルを送信します。次に、ユーザーがファイルをインストールすると、アプリがそれを読み取ります。署名の有効性を確認し、名前/メールアドレスを([バージョン情報]ボックスに)表示します。クラッカーがこれらのファイルを生成できないようにするには、ファイルを復号化するためのキーが暗号化するためのキーと同じでないことを確認する必要があります。これを実装する簡単な方法はありますか?

4

4 に答える 4

6

OpenSSLはほとんど必要なものです。そのような機能は2つありませんが、ほぼ同じくらい簡単です。まず第一に、すべてのデジタル署名にはハッシュアルゴリズムが必要です。その理由は、ファイルを暗号化せず、ファイルハッシュのみを暗号化するためです(そうでない場合は検証に時間がかかりすぎます)。

OpenSSLを使用すると、次のようなものを使用できます。

#include <openssl/evp.h>

EVP_MD_CTX ctx;
unsigned char signature[SIGNATURE_LEN];
int signature_len;

EVP_SignInit(&ctx, EVP_sha1());
EVP_SignUpdate(&ctx, data, size);
EVP_SignFinal(&ctx, signature, &signature_len, pkey);

また、署名の検証についてもほぼ同じですが、、、およびを使用するEVP_ValidateInitだけEVP_ValidateUpdateですEVP_ValidateFinal。最後の関数は0/1を返し、検証が成功したかどうかを示します。

あなたはまだアプリケーションにキーを取得する必要があります、それをどこから読み取るか(ファイル/メモリ/証明書など)に応じて、それを行うためのかなりの数の関数があります

于 2011-08-13T10:52:29.253 に答える
2

Keyczarを使用して、ファイルの暗号化と復号化を行うこともできます。

しかし、実際には、このようにプログラムをクラックプルーフすることはできません。それは難しくなりますが、クラッカーはプログラムを分解し、それらの署名されたファイルの有効性をチェックする関数を見つけて、あらゆる種類のファイルを受け入れるように変更できます。

于 2011-08-13T11:08:21.957 に答える
0

GNUバージョンのPGPであ​​るGnuPGを確認することをお勧めします。これは、libgcrypthttp : //directory.fsf.org/project/libgcrypt/と呼ばれるOSSlibを使用しており、必要な処理を実行できるように見えます。マニュアルについては、http://www.gnupg.org/documentation/manuals/gcrypt/を参照してください。

于 2011-08-13T10:21:24.477 に答える
0

参考までに、ここでほとんどの提案を試した後、openpgpコマンドラインツールを使用することになりました。一度UPXすると非常に軽量で、クロスプラットフォームであり、必要なことを簡単に実行できます。

于 2011-08-17T18:02:04.643 に答える