1

コードを使用して 3 つのピースのパズルを作成し、暗号化された文字列、その文字列専用に構築された関数 (復号化された形式の文字列は実際にはコード/実行する命令)。そして 3 番目の最も重要な部分は、関数の実行を可能にするコンテキストであり、その環境状態は偽造できないものでなければなりません。そのため、関数は一致する文字列に対して 1 回だけ実行され、環境状態は 1 回だけ実行され、その後は期限切れになります。欠けている部品が一つでも「...刻むことができない」(もちろん、すべての部品が重要であるため、「機能するため」のように刻むことはできません)完璧な時計メカニズムである必要があります。

ここでは、eval のようなものが存在するスクリプト言語について話していますが、これは一般的な手法として適用できます。

あらゆる種類のメモリ状態、変数、ランダムかどうかに基づくある種の「ドミノ」効果を使用すると、「リーク効果」に似たものを作成して、コードのビットを構造化された (ただし非表示の) 場所に置くことができます。最後に、奇妙なツールを「コードファネル」として使用して、すべてを実行フローに配置します。

私はこのようなことを何も知らないので、私の言葉は、あらゆる種類の読みやすく理解しやすい形を与えることができるように作り上げられたものです.

私の質問はまさにこれについてです...それは可能ですか?私が得ることができる何か助けはありますか?どこかのアイデアとして?そのような効果を保持できるものを今のところ見つけられないからです。

そしてもちろん、誰も私のコードに興味を持っていない、または私がパラノイアに苦しんでいると言うことができるので、あなたは私がそのようなことを求める理由を見つけることができないかもしれません. しかし、それでもそこに理由があるかもしれないと考えてください。いや、それが知りたい理由なのだろう。

そして、「これはディスカッション フォーラムではないことが明確に指定されている」などの結論に黙って飛びつかないでください。そして、真面目な数学や堅実なアルゴリズム的思考など、多くのことについてほとんど経験がないので、助けを求めて泣いています. ですから、この問題を考慮してくださる方々に感謝します。

4

3 に答える 3

1

これは、非常に基本的なレベルで、本質的に不可能です。

誰かに情報 (コード) を提供したいとします。1 つの特定の状態 (よく定義していない状態) でコードを 1 回実行できるようにする必要があります。ただし、そのコードを検査したり、他の状況で実行したりできるようにしたくはありません。不可能。

その人のマシン上の (コードを実行する) プログラムは、コードを実行できるようにするために、コードを検査できなければなりません。したがって、そのマシン上の他のプログラムもコードを検査できます。

コードを暗号化して、任意のプログラムが検査できないようにし、制御を取り戻すことができます。しかし、コードを実行するためのプログラムはまだそれを検査する必要があるため、コードを解読するために必要な情報を何らかの形で取得する必要があります。

しかし、ここで元の問題に戻ります。特定の用途 (指定した状況でのみコードを復号化して実行する) のためにユーザーに提供する情報 (復号化キー) であり、特定の状況下でのみコードを実行するためではありません。その他。

さらに興味深いことに、代わりに、チェックしたい環境の部分から派生したハッシュ値を使用してコードを暗号化することもできます (キーをどのように正確に派生させるかは、何をチェックしたいのかを知らずに言うことはできません)。次に、ユーザー (またはユーザーに代わってコードを実行するプログラム) がコードを検査したい場合は、環境からハッシュ値を導出する同じプロセスに従い、正しい環境を用意する必要があります。ただし、ユーザーはその環境からハッシュ値を収集して保持するように手配でき、いつでもコードを検査できます。

さらに、実際に正しい環境を保証するために何を確認できるかわかりません。プログラムが、それ自体の秘密部分を復号化して実行する前に、それ自体が正しく実行されていることを (コードをスパイするための変更なしで) チェックすることになっている場合、スパイは暗号化されたものを簡単に引き出して、(暗号化されていない) 環境をチェックするために実行される計算をコードでチェックし、実際に存在する環境ではなく、「正しい」環境に基づいて独自の計算を実行します。

最終的にできることは、極秘コードを復元するプロセスを煩わしくすることだけです。とにかく、ほとんどの人はわざわざあなたのコードを見ようとはしません。彼らは気にしません。残りのほとんどは、わずかな抵抗であきらめます (ただし、ソフトウェアを使用すると先延ばしになる場合があります)。その後もまだ試している人...(あなたの秘密コードが本当に価値がある/興味深い場合)常に、あなたが何をしてもうまくいく十分な動機を持つ人々がいる可能性があります(あなたが誰にもあなたのコードを決して教えない限り)そもそも)。したがって、私の傾向としては、秘密のコードを隠すための小さな簡単な努力をすることです。完璧なセキュリティを達成することについて心配する必要はありません。それは不可能だからです。

于 2011-09-07T00:52:14.080 に答える
0

対称暗号化を使用してコードを単純に暗号化できます。ランダムなキーを使用して暗号化し、そのキーをコンピューターに保存してから、コードの実行時にそのキーをメモリから削除する部分を暗号化されたコードに含めます。もちろん、誰かがキーを削除する前にコピーして後でメモリに復元することは比較的簡単ですが、それを目立たない場所に置くこともできますし、何をしてもコンピューターを以前の状態に復元できると思います (バックアップソフトウェアを使用します)。

于 2011-09-07T00:22:07.803 に答える
0

@Ben、興味深いプレゼンテーションです。できることとできないことを理解した瞬間から、私はこれについて考えていたと思います。私はあなたが言及したすべての可能な状況を考えました、そしてさらに、確かに方法がないようです. 頭を悩ませる程度にとどめておいたほうがいいかもしれません。あなたが名前を付けたように、それは超秘密のコードであるだけでなく、私はそれを隠すことに別の意図があります.それは、私の謙虚さの欠如を許してください.それは本当に興味深いコードです. 、Bを経由せずにAからCに到達するのに天才が必要であり、その方法を理解するには別の天才が必要な場合。解決できない問題で私を悩ませたのは私の経験不足でしたが. それでも、私はいつもそんなあり得ない状況の前に置かれ、私は通常、解決策を見つけるために地獄を上げます。私はそれをうまく管理します。しかし、今は降伏できないだけです。

最初から答えを知っていたのかもしれません。どれだけ試してもできないということです。もちろん、理由を見つけるのは簡単です。なぜなら、それは正常ではないか、正しくないからです。あなたが創造しているものの限界を知る知識と経験。そして、それを念頭に置いて、あなたよりも優れた誰かがあなたを克服する方法が必要であり、きっとあなたよりも優れた人がいるはずです. 少なくとも主観的に言えば、これが面倒だとしても。では、私の極秘コードを知られないように頑張ってみようかな。やはり神も偉大なパズルメーカーです。

とにかく、あなたの答えに感謝します。

PS 回答が遅くなり申し訳ありませんが、質問に 8 時間回答できなかったので、待たなければなりませんでした。

于 2011-09-09T05:03:36.660 に答える