次のアスキーアートのように、循環git履歴を作成することは可能ですか?
A (root)
| H<-G
| / \
VL \
C F
\ /
\ /
D->E
C
とのマージコミットはどこにA
ありますがH
、H
それ自体はの子孫ですC
次のアスキーアートのように、循環git履歴を作成することは可能ですか?
A (root)
| H<-G
| / \
VL \
C F
\ /
\ /
D->E
C
とのマージコミットはどこにA
ありますがH
、H
それ自体はの子孫ですC
各コミットIDは、直接の祖先のコミットIDを含むSHA-1ハッシュであるため、通常、祖先の子孫となるIDを見つける前に、祖先のIDを知っておく必要があります。したがって、サイクルの構築を開始する場所はありません。
短いサイクル構造(「短い」はサイクル内で2 ^ 64未満のコミットのようなものを意味します)を構築できることは、使用されているハッシュ関数の中断を構成します。
SHA-1は衝突耐性に関して破壊されていることが知られており、この破壊の背後にある技術がサイクルを構築するために適応できると考えられます。しかし、これを行う方法は明確ではなく、既成の暗号解読コンポーネントを接続するだけの問題ではありません。
Henning Makholmが上記で指摘しているように、コミットには親のSHA1ハッシュコードが含まれ、同じSHA1ハッシュで2つのドキュメントを作成するための既知の手法があり、動作するのに複数のハイエンドCPU年しか必要としません。
考慮されていないのは、これらの手法が制御されたドキュメントの変更に依存していることです。2つの現在のドキュメント(特定のハッシュコードを含む)が与えられると、結果のハッシュコードのペアを互いに「より近く」する変更を計算できます。いくつかのメトリック。ただし、完全なSHA-1での衝突の検出から、「メッセージの変更によってすべてのメッセージ条件が維持されることに注意してください」。
つまり、これらの特定のドキュメントで特定のビット変更を計算することを意味します。また、変更を加えると他の160ビットもランダム化されるため、gitcommitでは実行できません。相互依存するgitcommitハッシュに予測可能な変更を加えるようなことはなく、既知の手法は文字通り開始ゲートから抜け出すことができません。
それでも、あなたが求めている特定のタスクが実際にどれほど危険であるかを説明していません。それは、同一のハッシュコードを持つ2つのドキュメントの検索ではなく、それぞれが他方のハッシュコードを含む2つのドキュメントの検索です(これもあなたがそれらを同一にすることができれば、彼ら自身である)特定の場所で。私が今まで聞いた限りでは、この問題に関する研究はまったくありません。
ですから、本当の答えは、「これを、野蛮なチャンス以外の方法で実現するために、誰も試みたことがない、ましてや手がかりが最も少ない」ということだと思います。
いいえ。
Gitは有向非巡回グラフを形成するため、サイクルを持つことはできません。