2009-04-17 10 views
4

私は、製品のライセンスを受けている会社の名前、バージョン、およびいくつかの追加情報を記述したXMLファイルを持っています。この方法でライセンスを確認できますか?

私は、私は、アプリケーション内の公開鍵を出荷し、それらを確認するために、ファイルを読み込む秘密鍵を使用して、この金融商品取引法に署名し、

<Licence> 
    <Name>sdfsdf</Name> 
    <Version>1.2.1.1</Version> 
    <NumberOfServer>4</NumberOfServer> 
    <Signature xmlns="http://www.w3.org/2000/09/xmldsig#"> 
    <SignedInfo> 
     <CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315" /> 
     <SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1" /> 
     <Reference URI=""> 
     <Transforms> 
      <Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" /> 
     </Transforms> 
     <DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" /> 
     <DigestValue>M368eFB9ydifttSxX26sB6XiPV4=</DigestValue> 
     </Reference> 
    </SignedInfo> 
    <SignatureValue>TTYP6d+zESn6/2PtL5ikN+7E9u8Njm32vYVyVANC5U0EGLBwS//3yPjUoBx3glJXHClzPQBQEUi0LJNauTFvo1IBYwLjAuaYGtleti4IXpjrQCVaIudETSv5Z7oB8+C/+nsqsC26fXf9vWxvaKXJJzcep88r0wIfVe31HSd18FU=</SignatureValue> 
    </Signature> 
</Licence> 

を取得し、この

<Licence> 
    <Name>sdfsdf</Name> 
    <Version>1.2.1.1</Version> 
    <NumberOfServer>4</NumberOfServer> 
</Licence> 

のようなものを探しライセンスキーとしての正しいバージョンと "NumberOfServers"があること。

このアプローチの弱点は何ですか?

おかげ

答えて

1

ことの一つは、XMLファイルに署名する独自の方法を展開しています。私はもともとSignedXmlクラスをライセンスに使用していましたが、XMLファイルそのもの(アルゴリズムなどが指定されているので)を見るだけで、誰でも自分が行っていたことを推測するのは非常に簡単でした。

代わりに、XMLファイル全体ではなく、各データ(私の場合は顧客番号、ライセンスキー、およびバージョン)を結合し、ハッシュし、結果に署名しました。その後、もう少し難解にして、データをライセンス内の単一の「データ」要素として追加しました。

これを見るだけで、どのアルゴリズムやプロセスが使用されているかについての指標はありません。もちろん、誰でもReflectorで私のアセンブリを簡単に開き、それがどのように検証されているかを見ることができます。ただし、各ライセンスのコピーがファイルに保存されているため、お客様がライセンスを変更してより多くの機能を提供すると思われる場合は、自分のコピーを確認し、サポートを拒否したり、法的措置を講じることができます。

+0

うーん... OK ...しかし、あなたはどういうわけか、これを "疑い"なければなりませんか?あなたは本当にライセンスが実際に何のバージョンなどを実行時に把握することができますか?実行時に同じ入力を持っているときと同じ値であることを確認するだけです。 私があなたを理解していれば、私はそれが本当に私がしたいことだとは思わない。 – Riri

+1

私はまだキーペアを使用してデータに署名していますが、XMLファイル自体に署名するのではなく、私自身の方法でデータのハッシュに署名します。次に、Base64などで難読化し、1つのタグに書き出します。未処理のデータ(Customer Number、Versionなど)はXMLファイルに残っていますが、XMLファイル自体の構造を確認するだけでは検証できません(SignedXmlクラス)。 –

+0

ああ私は見る!それは良いアイデアです。 – Riri

3

このアプローチの欠点は何ですか?

そこにはあなた自身のローリングの問題があります。フィールドで試されるまで、あなたは下側を知らないでしょう。小規模なユーザーベースを使用したカジュアルなアプリケーションの場合、このでも問題ありませんが、十分な動機があれば($$$$を読んで)、それを壊す可能性があります。歴史は私たちにそれを示しています。私は個人的に真の解決策を試してみるだろう。私は過去にLM-X from X-Formationを使用しました。

+0

ありがとうございました。これは小さなアプリ用です。 <100社によってのみ使用されます。しかし、ライセンスを取得せずにダウンロードしてテストすることができるようにしたいと思います。 – Riri

5

1つの問題:攻撃者は、鍵ペアとライセンスを生成し、その秘密鍵でライセンスに署名し、アプリケーションの公開鍵を自分のものに置き換えることができます。それは遠くに聞こえるかもしれませんが、それは泥棒がするようなものです。

不正な人口統計情報(例えば、完全性の価値をまだ学んでいない子供など)に販売されているものを保護しようとする場合、ドングルはより堅牢です。

評判を気にする人や企業に販売している場合は、正当な立場を維持し、ライセンスを把握するのに十分です。

+0

しかし、私はそれについて考えて、実際のアセンブリに署名するためにキーを使用して、変更するのが難しくなるはずです。ありがとう。 – Riri

3

あなたは何に対して防御しようとしていますか?カジュアルなコピー機やより独創的なもの? (最高のものから保護することはできません。最も熟練した泥棒を守ること以上のものはありません。)人々があなたのソフトウェアを不正に使用した場合、どれくらい悪いことでしょうか?ターゲットオーディエンス、新興企業、Fortune 500企業は誰ですか?あなたの正当なユーザーをどれだけ喜んで怒らせていますか?

私は公開鍵を見つけ、16進エディタを使って別のものに置き換え、XMLを修正して再署名することを考えています。あるいは、ライセンスサーバー環境を偽の会社名で設定します(ただし、チェックすることになります)。あるいは、複数のライセンスを許可するために複数のライセンスサーバー環境を設定することもできます。

これは私には直ちに起こります。私はライセンス問題を覆すことについてほとんど知りません。あなたがこれらの問題をカバーしているかどうかはわかりません。

Shane C. Masonが指摘するように、あなたが熟練したブラックハットでない限り、あなたは脆弱性を知らないのです。私はまた、これを暗号のように扱うことを提案し、一般的に利用可能で広く信頼されているスキームを使用することを強くお勧めします。

+0

それは500のような企業によって使用されます。それは2000ドル前後の価格であり、公開鍵を変更するのが難しくなる組立にも署名するなら、私は何をしたいのか分かります。ありがとう! – Riri

関連する問題