GitがリビジョンのIDとしてSHA-1ダイジェストを使用していることを読みました。なぜ最新のSHAバージョンを使用しないのですか?
[〜#〜] update [〜#〜]:上記の質問とこの回答は2015年のものです。それ以来、Googleは最初のSHA-1を発表しました衝突: https://security.googleblog.com/2017/02/announcing-first-sha1-collision.html
明らかに、Gitが引き続きSHA-1を使用し続ける理由については、外部から推測することしかできませんが、これらは理由の1つである可能性があります。
unsigned char[20]
はあらゆる場所でバッファリングします;-)、後で改修するよりも、最初に暗号化の俊敏性をプログラムする方がはるかに簡単です。いくつかのリンク:
私の個人的な見方では、実際の攻撃はおそらくしばらく休みますが、実際に攻撃が発生しても、人々はおそらくハッシュアルゴリズム自体を変更する以外の手段で最初にそれらを緩和するでしょう、セキュリティを気にするならあなたは間違っているべきです攻撃者の能力も一方向にしか進まないため、アルゴリズムの選択に注意し、セキュリティ強度を継続的に上方修正するため、Gitをロールモデル、特にその目的として採用するのは賢明ではありませんSHA-1を使用することは、暗号化セキュリティを意図したものではありません。
これはMercurialのSHA1からの移行の緊急性に関する議論ですが、Gitにも適用されます。 https://www.Mercurial-scm.org/wiki/mpm/SHA1
要するに、今日、あなたが非常に巧妙でなければ、sha1よりもはるかに悪い脆弱性があります。しかし、それにもかかわらず、Mercurialは10年以上前にsha1からの移行の準備を始めました。
sHA1の後継者向けにMercurialのデータ構造とプロトコルを改良する作業が長年にわたって進行中です。 RevlogNGの導入により、Mercurial 0.9では10年以上前にrevlog構造の大きなハッシュにストレージスペースが割り当てられました。最近導入されたbundle2形式は、ネットワークを介した異なるハッシュタイプの交換をサポートしています。残りの部分は、置換関数の選択と後方互換性戦略の選択のみです。
GitがMercurialが移行する前にsha1から移行しない場合、ローカルMercurialミラーを hg-git で維持することにより、常に別のレベルのセキュリティを追加できます。