web-dev-qa-db-ja.com

Gitが暗号化ハッシュ関数を使用するのはなぜですか?

Gitが高速な非暗号化ハッシュ関数ではなく、暗号化ハッシュ関数 SHA-1 を使用するのはなぜですか?

関連質問:

Stack Overflowの質問なぜGitはバージョン番号としてSHA-1を使用するのですか?コミットの連続番号ではなくGitがSHA-1を使用する理由を尋ねます。

135
Praxeolitic

TLDR;


それは Linus Torvalds自身、2007年にGoogleにGitを提示したとき から確認できます。
(強調鉱山)

暗号的に安全と見なされるチェックサムをチェックします。誰もSHA-1を破ることができませんでしたが、ポイントは、SHA-1はgitに関する限り、セキュリティ機能すらありません。これは純粋な整合性チェックです
セキュリティパーツは他の場所にあります。 gitはSHA-1を使用し、SHA-1は暗号的に安全なものに使用されるため、多くの人々がそれを巨大なセキュリティ機能だと考えています。セキュリティとは何の関係もありません。取得できる最高のハッシュです。

良いハッシュを持っていると、データを信頼できるようになります、他にもいくつかの優れた機能があります。ハッシュが適切に配布されていることはわかっているため、特定の配布の問題を心配する必要はありません。

内部的には、実装の観点から、ハッシュが非常に優れていることを信頼できるため、ハッシュアルゴリズムを使用でき、悪いケースがないことがわかります。

そのため、暗号化の面を好む理由もいくつかありますが、それは本当にあなたのデータを信頼する能力に関するものです。
データをgitに入れると、5年後、ハードディスクからDVDに新しいテクノロジーに変換されてコピーされた後、それをコピーしたという事実を信頼できます5年後、取り戻すデータが入力したデータとまったく同じであることを確認できます。これは、ソースコード管理システムで実際に探すべきものです


2017年12月にGit 2.16を更新(2018年第1四半期):代替SHAをサポートするための取り組みが進行中です:「 なぜGitはより現代的なSHAを使用しないのですか? 」を参照.


gitはblobでのSHA-1衝突をどのように処理しますか? 」で、特定のSHA1でコミットを could エンジニアリングできた prefix (依然として非常にコストのかかる努力)。
しかし Eric Sink が「 Git:Cryptographic Hashes "( Version Control by Example(2011)book 」で言及しているように、ポイントは残ります=:

DVCSが同じダイジェストを持つ2つの異なるデータに遭遇しないことが重要です。幸いなことに、優れた暗号化ハッシュ関数は、このような衝突を非常に起こりにくいように設計されています。

遺伝的プログラミングによる最先端の非暗号化ハッシュの検索 」のような研究を検討しない限り、低衝突率で 良好な非暗号化ハッシュ を見つけることは困難です。 「。

また、「 ハッシュ高速化のための非暗号化ハッシュアルゴリズムの使用を検討する 」を読むこともできます。これは、たとえば「 xxhash "、RAM制限に近い速度で動作する、非常に高速な非暗号化ハッシュアルゴリズム。


Gitのハッシュの変更に関する議論は新しいものではありません。

(ライナス・トーバルズ)

Mozillaコードの残りの部分は実際には何もありませんですが、ちょっと、それから始めました。振り返ってみると、おそらくすでに正常にブロックを行ったPPC asmコードから開始すべきだったでしょうが、それは「20/20後知恵」のようなものです。

さらに、モジラのコードが恐ろしいほどの粗野な山であるため、物事を改善できると確信しました。ですから、実際の残りのコードよりも動機付けの側面に関するものであっても、それは一種のソースです。

実際の最適化ゲインの測定方法 に注意する必要があります

(ライナス・トーバルズ)

Gccががらくたコードを生成し、P4の問題のいくつかを隠すためだけに、物事が改善されることを保証できます。

(ジョン・タプセル- johnflux

gitをSHA-1から新しいアルゴリズムにアップグレードするためのエンジニアリングコストははるかに高くなります。どうやってうまくやれるのか分かりません。

まず最初に、おそらくこのバージョンではgitのバージョンを展開する必要があります(この会話ではバージョン2と呼びます)。他のスロットにあるSHA-1ハッシュ値。

そうすれば、最終的にさらに新しいバージョンのgitをデプロイしたら、SHA-1ハッシュに加えてSHA-3ハッシュを生成するバージョン3と呼びましょう。gitバージョン2を使用している人は相互運用を継続できます。
(ただし、この議論によると、彼らは脆弱である可能性があり、SHA-1のみのパッチに依存している人々は脆弱である可能性があります。)

つまり、 any ハッシュへの切り替えは簡単ではありません。


2017年2月更新:はい、衝突するSHA1を計算することは理論上可能です shattered.io

GITはどのような影響を受けますか?

GITは、すべてのファイルオブジェクトとコミットの識別と整合性チェックをSHA-1に強く依存しています。
本質的には、同じヘッドコミットハッシュと異なるコンテンツを使用して、良性のソースコードとバックドアのある2つのGITリポジトリを作成できます。
攻撃者は、いずれかのリポジトリを標的のユーザーに選択的に提供する可能性があります。これには、攻撃者が独自の衝突を計算する必要があります。

しかし:

この攻撃には9,223,372,036,854,775,808を超えるSHA1計算が必要でした。これには、6,500年のシングルCPU計算および110年のシングルGPU計算と同等の処理能力が必要でした。

まだパニックにならないようにしましょう。
詳細については、「 GitはblobでのSHA-1衝突をどのように処理しますか? ".

193
VonC