[CpawCTF] 第八夜: 簡単な Hash を戻す
Q12.[Crypto]HashHashHash!
以下、問題文
Q12.[Crypto]HashHashHash!
10pt
ハッシュ関数とは、値を入れたら絶対にもとに戻せないハッシュ値と呼ばれる値が返ってくる関数です。
ですが、レインボーテーブルなどでいくつかのハッシュ関数は元に戻せてしまう時代になってしまいました。
以下のSHA1というハッシュ関数で作られたハッシュ値を元に戻してみてください!(ヒント:googleで検索)
e4c6bced9edff99746401bd077afa92860f83de3
フラグは
cpaw{ハッシュを戻した値}
です。
答案
今回は hash値
を元に戻そう、という問題らしいです。
ところで hash値
もとい、これを作る hash関数
は簡単にいうと、
「入力に対して、一対一で対応する返事をする関数で、逆演算が『大変な』もの」
という関数になります。
逆演算とは「一旦 hash関数
にかけて暗号化したものを元の入力に戻す」ということです。(だいたい)
用途としては、 返事が入力と一対一で対応しているので (ここが割と大事) 、入力すべきものを何かしら隠したい、などという場合に使われます。
例えば、パスワードを平文のまま使ったり、保存したりすると危ないので、
hash関数
にかけたものを保存しておいたりする、という、いわゆる「暗号化」の一種として使われます。
前にやった問題いくつかの、「古典的」ではない方の暗号...
コンピュータの長く短い歴史の中で、 暗号は「解くのに時間や労力がかかる難しいもの」であること (数年計算しないと元に戻せない、など) を前提に作られ、 コンピュータの性能が上がったり、頭がめちゃくちゃ良い人が解析する方法を見つけてしまったりして、 より難しいものを採択し、アルゴリズムをアップデートしていく...
という、いわば「いたちごっこ」の上で進んできました。
なので、今のコンピュータの性能や、今までに培われてきた理論や技術を用いれば 昔の暗号の一部分は解くことができてしまいます。
今回も、簡単な hash関数
にかけられた値であるようなので、
今までに培われたなんらかの方法で元に戻す手段があるのでしょう。
検索していきます。
キーワードは、今回使われている hash関数
(hash値
を作る方法) がsha1
である、ということです。(問題文より)
sha1 戻す [検索]
sha1 解析 [検索]
などで探していきます。
方法
簡単な hash値
を元に戻す、というWebサービスがあるみたいです。怖いですね。
具体的な方法は、書いてあったり、書いてなかったり、参考サイトに書いてあるものをそのまま引用すれば
簡単な
hash関数
に対して、考えられる入力と、その出力をたくさんDB
に登録しておいて、 出力側で一致すれば、入力がDB
の関連により求められる。
ということらしいです。
一体いくつ登録されているのでしょう...
また、上記のような総当たり形式ではなくとも、 もしかしたら裏側で解析のための何かしらのアルゴリズムが動いている、などという可能性もあるかと考えられます。
とりあえず、今回は参考に上がっておりました Hash Toolkit というサイトを使わせていただきます。
サイトに載っている説明をみると
What is Hash Toolkit?
Decrypt password hashes super fast with Hash Toolkit. You can decode hashes into the original text. You also can generate hashes using different algorithms. Hashes are used for many applications like security, authentication and passwords.
「hash関数
により作られたパスワードをめっちゃ早くデクリプト (解析する, 元に戻す, みたいな意味) できるよ。
ハッシュを戻すこともできるし、もちろん hash値
を geneることもできるよ。」だそうです。
Is it possible to decode a hash?
Hash functions are built in a way that it's very easy to generate a hash / fingerprint for a text, but almost impossible to decode the hash back to the original text.
「hash値
を元に戻すことなんて、できるの?」という項目がありますが、これに対し
「hash関数
は超簡単に hash値
を作ることができるように設計されているが、だいたいに於いて、逆演算して元のオリジナルなテキストを得るのは難しいです (´・ω・`)」と、なんだか曖昧なことが書かれていますね。
きっと、「いくつか戻せるものもあって、そういったものは戻せる」(小泉進○郎構文??) ということなのでしょう。
いつも通り、前置きが長くなってきたところで、早速 Flag
をゲットしに行こうと思います。
ページの中間くらいに、hash
を生成するアルゴリズムが選べるので、問題文にある通り sha1
を選択します。
ちょっと見辛いですが、写真左上にあります。
実際のページでは、真ん中にあります... (スクショ撮ってしまうと、実際のページとずれるので、ご容赦ください)
ページ上部に、「ここに hash値
を入れてください」と言わんばかりの入力窓があるので、
問題文から hash値
をコピってここに入力し、虫眼鏡マークをクリックします。
すぐにデクリプトした、オリジナルな値が帰ってきました。
Shal
だそうです。
思ったより短いですが、問題文に従い cpaw{Shal}
で Flag
を提出してみます。
submit
一度、cpaw{shal}
と s
の大文字小文字を間違えて提出してしまったので、invalid answer
を食らってしまいました...
みなさまもお気をつけください...
無事、受理していただけました。
今回は何かプログラムを書いた訳でもないですし、
自分で何かを使って解析した訳でもなく、
web
サービスを使わせていただいただけなので...
「やった感」が小さいですが、クリアはクリアなので、この辺で失礼します。
次回はソートの問題らしいです。