一意のハードウェア ID (CPU ID、イーサネット MAC アドレス、またはハードディスクのシリアル番号) に基づいてシリアル番号を生成するための簡単なスキーム/アルゴリズムを取得したいと考えています。
スキームが一方向にのみ機能するようにしたいので、クライアント マシン上のアプリケーションはシリアル番号を確認できますが、シリアル番号を生成することはできません。(したがって、クラックするのは簡単ではありません)。
おそらくほとんどの人は、RSA 公開鍵と秘密鍵のペアの暗号化を推奨するでしょう。これは十分に確実に機能します。クライアントは RSA 秘密鍵を持っていないため、シリアル番号を「生成」できません。
しかし、RSA 署名の主な問題は、大きすぎることです。署名のサイズは、RSA キーのサイズ ( RSA 署名のサイズ? )に応じて 128 または 256 バイトです。
- シリアル番号をメールから登録フォームへの単純なコピーペーストにしたいので、最大64文字、理想的には32バイトです。
さて、あなたはおそらく、この種の保護は総当りの種類のハッキングに対して十分ではないと言うでしょう - 正しいシリアル番号を決定するためにすべての組み合わせを試すだけです.
しかし、通常、このようなブルート フォース クラッキング アプリケーションを作成するには、「高価な」ハッカーまたはハッカー チームを雇う必要があると言えます。
また、次のバージョンのアプリケーションでシリアル番号生成アルゴリズムを変更したり、マルチラウンド パスを使用してブルート フォースを劇的に遅くしたりすることも可能だと思います。
ベースとして、プレーン C または C++ (C# ではない)、できれば Windows / wincrypt.h または既存のプレーン C ソースコード (できれば巨大なサードパーティライブラリではない) を使用することをお勧めします。
署名のサイズが 32 文字になるように RSA 公開鍵と秘密鍵のペアを作成することはできますか?