2017-02-24 7 views
0

私が働く会社は、登録プロセスを作成したいと思います。最終的には、ユーザーは自分の製品をアクティブにするためにキーを入力する必要があります。可能な限り小さなデジタル署名でCに署名する#

私はすでにキーを生成する方法を説明しているソースをほとんど探していませんでした。そのうちの1人(登録データとハードウェア情報を組み合わせたもの)を取ってデータのハッシュを秘密鍵で暗号化し、そのすべてに対してbase32エンコーディングを計算することを提案しました(How to generate and validate a software license key?)。

したがって、プログラムにキーが入力されると、base32をデコードし、データを超えてハッシュを計算し、公開鍵を使って鍵の署名が有効であることを確認しますアウトカンパニー)。

私はBouncy城​​について知っていますが、実際にはSchnorrの実装はありません(実際には、C#のif実装の多くは見つかりませんでした)。小さな署名を作るための私の努力はすべて失敗しました(私が作成した最小の署名は56バイトでした)。

したがって、データ+シグネチャが64バイトと仮定します。私のベース32の文字列は、64 * 8/5になります。これは、103文字の余分な区切り文字で区切られ、読みやすくするために、必要な場合には読み込みできないものがあります。

私は何が欠けていますか? 32文字のキーを作成する必要がある場合は、20バイトのデータ+ハッシュが必要です。

どうすればよいですか?

.net暗号化やBouncy Castle(C#のマニュアルや例がない)を使用する例が参考になります。

答えて

0

私はed25519が少なくとも私が読んだものからschnorrに基づいていることを知りました。 ed25519の実装を見つけることはそれほど難しくありませんでした。私はlibsodium(C++ライブラリ)を使用するlibsodium.netを見つけました。これはC++ライブラリをラップしています。

libsodium.netの完全に管理されたバージョンであるNaCl.Net(salt.net)と呼ばれるものもあります。 NaCl.Netのドキュメントが見当たらず、期待通りに機能しません(APIはlibsodium.Netのものとは異なります)。

とにかくlibsodium.Netを使って、私は小さなメッセージを暗号化し、小さな暗号化されたメッセージを得ることができました。

たとえば、4バイトメッセージの場合、20バイトの暗号化メッセージが得られます。 8バイトメッセージの場合は、24バイトのメッセージが表示されます。 Curve25519 暗号化:

余分な16のバイトがすべてでは悪くない

アルゴリズム

鍵交換の詳細を(キーサイズは、このalgorythmに良いことがあり256ビットを意味する32バイト、です): XSalsa20ストリーム暗号 認証:Poly1305 MAC

メッセージに署名すると大きな署名付きメッセージが作成されますが、必要はありません。 データのハッシュを計算し、暗号化を使用してキーを生成します。

キーが受信されると、そのキーは復号化され、指定されたハッシュはマシン上で計算されたハッシュと比較されます。 https://github.com/garethrbrown/.net-licence-key-generator/tree/master/AppSoftware.LicenceEngine.KeyVerification 私はすでにそれ、および必要性を見て、次のプロジェクトはまた、鍵の生成を助けることができる

+0

それも助けることができるかどうかを確認するために、しかし、私はすでに良い解決策を持っています – Saragani