2020年07月22日
Moodle へのファイルアップロードで気づいたこと
- 2020-07-22 (Wed)
- 一般
「SHA-1 ハッシュは簡単に衝突が出来るんだよ」というのの実例となる二つの異なるファイルを Moodle に上げたかったのだけど,これら「同 SHA-1 ハッシュ値かつ同サイズ」の二つのファイルをアップロードすると両方とも同じファイルになってしまう(最初にアップロードしたほうに両方がなる).また,一つ目を消して二つ目をアップロードし直しても変わらず,二つ目が一つ目のファイルになってしまう.念のためブラウザを変えてやってみても同じ.
で,調べた.Moodle の開発者用ドキュメントの File API internals に答えがあって,各ファイルはその SHA-1 ハッシュ値をファイル名として保存されているとのこと.そこには "This means Moodle can not store two files with the same SHA1 hash" と書いてある.さらに,その続きには "for now we just test file lengths in addition to SHA1 hash." ともある.つまり,SHA-1 衝突かつサイズも同じものは同ファイル判定されてしまうということらしい.
まあ,実用上 SHA-1 が衝突することなんぞなかろうので,変な講義でピンポイントに困るくらいかね.
なお,同一サイズ同一ハッシュ値だけど異なる二つのファイルは https://shattered.io/ とかに行けば手に入る.
閑話休題.
こんな知ってても誰も得しない仕様に気づいたきっかけ:課題の提出物を固めた zip ファイル中のファイルのタイムスタンプを確認してたら「一度提出したファイルを削除して,別ファイルを提出したのだけど,やっぱり最初のファイルを提出し直した」という場合にタイムスタンプが変わらないことに気づいたこと.
このきっかけの作業自体もアレなのだけど,この時に「古いファイルが保存されている」のと「何らかの同一性判定が入っている」のとに気づいたので,これはなにか変なことができるかもしれないと思ってちょっと調べてみたという流れ.そしたら上の開発者ドキュメントに行き着いて,SHA-1 でやってるなら衝突できるから試してみるかとやってみたのが冒頭の状況.
頭の良い学生なら課題の締切に間に合わない時にとりあえず中途半端な提出を 2回しておいて,あとで「新しいファイルで再提出したんですよ.でも SHA-1 が衝突してたんで内容が古いまんまなんです」って言い訳して提出するのに使えるかもしれない.
- Comments: 0
- TrackBack (Close): -