「自発的コンテキストスイッチ」とは何ですか?


34

バイナリファイルを取得し、そのパスワード(宿題)を解読することになっています。また、指定された関数(バイナリファイルの一部である関数)もありました。その関数は、入力文字列が文字ごとに正しいパスワードと比較され、文字が間違っていたときに即座に偽を返したことを示しました(それは安全な方法ではありません例)。しかし、教師は結果を返すランダムタイマーを追加しました(正しい/間違った)。

とにかく、私はすでにリバースエンジニアリングで正常に実行し、正しいパスワードを取得しました。今、私はコマンドラインでそれを遊んでいます:

/usr/bin/time -v ./program_name enter_password

このコマンドを使用すると、システム時間、スワップ、実行時間などの多くの情報が得られます。しかし、私にとって最も興味深いのは、「任意のコンテキストスイッチ」です。 「わかった!

間違った文字を入力するほど、「任意のコンテキストスイッチ」が表示されます。

そのコマンドを入力し、文字を入力し、「任意のコンテキストスイッチ」を観察するだけで、パスワードを解読するのに2時間近くかかりました。1つのキャラクターが正しかったときはいつでも、「自発的なコンテキスト切り替え」は1つ減少しました。

私の質問、「自発的コンテキスト切り替え」とは正確に何であり、なぜパスワードを解読するのに役立つのですか?


5
サイドチャネル攻撃の豊富で、まだ完全に理解されていない分野を自分で発見したことを祝福します。
-zwol

1
@zwol「リッチ」とはどういう意味ですか?さらに、現在、クラスでのサイドチャネル攻撃を扱っています。その分野をすぐに「完全に理解」していないことを失礼します
。...-cnmesr

15
@cnmesr私は、皮肉なコメントではなく、誠実なコメントとして、新しい発見がまだ行われているので、zwolはこのフィールドを興味深いものと考えていると言った。それはことはありませんあなたはそれがあることだ、完全にそれを理解していない、誰もそれを完全に理解していない、そしてそれはそれは興味深いものです。
hvd

3
@hvd cnmesrはい、それは私が意図したことです。
zwol

@zwolああすみませんでした!私はあなたを誤解し、攻撃と見ました:p
cnmesr

回答:


36

manページでtimeは、自発的および非自発的なコンテキストスイッチの概念について説明しています。

The resource specifiers [...] are:
   c      Number of times the process was context-switched involuntarily
          (because the time slice expired).
   w      Number of times that the program was context-switched voluntarily, 
          for instance while waiting for an I/O operation to complete.

(引用は私のDebianシステムからのもので、リンクされたmanページのテキストは少し異なります)

つまり、プロセスが(他の何かが発生するのを待っている間に)何もすることがないためにプロセスがCPUを離れる場合、コンテキストスイッチは任意です。何らかの計算を継続したいが、OSが他のプロセスに切り替えるときを決定した場合、非自発的。


これがパスワード確認プログラムにどのように関連するかは、プログラムが実際に行うことによって異なります。

コメントにリンクされたソースコードから、プログラムはusleep()一致しない各文字に対して1回呼び出し、その後、次の文字で比較ループを継続することがわかります。スリープは、CPUを譲るのと同じくらい自発的なものであるため、これらの呼び出しは、各非キャラクターの自発的なコンテキストスイッチとして表示されます。

Linuxでは、を使用して呼び出しstraceも表示できるはずです。

最終的な遅延は、のランダムなスリープから発生しますT * (rand() % 3)。つまり、定数の0、1、または2倍です。これはかなり粗い粒度なので、同じパスワードで複数回試行することで簡単に平均化できるはずです。


3
ここで私は上記の機能のソースコードであるpastebin.com/iTzheD4u私はstraceのとの通話を見て、うまくいけば、いくつかのより多くの情報を取得しますありがとうが。ランダムタイマーについて:パスワードの長さが間違っている場合、出力時間は同じ(非常に高速)であり、ランダムタイマーは実行されません。パスワードの長さが正しい場合、ランダムタイマーが実行されるため、出力はランダムになります。
cnmesr

@cnmesr、ああ、それは素晴らしいです!
-ilkkachu
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.