49

一部のソフトウェアが秘密鍵を隠して、簡単に発見できないようにする方法については、しばらく前から疑問に思っていました。ほんの数例:

  • DVDプレーヤーソフトウェアはCSSキーを隠します
  • シリアル番号/登録コードを備えたソフトウェアは、シリアル番号の検証に使用されるキー/ハッシュを非表示にします

明らかに、これらのプログラムは、バイト[]にキーを入れるだけではなく、キーを盗んだり、独自のシリアル番号を生成したりするのを簡単にします。

これらのキーを簡単に見つけられないように隠すために、どのような戦略が使用されていますか?

4

11 に答える 11

39

これらの秘密鍵が簡単に発見された理由は、ソフトウェアに隠されていたためです。

ソフトウェアに秘密を隠すことは絶対に避けてください-難読化はこれまでのところしか得られません。これを自問してみてください。逆アセンブル、ユーザーモード、カーネルモードのデバッガーに完全にアクセスでき、日中の仕事がない人から、ソフトウェアのキーをどれだけうまく隠すことができますか?ひびが入るのは時間の問題です。

于 2009-04-18T19:35:00.127 に答える
13

キーをどこかに隠して、必要なときに復号化するだけです。キーを「安全に」使用することは複雑な部分です。クラッカーは、復号化されたキーを使用してダンプする場所にブレークポイントを設定する可能性があります。彼らはコードをスキャンして、既知の暗号化アルゴリズムを使用していることを示すパターンを探します (ほとんどのアルゴリズムには事前に計算されたテーブルがあります)。などなど

そのため、ソフトウェア全体の実行可能ファイルを分析しにくくする必要があります。これには、実行可能なパッカー、仮想マシンでのコードの実行、整合性チェックなどを使用します。これはすべて、コードのデバッグと変更を遅くするためです。

ここにいるほとんどの人が指摘しているように、誰も止めることはできません。ただ遅くするだけです。クラッカー フォーラムに行って、鍵の隠蔽の問題について提案を求めます。あなたがうまく尋ねれば、彼らはおそらく役に立ちます。

ps。公開鍵暗号は鍵を隠すことにはなりませんが、ライセンス スキームを使用している場合、鍵ジェネレーターの作成が難しくなる (または理論的に不可能になる) 可能性があります。

于 2009-04-18T23:02:14.593 に答える
6

肝心なのは、できません。理由については、ここで他のコメントを参照してください。PGP / GPGのような暗号化ソフトウェアでさえ、キーをファイルに保存し、それらのファイルを安全な場所、またはその他の安全な場所にあるフラッシュドライブに保管するように強く求めます。実行可能コードの一部として保存されているキーが検出されます。

実際、通常の操作の一部としてクライアントによって復号化されるクライアントマシン上で何かを暗号化しようとしている場合、それはばか者の用事でもあります。クライアントマシンは本質的に安全ではなく、データに対して何ができるかを制御することはできません。

代わりに、認証を試みている場合は、サーバーへのログインを使用したインターネットベースの認証、またはソフトウェアの検証に使用される生成されたKeyCodeを確認してください。

公開鍵と秘密鍵のペアの一部としての秘密鍵は、保護可能なデータファイルに保存する必要があります。対称鍵は、セッション鍵としてその場で生成してから破棄する必要があります。コンピューターにシークレットキーまたはセッションキーを持っている人は誰でもそれを発見でき、あなたの意図に反してそれを使用できると常に想定してください。

詳細については、BruceSchneierによる「 AppliedCryptography 」をお読みください。

于 2009-04-18T19:53:46.230 に答える
5

鍵を永遠に隠すことはできません。しかし、あなたは確かにそれを見つけるのを難しくすることができます. いくつかのアプローチは、メモリ内のキーを暗号化する、相互にチェックされる複数のコピー (おそらく別の方法で暗号化されたもの) を保持する、アクセスできるようにダミー コピーを残す、キーを奇妙な形式で保存する、などです。あなたのキーが必要ですが、少なくともカジュアル/経験の浅い攻撃者を思いとどまらせることができます。

于 2009-04-18T19:45:29.777 に答える
1

ライセンスを検証するために必ずしもキーが必要なわけではありません。

しかし、その事実を無視すると、キーは別の関数の結果である可能性もあります。実際に特定のキー値を格納するのではなく、その場でキーを生成する関数があります(常に同じ結果)。不可能ではありませんが、値を探す必要がなくなったため、見つけるのははるかに困難ですが、それが方程式であることを理解する必要があります。

于 2009-04-18T19:35:54.883 に答える
1

ソフトウェアの開発を開始したとき、日付の付いたライセンスファイルを作成しました。そして、私たちのソフトウェアを購入することに興味を持っている人はそれほど多くないことに気づきました。そこで、無料でプレゼントすることにしました。より多くの人々が少なくとも私たちの傑作を試してみることを気にし始めました。最後に、ソフトウェアをオープンソース化しました。より多くのユーザーがそれを使い始めました。今では、これらのユーザーの少数が有料の顧客になることを願っています(つまり、製品サポートを購入したり、カスタマイズを求めたりします)。

肝心なのは、誰かがあなたのソフトウェアをクラックしたいのなら、とにかく彼/彼女はそれをするだろうということです。この隠された秘密鍵でそれを保護しようとしてあなたの時間を無駄にすることは本当に価値がありますか?

于 2009-04-18T19:42:56.647 に答える
0

コードに秘密鍵を隠すことは、本当に安全ではありません。お気づきかもしれませんが、DVDやほとんどのソフトウェアのシリアル番号登録は、毎日ハッキングされています。本当に何かを保護したい場合は、公開鍵暗号化を使用する必要があります。

于 2009-04-18T19:38:08.390 に答える
-2

これが、DVD と BluRay が急速にクラックされた最大の理由の 1 つだと思います。平均的な人がホーム ムービーをデジタル コピーできないようにする唯一の方法は、コンピューターでの使用が許可されておらず、認定されたプレーヤーでのみ使用できるメディアを作成することだと思います。コンピューターやラップトップで映画を見たいと思っていた市場の一部を切り取りますが、おそらくもう少しの間、完璧なデジタルリッピングをやめ、平均的な人がそれを行うことができなくなるでしょう.

于 2009-04-18T19:50:49.747 に答える